Le Forum francophone communautaire des utilisateurs de Kali linux

Développement => Aide au développement => Discussion démarrée par: Teeknofil le 08 août 2015 à 04:37:35

Titre: Crisis Wordlist Generator
Posté par: Teeknofil le 08 août 2015 à 04:37:35
Bonjour,

Aujourd'hui je poste pour vous présenter mon petit logiciel Crisis Wordlist Generator.

Présentation du tool.

Crisis Wordlist Generator que j'appelle par son petit nom crisis est un logiciel écrit en C# avec mono pour Linux ( j'ai aussi une version Windows que je publierai).

Crisis fait ce que crunch ne fait pas. Le point fort de ce petit logiciel c'est qu'il génère des charset pour crunch. Crunch fait des listes de mots par incrémentation pour faire tous les possiblement par composition répéter.

L’inconvénient de cette méthode c'est que cela génère beaucoup de combinaison invraisemblable comme :

aaaa
aaab
aaac

Mon logiciel au contraire permet de générer de mot sans répétition comme par exemple

abcd
abce
abcf


A quoi ça sert ?

Avec cette méthode on peut calculer toutes les combinaisons possibles sans répétitions pour faire d'autre combinaison avec crunch. Et pour les répétions pas d'inquiétude crunch sans chargera comme d'habitude.

Téléchargement.

Vous pouvais télécharger le logiciel a cette adresse : https://github.com/teeknofil/Crisis-Wordlist-Generator (https://github.com/teeknofil/Crisis-Wordlist-Generator)

C'est une version beta pas encore finie alors soyer pas trop dur avec je travaillerai dessus au prochaine vacances. Il est Open source donc vous pouvais aussi personnalisé le tool.

Installation

Après avoir téléchargé le zip décompressez le.

unzip Crisis.zip
Archive:  Crisis.zip
inflating: Crisis/Crisis.exe       
inflating: Crisis/crisis

Crisis est un autonome en exe mais pas d’inquiétude il a été coder pour Linux. Pour le faire fonctionner il faut installer mono que Linux reconnaisse le C#.
apt-get install mono-runtime
Après pour le démarrer dans la console c'est comme tous les scripts.

cd Crisis
chmod +x Crisis.exe
./Crisis.exe

Démonstration.

Quand le logiciel démarre vous pouvez naviguer à l'aide du pavé numérique en utilisant des chiffres.

./Crisis.exe
 Crisis Wordlist Generator BETA by Teeknofil, ver: 1.0.0
 Trouble: http://www.kali-linux.fr/forum/index.php

 N° DESCRIPTION

 1) HEXA
 2) NUMBER
 3) SPECIAL CHARACTER
 4) LATIN   CHARACTER UPPERCASE
 5) LATIN   CHARACTER LOWERCASE
 6) LATIN   CHARACTER UPPERCASE & LOWERCASE
 7) SWEDISH   CHARACTER UPPERCASE
 8) SWEDISH   CHARACTER LOWERCASE
 9) SWEDISH   CHARACTER UPPERCASE & LOWERCASE


 With what category you want to work : 5

Disons comme exemple que nous voulons générer un charset d'une taille de 21 caractères alphabétiques pour calculer toutes les combinaisons avec crunch. Je choisis donc le 5.


1) abcdefghijklmnopqrstuvwxyz

2) abcdefghijklmnopqrstuvwxyz [space]

3) abcdefghijklmnopqrstuvwxyz0123456789

4) abcdefghijklmnopqrstuvwxyz0123456789
[space]

5) abcdefghijklmnopqrstuvwxyz0123456789
!@#$%^&*()-_+=

6) abcdefghijklmnopqrstuvwxyz0123456789
!@#$%^&*()-_+= [space]

7) abcdefghijklmnopqrstuvwxyz0123456789
!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/

8) abcdefghijklmnopqrstuvwxyz0123456789
!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ [space]


 Enter the number corresponding to your choice : 1

Maintenant il nous faut juste choisir la suite de caractères dont nous avons besoin, je chois donc le 1 (tous ne fonctionnent pas encore).

1) Charset Generator for Crunch without repetition
2) Combination without repetition
3) Random with repetition

 
 Type the number corresponding to the menu : 1

Ici il faut choisir quels types de génération de mots qu'on veut. Je choisis 1 pour faire une liste de chartes. L'option 2 faits exactement la même chose que l'option 1 à la différence qu'elle met pas en forme le fichier pour crunch.
L'option 3 est l'exacte opposée car elle génère des mots aléatoires. Je vous laisse le soin de la découvrir.

What is the size of your charset : 21
On choisit la taille des mots, par exemple 21.

1) Yes
2) No

 Do you want to save the output to a file : 1

Je répons oui pour sauvegarder un fichier.

Please wait [\]
240 combination will be generated with 240 line in a file

Your file has been saved => /root/Desktop/output-dico/charset/charset_2.lst

Crunch commande example :
crunch 21 21 -f charset_2.lst charset1 -s zabcdefghijklmnopqrst

On attend un peu et c'est fait. Vous peu voir le résultat avec cat.

cat /root/Desktop/output-dico/charset/charset_2.lst
Regardons le résultat  avec crunch.

crunch 21 21 -f /root/Desktop/output-dico/charset/charset_2.lst charset1 -s zabcdefghijklmnopqrst -i
Crunch will now generate the following amount of data: 15982540453002298386 bytes
15242138340952 MB
14884900723 GB
14536035 TB
14195 PB
Crunch will now generate the following number of lines: 13303804616302071483
zabcdefghijklmnopqrst
aabcdefghijklmnopqrst
babcdefghijklmnopqrst
cabcdefghijklmnopqrst
dabcdefghijklmnopqrst
eabcdefghijklmnopqrst
fabcdefghijklmnopqrst
gabcdefghijklmnopqrst
habcdefghijklmnopqrst
iabcdefghijklmnopqrst
jabcdefghijklmnopqrst
kabcdefghijklmnopqrst
labcdefghijklmnopqrst
mabcdefghijklmnopqrst
Titre: Re : Crisis Wordlist Generator
Posté par: coyotus le 08 août 2015 à 07:52:10
Super, dommage que je n'y connais rien en C# pour regarder le code.
Titre: Re : Crisis Wordlist Generator
Posté par: DLX113 le 08 août 2015 à 11:41:47
Salut,

Super, un générateur qui ne sort pas de combinaisons wtf   :D
Pour le feedback je viens de tester vite fait mais il me sort ça et je ne sais pas d'où ça vient (je n'y connais rien en C# non plus)
Mauvaise manip' ? Pb de mémoire ? Autre ?
En espérant que ça sera utile  :)

Pour la postérité les paramètres que j'ai entré sont :
CHARACTER UPPERCASE & LOWERCASE
Lettres et chiffres uniquement
Charset Generator for Crunch without repetition
Size : 5
Do you want to save the output to a file : 1
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 08 août 2015 à 13:13:58
Ton projet est sympa et pour l'améliorer un peu, tu pourrais, par exemples dans ta classe Charset, avec tous ces charsetSelecting.Add("!"); charsetSelecting.Add("@"); ... sur une ligne sont un peu redondants. En C# ne peut-on pas faire un truc genre ? :
private List<string> alpha_lower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
private List<string> alpha_upper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
... etc et de Add(), voir Merge() ces listes a tes listes en fonction.. voir mieux, je me demande si C# n'a pas une lib a importer qui les contient deja sous forme de constantes ou enum..
Après je connais pas trop le C# mais sa synthaxe est fort cousine au java que je pratique.

Et effectivement, dans ta classe Generate, il pourrait y avoir un try catch dans public void Charset() comme garde-fou aussi. C'est toi qui voit mieux où la positionner.

Bien à toi.
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 08 août 2015 à 15:12:36
Citer
Ton projet est sympa et pour l'améliorer un peu, tu pourrais, par exemples dans ta classe Charset, avec tous ces charsetSelecting.Add("!"); charsetSelecting.Add("@"); ... sur une ligne sont un peu redondants. En C# ne peut-on pas faire un truc genre ?

Malheureusement c'est pas possible, si je met tous les caractère en une seul fois dans la liste la méthode qui fait le combinaison non répéter voit qu'un élément au lieu de voir 26 lettre par exemple.
( Si List<string> alpha_lower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"} alors
charsetSelecting.Count == 1 //wtf)

Citer
Super, un générateur qui ne sort pas de combinaisons wtf   :D
Pour le feedback je viens de tester vite fait mais il me sort ça et je ne sais pas d'où ça vient (je n'y connais rien en C# non plus)
Mauvaise manip' ? Pb de mémoire ? Autre ?
En espérant que ça sera utile  :)

C'est à cause de ça que c'est une béta, c'est un bug qui ce produit quand il y a plus de 27 caractère. Dans la méthode CombinationCharset dans la class combination la variable numberCombinationNoRepeat est égal à 0 quand il y a plus de 26 caractère. J'ai passer deux jours à chercher pourquoi sans succès. Si tu prend le code source et que tu met un nombre à la place numberCombinationNoRepeat dans la boucle while cela va fonctionner puisque numberCombinationNoRepeat sera plus grand que i. Tu peux installer monodevellop constaté le bug par toi même.

C'est pour cette raison que je l'ai publiai avec ce bug en espérant que la communauté open source m'aide à résoudre ce problème. Si vous connaissez une personne intéresser par le programme et qui connais le C# (mois ça fait que quelque mois que je code dans ce langage) il peut télécharge le code source sur GitHub.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 08 août 2015 à 17:03:46
Regarde ici si ca peut t'aider => http://abundantcode.com/how-to-merge-two-lists-using-linqs-union-in-c/

En utilisant .Union() de System.Linq

En gros, en reprenant mes exemple (et en corrigeant mon "simili-code") ca donnerait un truc genre:
private List<string> alpha_lower = new List<string>(){"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
private List<string> alpha_upper = new List <string>(){"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
...
List<string> alpha_lower_upper = alpha_lower.Union(alpha_upper).toList();
...

J'ai vu d'autres exemples sur stackoverflow avec Concat() aussi => http://stackoverflow.com/questions/4488054/merge-two-or-more-lists-into-one-in-c-sharp-net

ca diminuerait deja de beaucoup le nombre de lignes de code dans ta classe Charset et ca rendrait ton code plus joli a lire aussi :)
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 09 août 2015 à 00:37:09
J'ai effectué vite fait un petit test sous monodevelop pour vérifier que tu peux effectivement fusionner des listes, voici un bout de code et le résultat:
Code:
using System;
using System.Collections.Generic;
using System.Linq;

namespace Test {

public class Program {

public static string ArrayToString (List<string> _list_){
string _str_ = "";
foreach(var items in _list_){
_str_ += items;
}
return _str_;
}

public static void Main(string[] args){
    List<string> _liste1_ = new List<string>(){"a","b","c","d"};
    List<string> _liste2_ = new List<string>(){"e","f","b","a"};

    Console.WriteLine("liste1 : nombres d'elements: "+ _liste1_.Count());
    Console.WriteLine("liste2 : nombres d'elements: "+ _liste2_.Count());
   
Console.WriteLine("test de Union()");
    List<string> _union_ = _liste1_.Union(_liste2_).ToList();
    Console.WriteLine("fusion par Union : "+ ArrayToString(_union_)+" nombre: "+ _union_.Count());
   
Console.WriteLine("test de Concat()");
    List<string> _concat_ = _liste1_.Concat(_liste2_).ToList();
    Console.WriteLine("fusion par Concat : "+ ArrayToString(_concat_)+" nombre: "+ _concat_.Count());
}

} // end class
} // end namespace

Le résultat donné:
liste1 : nombres d'elements: 4
liste2 : nombres d'elements: 4
test de Union()
fusion par Union : abcdef nombre: 6
test de Concat()
fusion par Concat : abcdefba nombre: 8
Tu remarques que Count donne bien le nombre d'éléments de chacunes des listes.

Bien à toi.
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 09 août 2015 à 22:17:27
Merci je me pencherai dessus prochainement, le problème comme j'utilise qu'une seul liste je vois pas comment avec ta solution je peux retourner le résultat. A chaque fois j'utilise que la liste charsetSelecting ou j'ajoute les bons caractère en fonction de la réponse de l'utilisateur. A voir, je verrais plupart là mes vacances sont fini.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 09 août 2015 à 22:50:28
rien t'empeches de créer une mini classe ou une interface avec juste des définitions des listes les plus ciblées possibles comme:
Liste <string> num = new Liste <string> () { "0", ... "9" };
Liste <string> hexL = new Liste <string> () { "a", ... "f"};
Liste <string> hexU = new Liste <string> () {"A", ... "F"};
Liste <string> alphaL = hexL.Concat( new Liste <string> () {"g", ... "z"}).ToList(); // ou le prendre au complet, Union supprime les doublons
Liste <string> alphaU = new Liste <string> () {"A", ... "Z"};
Liste <string> sym = new Liste <string> () {"!","@","-","_", ... etc};

et dans ta classe Charset juste définir (j'ai pas ton code sous les yeux la)
// alpha L + U
charsetSelecting = alphaL.Concat(alphaU).ToList();
// alpha L + U + num
charsetSelecting = alphaL.Concat(alphaU).Concat(num).ToList();
...
etc

A adapter, si c'est une classe ca sera TaClasse.alphaL par exemple, ou TaClasse.getAlphaL(), par contre pour les interfaces en C# je sais pas, je dois tester.

Mais je pense que les garder sous formes de propriétés privées dans ta classe Charset suffirait amplement.

Edit: je viens de reprendre un morceau de ton code, ca sera mieux pour m'expliquer :)

avant:
        public List <string> Hexa()
        {
            bool b = true;

            Console.Write("\n Enter the number corresponding to your choice : ");
            while (b)
            {
                if (category == '1')
                {
                    //hex_lower
                    charsetSelecting.Add("0"); charsetSelecting.Add("1"); charsetSelecting.Add("2"); charsetSelecting.Add("3"); charsetSelecting.Add("4"); charsetSelecting.Add("5"); charsetSelecting.Add("6"); charsetSelecting.Add("7"); charsetSelecting.Add("8"); charsetSelecting.Add("9"); charsetSelecting.Add("a"); charsetSelecting.Add("b"); charsetSelecting.Add("c"); charsetSelecting.Add("d"); charsetSelecting.Add("e"); charsetSelecting.Add("f");
                    b = false;

                }
                else if (category == '2')
                {
                    //hex_upper
                    charsetSelecting.Add("0"); charsetSelecting.Add("1"); charsetSelecting.Add("2"); charsetSelecting.Add("3"); charsetSelecting.Add("4"); charsetSelecting.Add("5"); charsetSelecting.Add("6"); charsetSelecting.Add("7"); charsetSelecting.Add("8"); charsetSelecting.Add("9"); charsetSelecting.Add("A"); charsetSelecting.Add("B"); charsetSelecting.Add("C"); charsetSelecting.Add("D"); charsetSelecting.Add("E"); charsetSelecting.Add("F");
                    b = false;                   
                }
                else
                {
                    try
                    {
                        category = char.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.Write(" Enter the number corresponding to your choice : ");


                    }
                    finally
                    {
                        if (noLetters.IsMatch(info.ToString()))
                        {
                            Console.Write(" Enter the number corresponding to your choice : ");

                        }

                    }

                } 
            }
           
            return charsetSelecting;           
        }

après
        public List <string> Hexa()
        {
            string message = "  Enter the number corresponding to your choice : ";
            Console.Write("\n"+message);
            var category = char.Parse(Console.ReadLine());
            while ((category != '1') && (category != '2') ) // voir en C# comment l'écrire ici
            {
                    try
                    {
                        category = char.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.Write(message);
                    }
                    finally
                    {
                        if (noLetters.IsMatch(info.ToString()))
                        {
                            Console.Write(message);
                        } // end if
                   } // end try - catch - finally
            }
            if (category == '1')
            {
               //hex_lower
               return num.Concat(hexL).ToList(); //tu peux return directement ici
            }
            else  // ca sera '2'
            {
               //hex_upper
               return num.Concat(hexU).ToList(); //itou         
            }     
        }
! Attention: J'ai juste adapté l'algorithme au visuel, c'est pas encore testé en pratique ! Je ferai ca sous monodevelop pour voir si y a des erreurs (c'est fort probable qu'il y en ait)
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 11 août 2015 à 22:56:30
Bonsoir WarLocG;

Juste un petit message pour dire que j'ai Upload les modifications que tu m'as suggéré. Tous est en ligne.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 12 août 2015 à 00:08:45
Je viens de voir, ca donne déjà beaucoup mieux  8) Tu as donc testé et ca prend ?

Maintenant, toujours pour améliorer un peu:
 1) j'ai vu que tes catégories sont toujours des nombres allant de 1 à 9 au maximum, est-ce que au lieu d'utiliser des caractères ca ne serait pas plus simple si tu utilisais des entiers à la place (en convertissant le char en integer) (ou un format plus petit comme des short, byte, ... la encore je connais pas encore le langage pour savoir quels types existent) ? Tu pourrais faire un test beaucoup plus simple tel que "si catégorie > 0 et catégorie <= au nombre le plus grand" de cette manière.
 2) tu as du code qui se répète:
try
{
       category = char.Parse(Console.ReadLine());
}
catch (FormatException)
{
       Console.Write(" Enter the number corresponding to your choice : ");
}
finally
{
       if (noLetters.IsMatch(info.ToString()))
       {
              Console.Write(" Enter the number corresponding to your choice : ");
       }
}
Tu pourrais éventuellement mettre toute ta boucle while alors dans une fonction avec un return de la categorie lorsqu'elle est bien rentrée. Voir sortir 0 ou -1 en cas d'échec.
Ce qui donnerait par exemple:
var category = TestFrappe(); // avec public integer TestFrappe() par exemple
et ensuite tu rentre dans tes if, tu ne fera ainsi qu'un seul passage dans tes if
3) Est-ce que les conditions en selon-que (switch...case) existent en C# ? Ca je vais checker de mon coté.

Bien à toi.
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 13 août 2015 à 21:15:07
T' es suggestion sont toujours les bienvenues mais je voudrai voir pour implanter des commandes. Avant de faire les modifications que tu suggères je voudrais voir si tu pourrais me souffler des idées pour faire du polymorphisme dans le code. J'ai regardé le java et après en avoir discuté avec mon collègue je peux dire que le java est très proche du c# puisque Cest un fork du java fait par Microsoft surtout au niveau de la syntaxe.
 
J'ai implanté cette librairie dans la version expérimentale du programme :
http://www.codeproject.com/Articles/19869/Powerful-and-simple-command-line-parsing-in-C#

Elle n'est pas encore en ligne puisque Mr Kali 2.0 se fait attendre depuis hier et empêche de démarrer mon ide ou autres programme (je rêve à la version 5 de monodevellop).

crisis -h
Option :

-l : taille de la chaîne de caractère
-w : types de caractère choisis
-r : génère des caractère aléatoire
-e : génère une liste de caractère sans répétition
-f : sauvegarde le fichier


Le principal problème que j'ai c'est l'appellent des charset avec une option -w. Exemple :

crisis -l 21 -w lalpha -r | aircrack-ng -w- out.1.01.cap

De la façon dont j'ai écrit mes méthodes je peux pas appeler la bonne méthode grâce à switch qui choisira la bonne liste avec l'option -w.
Le deuxième problème et le pipe où je me suis cassé les dents. HELP.
L'option -f va me forcer à tous réécrire est la je redoute les fautes frappées de l'utilisateur. Pff
 

 
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 13 août 2015 à 23:59:16
Pour récupérer les informations passés en arguments dans une ligne de commande, en java, c'est dans la variable String[] args et de ce que j'ai pu en tirer vite fait en C# ca semble être la même chose.

Pour "crisis -l 21 -w lalpha -r | aircrack-ng -w- out.1.01.cap", la variable args contiendra {"-l", "21", "-w", "lalpha", "-r"} après j'ai un doute avec le pipe si elle se trouvera également dedans ou si le système va automatiquement considérer que c'est une autre commande. A tester vite fait. Mais effectivement il faudra parser les élements de ce tableau et pourquoi pas, après un test, les transférer vers une hashtable/hashmap, enfin, un dictionnaire, avec clé et valeur. Du coup, je pense que le for (int i=0; i < args.length; i++) -- désolé j'écris en java -- est plus indiqué que le (for String i : args) vu qu'on aurait besoin selon les cas de l'élément suivant (pour "-l" par exemple) grace a son index, donc je vois un switch pour tester args\[i\] et au cas par cas aura d'autre conditions dedans.

public static void main(String[] args){
HashMap <String,String> _args = new HashMap<>(); // le dictionnaire clé - valeur pour retrouver rapidement le contenu de chaque option

for (int i = 0; i < args.length; i++){
  switch (args[i]){
    case "--length":
    case "-l":
       if ( i == (args.length -1) ){
          // "-l" est le dernier élément dans args
          break;
       } else { // il y a encore un élément après "-l"
          if ( Pattern.matches("^(\d)+$",args[i+1]) ){// si la string a une forme numerique
             _args.put("ARG_LENGTH",args[i+1]); // on insere un nouvel élément clé="ARG_LENGTH" valeur="21" (dans ton exemple) dans ce "dico"
          }
       }
       break;
    case "--wordlist":
    case "-w":
      if (i == (args.length -1) ){
          // "-w" est le dernier élément dans args
          break;
       } else { // il y a encore un élément après "-w"
          if ( Pattern.matches("^(lalpha|ualpha)+$",args[i+1]) ){// si la string correspond aux mots clé des wordlist (faudrait avoir la liste des mots clés)
             _args.put("ARG_WORDLIST",args[i+1]); // on insere un nouvel élément clé="ARG_WORDLIST" valeur="lalpha" (dans ton exemple) dans ce "dico"
          }
       }
       break;
    case "--random":
    case "-r":
       // TODO liste de caractères random
       break;
    case "--endless":
    case "-e":
       // TODO liste sans repetition
       break;
    case "--file":
    case "-f":
       // TODO sauvegarde vers fichier
       break;
    case "--help":
    case "-h": synthax(); break;
    default: continue;
  }
}
...
// récupération des valeurs
byte length = Byte.parseByte( _args.get("ARG_LENGTH") );
String wordlist = _args.get("ARG_WORDLIST");
...
}

Petit algo que je te sors vite fait, il est pas testé actuellement. Puis il utilise des subtilités du projet Coins comme les String dans un case et l'opérateur diamant ( <> ), c'est pour gagner du temps. C'est pas exhaustif, c'est fait à chaud, j'aurai surement d'autres idées meilleures par la suite.

Pour le polymorphisme, je vais regarder ca à mon aise comment on pourrait procéder dès que j'ai un peu de temps. Mais pour faire court, tu dois avoir une classe mère qui sera abstraite ou pas d'où il y aura des méthodes et des propriétés qui seront importées, donc faudra penser le plan, voir si on va avoir besoin d'un pattern aussi..

Pour l'option -f, tu peux utiliser un regex genre "^[a-zA-Z0-9]+(\.[a-zA-Z0-9]{3})?$"

Edit: Je viens de voir ta library, effectivement ca fera gagner du temps.

Edit2: Afin de comprendre ton code, je me suis renseigné un peu sur le langage. Et y a un truc qui me dérange fortement avec le C# : comment peut-on savoir si on a faire à un héritage ou une interface, les deux s'écrivent pareillement en C# ?

http://www.codeproject.com/Articles/1445/Introduction-to-inheritance-polymorphism-in-C
http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners

Prenons, la classe enfant, Toto, la classe maman, Tata et l'interface Titi:
En java tu fais:
class Toto extends Tata implements Titi // extends -> héritage ; implements -> interface
En C#:
class Toto : Tata // la c'est un héritage
class Toto : Titi // la c'est une interface
class Toto : Tata, Titi // la t as les deux mais tu vois pas la différence, faut savoir qu'est-ce qui est quoi
Conclusion: En C# t'es paumé  ???

Bon je vais me répondre a moi-même: si il y a les méthodes qui reviennent c'est une interface; si y a un new (à la place de @Overrides) alors on a un héritage (avec une méthode surchargée mais la n'est pas la question)
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 14 août 2015 à 19:42:00
Bon j'ai analysé ton code, et schématiquement ca ressemble a peu près a ca:
                      Charset
                        /\
                       /__\
                         |
                    Combination
                        /\
                       /__\
                         |
                      Generate
                        /\
                       /__\
                         |
                    MainConsole
                        /\
                       /__\
                         |
                     Program
avec des declaration de classe ecrite dans le genre:
namespace Crisis_Wordlist_Generator
{
    public class XXX : YYY
    {
    ...
    }
}
Il n'y a pas de méthode qui reviennent donc ce sont des héritages (et de toute facon il n'y a aucune classe contenant des méthodes sans corps), bref, il n'y a aucune interface dans ton code. Et je n'ai pas vu ni Agrégation ni Composition donc ton schéma a rapidement pu être dessiné. Comment trouves-tu ce schéma ? Est-ce qu'il te parais logique ? Bon j'ai pas très envie de démanteler tout ton travail donc on va rester la dessus, je te proposerai un code différent par la suite en fonction de mon temps (C# ou Java, pas encore décidé).
Je vais te montrer un travail que j'ai réalisé puis on va réfléchir à mettre en place la suite de ton projet.
Ici un projet java que j'ai écris pour réaliser des carrés magiques ( je te le montre car j'ai inséré le schéma à même le code) : http://www.coyotus.com/viewtopic.php?id=1061
(Je pense que ce code n'est même par ailleurs plus a jour, le plus récent est sur mon CodeVault, il y avait un mini bug avec la taille de la fenêtre en GUI que j'avais corrigé par la suite)
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 14 août 2015 à 23:32:02
Je n'arrive pas à en piger l'utilité ?

Le point fort de ce petit logiciel c'est qu'il génère des charset pour crunch.

A quoi ça sert ?

Avec cette méthode on peut calculer toutes les combinaisons possibles sans répétitions pour faire d'autre combinaison avec crunch. Et pour les répétions pas d'inquiétude crunch sans chargera comme d'habitude.


Les charsets de bases de crunch n'ont pas de répétitions. Je n'ai pas téléchargé le zip, le C# c'est pas mon truc, mais peux tu me donner en exemple un extrait de ton fichier charset_2.lst ?
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 14 août 2015 à 23:48:56
Ben ca sert a filtrer les mots avec plus de 2 caractères identiques qui se suivent. aaab sera filtré, abab sera conservé.

@Teeknofil, tu me corriges si c'est pas tout à fait exact.
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 14 août 2015 à 23:53:16
Dans ce cas là, c'est en sortie de crunch qu'il faudrait l'utiliser, crunch | filtrage, non ?

y'a l'option -d dans crunch pour limiter les répétitions en sortie.

Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 15 août 2015 à 14:50:48
@Teeknofil: J'ai repensé à ton programme et à une manière de le reconstruire de mon coté et pour le moment j'ai pensé à quelque chose comme ca:
(http://pix.toile-libre.org/upload/img/1439655806.png) (http://pix.toile-libre.org/?img=1439655806.png)
Qu'en penses-tu ?
J'ai hésité pour Charset à en faire une énumération ou une interface, j'ai plutot opté pour l'énumération qui sera grandement utile avec des swich, reste à mettre ca en place.
Bon maintenant, je ne suis pas analyste donc je me doute qu'il y a moyen de le penser mieux.

PS: J'ai pas mentionné tes caractères suédois dedans car sinon tant qu'à faire, on pourrait aussi utiliser le cyrillique, le grec, les symboles arabes voir mandarins, ...

Edit: Correction au niveau du schema: les 'y' dans 'Algorithm' et le pattern Decorator mal schématisé (un enum ne peut avoir d'héritier).

Bien à toi,
WarLocG.

Edit2: Dis, je vais peut-être t'envoyer la suite par message privé si tu es d'accord pour éviter de trop spammer le fil.

Edit3: Pour le moment, toute la partie Charset et son decorator, ainsi Parameter c'est testé et ok:
Citer
warlocg@linux:~/Desktop/Sources/Java$ java main --help -f -r --file blabla -x -h
0 éléments vont être rajoutés, 26 sont filtrés.
[ a b c d e f g h i j k l m n o p q r s t u v w x y z ] -> 26 caractères
10 éléments vont être rajoutés, 0 sont filtrés.
[ a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ] -> 36 caractères
Is 'a' in ALPHA_L ? true
Is 'D' in ALPHA_L ? false
commande HELP détecté
hello!
commande FILE détecté
FILE: [FAIL]
commande RANDOM détecté
commande FILE détecté
FILE: [OK] - blabla matches ? [YES]
commande HELP détecté
hello!
Je vais attaquer la partie interne..
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 16 août 2015 à 08:43:14
WarLocG je  repasse tout à l'heur pour mettre au code, la je me suis fais chier toutes le nuit avec la 2.0 et faut je que je dorme.

Je n'arrive pas à en piger l'utilité ?

Le point fort de ce petit logiciel c'est qu'il génère des charset pour crunch.

A quoi ça sert ?

Fait le calcule de toutes les combinaisons avec  répétition avec le total 27 lettres ( https://fr.wikipedia.org/wiki/Combinaison_avec_r%C3%A9p%C3%A9tition (https://fr.wikipedia.org/wiki/Combinaison_avec_r%C3%A9p%C3%A9tition voir Wikipédia)).
Maintenant refait le calcule de toutes les combinaison avec répétition possible avec avec seulement 10 lettre comme abcdefghig.

Si tes calcul sont bon (merci de les publié) tu gagne un grand temps de calcul dans le brute force avec seulement 10 lettre. L’inconvénient c'est qu'il te manque des lettre à testé (charset) mais c'est pas grave car tout les mot de passe n'utilise pas les 27 lettre dans la paraphrase. Mais comme il tu peux pas calculer toutes combinaison de lettre (unique) pour crunch notre logiciel viens  à ton secours.  C'est juste une méthode de calcule de brute force  plus intelligente baser sur le masque des mots de passe. Attention ne pas ce fier au chiffre donner par crunch car il sont buguer, faut tout calculer à la main.
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 16 août 2015 à 09:10:26
Décidément, tu n'aimes pas crunch, complètement buguer d'après toi !

Pour avoir une sortie sans aucune répétition il faut utiliser l'argument -d 1

Dans la pratique, que ce soit pour la langue française ou l'usage commun des utilisateurs dans le choix de mot passe, une répétition au moins égale à 2 est à privilégier.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 16 août 2015 à 13:32:45
Citer
WarLocG je  repasse tout à l'heur pour mettre au code, la je me suis fais chier toutes le nuit avec la 2.0 et faut je que je dorme.
A ton aise, on a aucune deadline à respecter :) Reposes toi :)
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 16 août 2015 à 16:48:59
Nouveau sur le forum et découvrant votre communauté, lorsque je vois sur le site web en tant qu'article récent un lien vers ce fil avec ceci comme descritpion
Citer
Crisis Wordlist Generator est un nouveau générateur de dictionnaire, développé par un membre de la communauté kali-linux.fr, permettant de palier aux manquements de l’outil Crunch, en effet, ce dernier à la fâcheuse tendance de générer de nombreux mots ayant fort peu de chance d’être utilisés.
Et que je lis teeknofil déclarant que crunch est "bugué" et que je ne comprend rien à la présentation de son outil, ça me fout un peu les nerfs.

Sur ma machine weezy je constate dans les sources de crunch que la version 1.0 date de 2004 et que la version actuelle est la 3.6, que c'est bien une licence GPL, que le source en C est plus que simple (monofichier de 3000 lignes)  la moindre des choses à faire, en cas de bug c'est de remonter l'info au développeur. Y'a un bug ? Y'a une amélioration nécessaire sur de nombreux mots ayant fort peu de chance d’être utilisés.   ?
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 16 août 2015 à 20:31:33
Je n'ai pas dit crunch été bogué, ne me fait dire ce que je n'ai pas dit, j'ai juste dit que les valeurs annoncées sur le nombre de lignes ou la taille totale des fichiers étaient fausses, et ça personne ne peut rien faire pour ça car avec des nombres gigantesques mêmes l'ordinateur le plus puissant ne peut plus suivre avec des grands nombres (même les 64 bits). On en rien foutre du nombre de répétitions, ce n'est pas le but. C'est le calcul de combinaison pertinente qui est important.

Citer
Fait le calcule de toutes les combinaisons avec  répétition avec le total 27 lettres ( https://fr.wikipedia.org/wiki/Combinaison_avec_r%C3%A9p%C3%A9tition).
Maintenant refait le calcule de toutes les combinaison avec répétition possible avec  seulement 10 lettre comme abcdefghig.

Si tes calcul sont bon (merci de les publié) tu gagne un grand temps de calcul dans le brute force avec seulement 10 lettre. L’inconvénient c'est qu'il te manque des lettre à testé (charset) mais c'est pas grave car tout les mot de passe n'utilise pas les 27 lettre dans la paraphrase. Mais comme il tu peux pas calculer toutes combinaison de lettre (unique) pour crunch notre logiciel viens  à ton secours.  C'est juste une méthode de calcule de brute force  plus intelligente baser sur le masque des mots de passe. Attention ne pas ce fier au chiffre[ donner par crunch car il sont buguer, faut tout calculer à la main.

Si j'aimais pas crunch je lui aurai pas fait un plugin pour le rendre plus performant. J'ai fait des tonnes de test sur crunch pendant des années, ce qui par ton cas. Test avec les fonctions cachées et les plus avancées et tu comprendras. Et le point fort de crisis ce n'est pas les charset mais la génération aléatoire de chaîne de caractères. En plus il est clair que tu n'as pas fait le calcul des combinaison que je t'ai suggéré pour comprendre, car les nombres de combinaisons parlent de même. Et on sans tape des répétitions.
Titre: Re : Re : Crisis Wordlist Generator
Posté par: trude le 16 août 2015 à 21:19:10
Si j'aimais pas crunch je lui aurai pas fait un plugin pour le rendre plus performant.
Reste encore à expliquer comment et en quoi tu le rends plus performant !

Et le point fort de crisis ce n'est pas les charset mais la génération aléatoire de chaîne de caractères.

Crisis fait ce que crunch ne fait pas. Le point fort de ce petit logiciel c'est qu'il génère des charset pour crunch.
Crunch fait des listes de mots par incrémentation pour faire tous les possiblement par composition répéter.
L’inconvénient de cette méthode c'est que cela génère beaucoup de combinaison invraisemblable comme :

aaaa
aaab
aaac

Mon logiciel au contraire permet de générer de mot sans répétition comme par exemple

abcd
abce
abcf
Et on sans tape des répétitions.

Va comprendre !

EDIT PS: surtout que crunch gère très bien la limitation des répétitions avec l'argument -d, que cela ne diminue pas tant que ça le nombre de combinaisons et que ce ne sont pas forcément des combinaisons "invraisemblables"
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 17 août 2015 à 01:37:06
Citer
trude
La merde, tu n'as fait aucun calcul, tu n'as lu aucun code source, tu n'as pas testé le logiciel. Si c'était moi je t'aurais ban. Tu connais pas différence entre des combinaisons sans répétition, des combinaisons avec répétition, l'incrémentation des caractères fait par crunch, et une génération aléatoire de caractères. Si tu connais rien à tout ça ce n'est pas la peine de polluer le forum. Tu as qu'à ouvrir un forum dans la section tutorielle nommée technique de brute force par ingénierie des combinaisons. Prendrai le temps de te faire un cours particulier. Mais si c'est pour dénigrais casse toi. D'habitude et on peut te le confirme, c'est moi le plus cool avec les pires du forum, mais toi tu ne comprends rien.
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 17 août 2015 à 02:37:03
Citer
Bon j'ai analysé ton code, et schématiquement ca ressemble a peu près a ca:
Code: [Sélectionner]
                      Charset
                        /\
                       /__\
                         |
                    Combination
                        /\
                       /__\
                         |
                      Generate
                        /\
                       /__\
                         |
                    MainConsole
                        /\
                       /__\
                         |
                     Program

C'est presque ça a la différence que program est une agrégation, j'ai fait ça pour faire comme les winform car je voulais faire de l'objet comme il était impossible de faire un tel programme en procédural.

Citer
@Teeknofil: J'ai repensé à ton programme et à une manière de le reconstruire de mon coté et pour le moment j'ai pensé à quelque chose comme ca:

Qu'en penses-tu ?
J'ai hésité pour Charset à en faire une énumération ou une interface, j'ai plutôt opté pour l'énumération qui sera grandement utile avec des swich, reste à mettre ca en place.
Bon maintenant, je ne suis pas analyste donc je me doute qu'il y a moyen de le penser mieux.

Je pense que c'est compliqué et je suis loin d'être concepteur logiciel. J'ai vu que tu avais mi des classe abstraite, je connais rien au java mais je sais pas si tu le sais mais en C# les classe abstraite ne peuvent pas être implémenté. Du coup je sais pas ou je doit écrire le corp des méthode.

Comme je sais pas comment modifier les Class je vais faire les modifications que j'avais prévues c'est-à-dire modifié les méthodes de la classe charset pour remplacer les chiffres avec par exemple hex lower avec des switchs pour les ligne de commande. Le problème c'est qu'on n'a pas le même code source. Je vais upload la branch expérimentale du programme sur git hub. Si tu pouvais en faire un fork sur git hub se serait mieux pour avancé. Si tu n'as pas de compte ta qu'à en faire un bidon avec un mail avec lequel t'en a rien à ... Moi c'est que j'ai faits et pas de soucis. Ne t'inquiète pas si le code est faux, je débuguerai.

https://www.youtube.com/watch?v=La3SaI2hjzE (https://www.youtube.com/watch?v=La3SaI2hjzE)

Citer
PS: J'ai pas mentionné tes caractères suédois dedans car sinon tant qu'à faire, on pourrait aussi utiliser le cyrillique, le grec, les symboles arabes voir mandarins, ...

Ta tous compris, WarLocG ,c'est à ça à quoi sert la class charset et c'est pour ça que logiciel est en Anglais. J’avais même prévu de le mettent du russe, du chinois et la syllabe française.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 17 août 2015 à 06:59:35
Salut Teeknofil,

Citer
J'ai vu que tu avais mi des classe abstraite, je connais rien au java mais je sais pas si tu le sais mais en C# les classe abstraite ne peuvent pas être implémenté. Du coup je sais pas ou je doit écrire le corp des méthode.
Regarde ici : http://www.codeproject.com/Articles/6118/All-about-abstract-classes

Les classes abstraites ne peuvent être instanciées, tu peux pas faire un new dessus, par contre tu peux instancier ses héritiers. Je prend un exemple simple:
Tu veux dessiner une 'forme géométrique'. Tu ne peux pas car c'est un concept, un ensemble. Par contre tu peux dessiner un 'carré', un 'triangle', un 'cercle', ... qui sont également des 'forme géométrique'.

Donc avec cet exemple vois:
En java:
abstract class FormeGeo{
  abstract double perimetre(); // pas de corps
  abstract double surface(); // pas de corps
}

class Carre extends FormeGeo{
  private double cote;

  public Carre(double cote){this.cote = cote;}

  @Override
  public double perimetre(){return cote*4;}
  @Override
  public double surface(){return cote*cote;}
}
Et en C# (d'après le lien):
abstract class FormeGeo{
  public abstract double perimetre(); // pas de corps
  public abstract double surface(); // pas de corps
}

class Carre : FormeGeo{
  private double cote;

  public Carre(double _cote){cote = _cote;}

  public override double perimetre(){return cote*4;}
  public override double surface(){return cote*cote;}
}
C'est pratiquement le même code :)

J'utilise une classe abstraite pour 'Algorithm' car je n'instancie pas un 'Algorithm' directement, j'instancie un 'Combinaison' ou un 'RandomSet'. Et la Factory va permettre de return un Combinaison ou un RandomSet ou autre en fonction des parametres.

Citer
C'est presque ça a la différence que program est une agrégation, j'ai fait ça pour faire comme les winform car je voulais faire de l'objet comme il était impossible de faire un tel programme en procédural.
namespace Crisis_Wordlist_Generator
{
    class Program
    {
        static void Main(string[] args)
        {
            MainConsole run = new MainConsole(); // <- agregation
            run.Navigation();

        }
    }
}
Juste :) Toutes mes excuses, j'ai été un peu rapide :)

Au fait, je cherche pas a te concurrencer hein ;) Mon code vient pour t aider en cherchant une approche différente au niveau de la conception, je jeterai encore un oeil a ton code pour voir si certaines parties peuvent être optimisées davantage :)

Bien à toi,
WarLocG.
Titre: Re : Re : Crisis Wordlist Generator
Posté par: trude le 17 août 2015 à 08:35:22
Citer
trude
La merde, tu n'as fait aucun calcul, tu n'as lu aucun code source, tu n'as pas testé le logiciel. Si c'était moi je t'aurais ban. Tu connais pas différence entre des combinaisons sans répétition, des combinaisons avec répétition, l'incrémentation des caractères fait par crunch, et une génération aléatoire de caractères. Si tu connais rien à tout ça ce n'est pas la peine de polluer le forum. Tu as qu'à ouvrir un forum dans la section tutorielle nommée technique de brute force par ingénierie des combinaisons. Prendrai le temps de te faire un cours particulier. Mais si c'est pour dénigrais casse toi. D'habitude et on peut te le confirme, c'est moi le plus cool avec les pires du forum, mais toi tu ne comprends rien.
On se calme, j'ai peut être été un peu "force brute" dans ma façon de juger tes explications de présentation de Crisis, mais je suis sincère lorsque je te dis ne pas te comprendre.
Pour ce qui est de mes compétences/connaissances informatique, j'ai démarré avec Unix sur des ATT3B, il y a quelques années !

L'Open Source c'est aussi accepter (et même demander) la critique de ses pairs.
Titre: Re : Re : Crisis Wordlist Generator
Posté par: trude le 17 août 2015 à 14:48:14
@Teeknofil:
Dis, je vais peut-être t'envoyer la suite par message privé si tu es d'accord pour éviter de trop spammer le fil.
Au contraire, je soutiens à 200% ton incitation à passer de C# à Java pour tout ceux qui utilisent Kali-linux !

Et suis surpris qu'il n'y est aucune discussion java dans le forum aide au développement.
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 17 août 2015 à 15:13:16
@trude:
Merci pour le soutiens :)

Bha on est sur un forum qui est dédié à kali pas a la programmation, bien qu'il y'ait 2-3 sections pour parler projets et dev :) Sinon j'ai écris 2-3 tutos sur java sur coyotus.com mais comme j'étais quasiment le seul à poster dans cette section j'ai un peu laché l'affaire avec le temps et refait d'autres tutos sur mon wiki :) Et puis généralement, les membres préfèrent le python, qui est plus rapide et facile a apprendre.
Si java t'interresses tu peux voir par la : http://www.coyotus.com/viewforum.php?id=18 et http://labo.azgarech.org:8080/WarLocG/CodeVault/wikis/Java

PS: labo.azgarech peut parfois être down, le serveur est tenu par un membre sur coyotus.com et ami. Si tu passes par le forum de coyotus, le lien se trouve dans ma signature de toute facon.

Bien à toi :)
Titre: Re : Re : Crisis Wordlist Generator
Posté par: trude le 17 août 2015 à 15:52:39
Bha on est sur un forum qui est dédié à kali pas a la programmation, bien qu'il y'ait 2-3 sections pour parler projets et dev :)
Distribution Linux orientée test de sécurité, pour moi cela implique de maitriser le développement.
Je ne connaissait que de nom metasploit, de voir que Armitage est écrit en Java ça m'incite à aller voir !

Et puis généralement, les membres préfèrent le python, qui est plus rapide et facile a apprendre.
Ah, le critère de la facilité !
Les langages sans typage statique, j'ai du mal, formé au langage C depuis trop longtemps  ;)
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 18 août 2015 à 09:19:19
Salut Teeknofil,

Juste pour être sur de prendre le bon algorithme, c'est bien les combinaison (Cpn) que tu utilises et pas l'arrangement (Apn)?
double numberCombinationNoRepeat = factorial(charset.Count - 1) / factorial(NumberOfChar - 1) * factorial((charset.Count - 1) - (NumberOfChar - 1));Oui c'est bien ca.

Dans l'algo, je retrouve donc: p étant le nombre de caractères dans le charset (ex: alphal = 26) et n c'est la taille passée par le paramètre -l (longueur de la chaine) ?

http://www.probas.fr/Combinatoire.html
Je vais toujours mettre les trois fonctions factoriel, combinaison et arragement dans une classe MathProba car ca peut servir autre part.

Ah oui, tu peux m'expliquer ce morceau ?
    if (resultCombinationNoRepeats.Count == 25100000)
                    {
                        return resultCombinationNoRepeats;                         
                    }
Il sort de où ce 25 100 000 ?
Sinon pour moi, tu aurais pu le mettre directement la dedans:
while (i < numberCombinationNoRepeat)pourrait devenir
for (i=0; (i < numberCombinationNoRepeat) && (i < 25100000); i++)et hop, tu te débarasses de ton if comme ca (ainsi que le i++ en fin du while). Puis tape ca dans une constante si c'est pas un nombre calculé, c'est plus clair à la lecture.
const int LIMIT = 25100000;
...
for (i=0; (i < numberCombinationNoRepeat) && (i < LIMIT); i++)

Tant qu'on est dans les optimisations:

                    while (h < array.Length)
                    {
                        if (j > 0 && j < array.Length)
                        {
                            array[j] = array[j - 1] + 1;
                        }

                        s = s + charset[array[h]];
                        h++;
                        j++;                       

                    }
devient
                   for(h=0; h < array.Length;h++)
                    { // j modifié au prochain passage dans le while
                        if (j > 0 && j < array.Length)
                        {
                            array[j] = array[j - 1] + 1;
                        }

                        s += charset[array[h]];
                        j++;
                    }

                    resultCombinationNoRepeats.Add(s);
                    h = 0;
                    j = 0;


                    while (j < array.Length && array[j] != j + k)
                    {
                        j++;
                    }
pourrait se changer en
                    resultCombinationNoRepeats.Add(s);

                    for (h=0, j=0;(j < array.Length) && (array[j] != (j + k)); j++){}

            if (charset.Count < NumberOfChar)
            {
                return charset;
            }
            else if (NumberOfChar == 1)
            {
                return charset;
            }
Le meme return, fusionne les :)
            if ((charset.Count < NumberOfChar) || (NumberOfChar == 1))
            {
                return charset;
            }

Finalement, j'ai du mal a comprendre ta variable array et son utilité
int[] array = new int[NumberOfChar - 1];de plus les array.Length peuvent a première vue être remplacé par NumberOfChar -1. Des commentaires dans le code aiderait à comprendre ce que tu veux faire.

Edit: ah oui, c'est quoi k ?
public List<String> CombinationCharset(List<String> charset, int NumberOfChar, int k)while (j < array.Length && array[j] != j + k)J'ai compris d'ou vient ce k => dans Generate :
var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);Ok mais ca sert un peu a rien de faire ca comme ca, tu as déjà passé CharsetSelecting et NumberOfChar, du coup k aurait pu se calculer de l'autre coté, directement dans Combination

Pendant que je passe par la classe Generate, regarde:
...
            if (SaveFile == '1')
            {
                var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);
                setting_UpFile();
...
et
...
            else
            {
                var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);

                if (TypesOfGeneration == '1')
...
dans les deux cas, tu passe a generate CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);
tu pouvais le faire une seule fois juste avant
           if (SaveFile == '1')

Bien à toi.
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 18 août 2015 à 09:47:48
Dans son fichier Combanation.cs c'est des combinaisons sans ordre et sans répétitions : n! / p!(n-p)!

Mais son expression est mal parenthésée, il calcule (n!/p!)(n-p)!
Et il prend n-1 et p-1

En prenant l'alphabet minuscule (choix 5) et un charset de 5 cela donne

Pour n=25 et p=4 il lance une boucle (while i < 3.3E+43) au lieu de 12650 (avec un return codé plus bas en dur au bout de 25100000 itérations)

PS: je te rappelle encore que générer des millions de charsets pour crunch n'a aucun sens
Titre: Re : Crisis Wordlist Generator
Posté par: WarLocG le 18 août 2015 à 09:58:34
Mais son expression est mal parenthésée, il calcule (n!/p!)(n-p)! oui manque des parenthèses en effet:
double numberCombinationNoRepeat = factorial(charset.Count - 1) /  ( factorial(NumberOfChar - 1) * factorial((charset.Count - 1) - (NumberOfChar - 1)) ) ;
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 18 août 2015 à 10:15:57
On se croise en modifiant/complétant en même temps nos posts sur les mêmes points.

Je pense que le problème de parenthèses est à l'origine du hack de return codé en dur dans la boucle, c'est long une boucle de 3E+43  ;)

@admin
je pense que mettre un article sur la page d'accueil de www.kali-linux.fr dont le texte est

"Crisis Wordlist Generator est un nouveau générateur de dictionnaire, développé par un membre de la communauté kali-linux.fr, permettant de palier aux manquements de l’outil Crunch, en effet, ce dernier à la fâcheuse tendance de générer de nombreux mots ayant fort peu de chance d’être utilisés."

sans vérification c'est pas génial !
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 20 août 2015 à 10:22:14
Juste un peitit message pour dire que j'ai mis à jour le code source.
Je vous renvoie au commit => https://github.com/teeknofil/Crisis-Wordlist-Generator/commit/af0a7a13d511ee4617a0ab27ec21115c3766f17a

J'ai pas le temps de réponde au précédant message et je repasserai plus tard.
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 29 août 2015 à 21:23:40
Bonjour,
C'est bon après des galère avec kali plusieur semaine de fou je prend le temps de répondre, dsl pour le retard.

Citer
Mon code vient pour t aider en cherchant une approche différente au niveau de la conception, je jeterai encore un oeil a ton code pour voir si certaines parties peuvent être optimisées davantage

Je obtimiser le code en tranformant la classe charset.cs en class static comme charset.cs contient maintenant que des information qui doive être unique inutile de devoir l'instancier avec un nouvelle objet. Ton shéma ulm est bien mais un peu rude a mettre en place.

TRUDE

Citer
On se calme, j'ai peut être été un peu "force brute" dans ma façon de juger tes explications de présentation de Crisis, mais je suis sincère lorsque je te dis ne pas te comprendre.

Je vais t'expliqué l'utilité des charset avec un exemple simple.
Tape la commande
 crunch 3 3 0123456789 -d 1%Cela va te générer mille ligne avec dix caractère.

Maintenant tape la commande ci-dessous et imagine que la suite de caractère 012 soit générer par crisis
crunch 3 3 012 -d 1%Cela va te générer que 27 lignes. Comme tu peu le voir cela générer des répétition mais tu as qu'un fichier de seulement de 27 lignes, donc moins gros que si tu utiliser les dix caractère. Le problème c'est que comme tu utilise  pas tous les caractère et il te manque des combinaison possible pour crunch. Mais grâce à crisis tu peux tous les calculés.

Si tu génère un charset avec crisis avec 3 chiffre tu aura 36 lignes. 27 lignes unique générer par crunch multiplier par 36 charset de crisis cela fait 972 combinaison possible (37*27 = 972).  Donc finalement tu à générer moins de combinaison inutile. Imaginer maintenant que les chiffre soit une suite de 20 lettre, c'est plutot cool de supprimer les combinaison à la con.

 
Citer
Ah oui, tu peux m'expliquer ce morceau ?
Code: [Sélectionner]
    if (resultCombinationNoRepeats.Count == 25100000)
                    {
                        return resultCombinationNoRepeats;                         
                    }
C'était pour fixé le bug de la factoriel, dans l'urgence j'ai trouver que ça pour pas exploser la mémoire.

Citer
Tant qu'on est dans les optimisations:

Code: [Sélectionner]
                    while (h < array.Length)
                    {
                        if (j > 0 && j < array.Length)
                        {
                            array[j] = array[j - 1] + 1;
                        }

                        s = s + charset[array[h]];
                        h++;
                        j++;                       

                    }
devient
Tant qu'on est dans les optimisations:

Code: [Sélectionner]
                    while (h < array.Length)
                    {
                        if (j > 0 && j < array.Length)
                        {
                            array[j] = array[j - 1] + 1;
                        }

                        s = s + charset[array[h]];
                        h++;
                        j++;                       

                    }
devient
Code: [Sélectionner]
                   for(h=0; h < array.Length;h++)
                    { // j modifié au prochain passage dans le while
                        if (j > 0 && j < array.Length)
                        {
                            array[j] = array[j - 1] + 1;
                        }

                        s += charset[array[h]];
                        j++;
                    }


Je l'ai modifié, ça fais que j'y penser mais a chaque fois j'oublier, en réalité cette algorithme est pas de moi, je l'ai trouver sur un forum par hasard et ce qui ma donner l'idée du logiciel. Le truc pourrie avec l’algorithme que j'ai trouver c'est qu'il était coder qu'avec des lettre donc difficilement compréhensible.

       
Citer
   if (charset.Count < NumberOfChar)
            {
                return charset;
            }
            else if (NumberOfChar == 1)
            {
                return charset;
            }
ça aussi c'est fait et ect.

Citer
J'ai compris d'ou vient ce k => dans Generate :
Code: [Sélectionner]
var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);
Ok mais ca sert un peu a rien de faire ca comme ca, tu as déjà passé CharsetSelecting et NumberOfChar, du coup k aurait pu se calculer de l'autre coté, directement dans Combination

C'est le gros point faible de l'algorithme, il calcul toute les combinaison avant de les imprimer ce qui est plus lent. J'aimerai les imprimer au fur et à mesure pour vidé la mémoire et aller plus vite mais j'ai pas trouver comment faire. Peut t'être une méthode void.


Citer
Pendant que je passe par la classe Generate, regarde:
Code: [Sélectionner]
...
            if (SaveFile == '1')
            {
                var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);
                setting_UpFile();
...
et
Code: [Sélectionner]
...
            else
            {
                var generate = CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);

                if (TypesOfGeneration == '1')
...
dans les deux cas, tu passe a generate CombinationCharset(CharsetSelecting, NumberOfChar, CharsetSelecting.Count - NumberOfChar);
tu pouvais le faire une seule fois juste avant
Code: [Sélectionner]
           if (SaveFile == '1')

Je pense que j'e l'ai fixé mais j'ai fais ça car rien s'afficher à l'écran à cause de l'algorithme qui mettait trop de temps à faire le calcul.

Citer
Mais son expression est mal parenthésée, il calcule (n!/p!)(n-p)!
Et il prend n-1 et p-1

Merci je cherchais ce bug comme un fous :'( :D
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 29 août 2015 à 22:15:55
Crunch va te générer mille lignes
Si tu génère un charset avec crisis avec 3 chiffre tu aura 36 lignes. 27 lignes unique générer par crunch multiplier par 36 charset de crisis cela fait 972 combinaison possible (36*27 = 972).  Donc finalement tu à générer moins de combinaison inutile. Imaginer maintenant que les chiffre soit une suite de 20 lettre, c'est plutot cool de supprimer les combinaison à la con.


crunch 3 3 0123456789 -d 1% ne va générer que 810 lignes

Et le -d 1 supprime les répétitions de caractères qui se suivent mais laisse des combinaisons genre 010.

Le nombre d'arrangements de 3 sur 10 (sans aucunes répétitions) est de 720 lignes
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 29 août 2015 à 22:41:47
Bas écoute j'ai fait le calcul avec mon terminal donc moi maintenant je suis chanbouller, ta compris mon idée ?
crunch 3 3 0123456789 -d 1%
Crunch will now generate the following amount of data: 4000 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following [b]number of lines: 1000 [/b]
^CCrunch ending at
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 29 août 2015 à 22:49:16
crunch 3 3 012 -d 1%
Crunch will now generate the following amount of data: 108 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 27
010
012
020
021
101
102
120
121
201
202
210
212
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 29 août 2015 à 22:51:03
crunch 3 3 0123456789 -d 1% | wc -l
810

PS EDIT
crunch 3 3 012 -d 1% | wc -l
12

En fait si tu mets l'option -d 1 (sans le %) il calcul bien son estimation de 810 ou 12, si tu mets -d 1% il n'en tient pas compte dans son estimation.

De toute facon les arrangements sans répétitions :
de 3 sur 10 = 720
de 3 sur 3 = 6
Titre: Re : Crisis Wordlist Generator
Posté par: Teeknofil le 29 août 2015 à 22:54:49
Cette commande génére que 12 ligne en effet.

crunch 3 3 012 -d 1%
Crunch will now generate the following amount of data: 108 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 27
010
012
020
021
101
102
120
121
201
202
210
212

12 * 36 = 432

Quand je te disais que les chiffre dans crunch était buguer, tu vois bien que j'invente rien
Titre: Re : Crisis Wordlist Generator
Posté par: trude le 29 août 2015 à 23:01:38
crunch 3 3 0123456789 -d 1
Crunch will now generate the following amount of data: 3240 bytes
Crunch will now generate the following number of lines: 810

crunch 3 3 012 -d 1
Crunch will now generate the following amount of data: 48 bytes
Crunch will now generate the following number of lines: 12


Si tu mets un filtre de type de caractères (%) sur le critère de répétition il n'en tient pas compte dans son estimation

12 * 36 = 432
Pour moi ce 432 n'a aucune signification ! Donne nous la liste de ces 432 lignes, il en manque par rapport aux 720 arrangements possibles !
Titre: Re : Crisis Wordlist Generator
Posté par: cedrique30 le 06 mai 2018 à 16:32:23
Bonjour.
Comment faire pour que la liste générée ne comprenne que les codes sans être précédés des numéros de chaque lignes?
Car je ne sais pas comment faire pour supprimer ces numéros sur des milliers de lignes :-/
Merci.