Bonsoir,
En plaçant en ligne le code source de mon générateur de dictionnaires ( servant en particulier pour le crack de clefs WPA ) en ligne sur le forum ( ) j'ai promis de convertir ce code en C afin de permettre une génération plus rapide.
C'est chose faîtes.
Ce code en C n'a pas toute les fonctionnalités du code python (manque de temps de ma part) je suis toutefois à l'écoute de toute amélioration et bug.
iSanzo est un ami à moi qui a codé le logo de notre Dev Team.
Ce code permet sur un intel dualcore de générer un fichier de environ 1Go en une minute.
Prenez donc garde de ne pas laisser générer pendant une heure ou alors prévoyez un espace suffisant :-).
Ceci dit voici le code:
Vous remarquerez peut-être que j'ai multiplié le nombre de boucle de génération.
J'ai fais cela pour diminuer au maximum le nombre de conditions effectuées dans la boucle de génération et donc d'optimiser le programme.
Voilà j'espère que ce code vous aidera :-p.
Je vais de ce pas le proposer dans le sujet concernant le crack de clés WPA.
Bonne soirée à vous.
En plaçant en ligne le code source de mon générateur de dictionnaires ( servant en particulier pour le crack de clefs WPA ) en ligne sur le forum ( ) j'ai promis de convertir ce code en C afin de permettre une génération plus rapide.
C'est chose faîtes.
Ce code en C n'a pas toute les fonctionnalités du code python (manque de temps de ma part) je suis toutefois à l'écoute de toute amélioration et bug.
iSanzo est un ami à moi qui a codé le logo de notre Dev Team.
Ce code permet sur un intel dualcore de générer un fichier de environ 1Go en une minute.
Prenez donc garde de ne pas laisser générer pendant une heure ou alors prévoyez un espace suffisant :-).
Ceci dit voici le code:
Code:
/* Auteurs:iSanzo Anonyme77 Date: 19/11/2012 Version: 1.2 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define TRUE 1 #define FALSE 0 #define MMAX 3 #define FICHIER 51 #define CLEFS 51 #define MAXIMUM 50 /*<=== Prototypes ===>*/ void chiffres(); void aleatoire(); void mots(); void file(char *fich); void bornes(int *min,int *max); void bornes_max(int *min,int *max,int maximum); void logo(); /*<=== Main ===>*/ int main() { /*Declarations*/ char reco; int menu; /*Initialisation*/ reco='o'; do { /*Menu*/ logo(); menu=0; printf("\n\n\t\tGenerateur de dictionnaire\n"); printf("\t\t--------------------------\n\n"); printf("\t1.Generer des chiffres\n"); printf("\t2.Generer des clefs aleatoires\n"); printf("\t3.Generer des mots aleatoires\n"); do { printf("\n\tVotre choix: ");fflush(stdin);scanf("%d",&menu); }while(menu<1||menu>MMAX); /*Gestion des cas*/ switch (menu) { case 1: chiffres(); break; case 2: aleatoire(); break; case 3: mots(); break; } /*Gestion de la répétition du programme*/ do { printf("\tRecommencer (o-n) ?");fflush(stdin);scanf("%c",&reco); }while(reco!='n' && reco!='o'); printf("\n"); }while(reco=='o'); return 0; } /* <=== Fonctions ===>*/ void bornes(int *min,int *max) { printf("Borne inférieure: ");fflush(stdin); scanf("%d",min); do { printf("Borne superieure: ");fflush(stdin); scanf("%d",max); }while(*max<*min); } void bornes_max(int *min,int *max, int maximum) { do { printf("Borne inférieure: ");fflush(stdin); scanf("%d",min); printf("Borne superieure: ");fflush(stdin); scanf("%d",max); }while(*max<*min||*max>maximum||*min>maximum); } void file(char fich[]) { printf("Entrez le nom de votre fichier: "); fflush(stdin); scanf("%s",fich); } void mots() { /*Declarations*/ FILE* fichier=NULL; char min[]={'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'}; char maj[]={'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'}; char result[CLEFS]; char nom[FICHIER]; int longu,maxi,longueur,choix,i,lettre,minmaj,mini; /*Preparation de l'aleatoire*/ srand(time(NULL)); /*Saisie d'informations*/ printf("\n\tQuel taille de clef souhaitez-vous ?"); printf("\n\t\t1.Aleatoire"); printf("\n\t\t2.fixe"); do { printf("\n\tVotre choix: ");fflush(stdin);scanf("%d",&longu); }while(longu<1||longu>2); if(longu==1) { do { printf("\n\tBorne superieure (MAX 50): ");fflush(stdin);scanf("%d",&maxi); printf("\n\tBorne inférieure (MIN 1): ");fflush(stdin);scanf("%d",&mini); }while(maxi>50||maxi<mini||mini<1); } else { do { printf("\n\tLongueur (MAX 50): ");fflush(stdin);scanf("%d",&longueur); }while(longueur>50||longueur<1); } printf("\n\tQuel type de lettre souhaitez-vous ?"); printf("\n\t\t1.Aleatoire"); printf("\n\t\t2.Majuscule"); printf("\n\t\t3.Minuscules"); do { printf("\n\tVotre choix: ");fflush(stdin);scanf("%d",&choix); }while(choix<1||choix>3); /*Fichier*/ file(nom); fichier=fopen(nom,"w"); if(fichier!=NULL) { /*Message de prevention*/ printf("\n\tOperation en cours..."); printf("\n\tCTRL+C pour stopper ..."); /*Boucle principale*/ if(longu==1) { switch(choix) { case 1: while(TRUE) { longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { lettre=rand()%26; minmaj=rand()%2; if(minmaj==0)result[i]=maj[lettre]; else result[i]=min[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; case 2: while(TRUE) { longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { lettre=rand()%26; result[i]=maj[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; case 3: while(TRUE) { longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { lettre=rand()%26; result[i]=min[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; } } else { switch(choix) { case 1: while(TRUE) { for(i=0;i<=longueur-1;i++) { lettre=rand()%26; minmaj=rand()%2; if(minmaj==0)result[i]=maj[lettre]; else result[i]=min[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; case 2: while(TRUE) { for(i=0;i<=longueur-1;i++) { lettre=rand()%26; result[i]=maj[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; case 3: while(TRUE) { for(i=0;i<=longueur-1;i++) { lettre=rand()%26; result[i]=min[lettre]; } result[i]='\0'; fprintf(fichier,"%s\n",result); } break; } } } } void aleatoire() { /*Declarations*/ FILE* fichier=NULL; char min[]={'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'}; char maj[]={'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'}; char result[CLEFS]; char nom[FICHIER]; int longueur,i,typ,typ2,lettre,chiffre,longu,maxi,choix,mini; /*Preparation de l'aleatoire*/ srand(time(NULL)); /*Saisie d'informations*/ printf("\n\tQuel taille de clef souhaitez-vous ?"); printf("\n\t\t1.Aleatoire"); printf("\n\t\t2.fixe"); do { printf("\n\tVotre choix: ");fflush(stdin);scanf("%d",&longu); }while(longu<1||longu>2); if(longu==1) { do { printf("\n\tBorne superieure (MAX 50): ");fflush(stdin);scanf("%d",&maxi); printf("\n\tBorne inférieure (MIN 1): ");fflush(stdin);scanf("%d",&mini); }while(maxi>50||maxi<mini||mini<1); } else { do { printf("\n\tLongueur (MAX 50): ");fflush(stdin);scanf("%d",&longueur); }while(longueur>50||longueur<1); } printf("\n\tQuel type de lettre souhaitez-vous ?"); printf("\n\t\t1.Aleatoire"); printf("\n\t\t2.Majuscule"); printf("\n\t\t3.Minuscules"); do { printf("\n\tVotre choix: ");fflush(stdin);scanf("%d",&choix); }while(choix<1||choix>3); if(choix==2)typ2=1; if(choix==3)typ2=0; /*Fichier*/ file(nom); fichier=fopen(nom,"w"); if(fichier!=NULL) { /*Message de prevention*/ printf("\n\tOperation en cours..."); printf("\n\tCTRL+C pour stopper ..."); /*Boucle principale*/ if(choix==1) { while(TRUE) { if(longu==1) longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { typ=rand()%2; if(typ==0) { typ2=rand()%2; lettre=rand()%26; if(typ2==0)result[i]=min[lettre]; else result[i]=maj[lettre]; } else { chiffre=rand()%10; result[i] = chiffre+48; } } result[i]='\0'; fprintf(fichier,"%s\n",result); } } else { if(typ2==0) { while(TRUE) { if(longu==1) longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { typ=rand()%2; if(typ==0) { lettre=rand()%26; result[i]=min[lettre]; } else { chiffre=rand()%10; result[i] = chiffre+48; } } result[i]='\0'; fprintf(fichier,"%s\n",result); } } else { while(TRUE) { if(longu==1) longueur = (rand() % (maxi - mini + 1)) + mini; for(i=0;i<=longueur-1;i++) { typ=rand()%2; if(typ==0) { lettre=rand()%26; result[i]=maj[lettre]; } else { chiffre=rand()%10; result[i] = chiffre+48; } } result[i]='\0'; fprintf(fichier,"%s\n",result); } } } fclose(fichier); } else printf("\n\tErreur sur le nom de fichier"); } void chiffres() { /*Initialisations*/ FILE* fichier=NULL; int choix1; long int sup,inf; double i; char nom[FICHIER]; /*Recolte d'informations*/ printf("\n\n\tSouhaitez- vous une generation: \n"); printf("\t1. Illimitee \n"); printf("\t2. Limitee \n\n"); do { printf("\n\tVotre choix: ");scanf("%d",&choix1); }while(choix1<1 || choix1>2); if(choix1==2) { printf("\n\n\tEntrez la borne inferieure: "); scanf("%ld",&inf); printf("\n\n\tEntrez la borne superieure: "); scanf("%ld",&sup); } else { printf("\n\n\tEntrez la borne inferieure: "); scanf("%ld",&inf); } /*Creation du fichier*/ file(nom); fichier=fopen(nom,"w"); if(fichier==NULL)printf("\nErreur lors de la creation du fichier..."); else { printf("\n\tFichier cree avec succes...\n"); printf("\n\n\tGeneration en cours..."); printf("\n\tPour stopper faites la combinaison CTRL+C\n"); /*Generation*/ if(choix1==1) { for(i=inf;TRUE;i++)fprintf(fichier,"%.0lf\n",i); } else { for(i=inf;i<=sup;i++)fprintf(fichier,"%.0lf\n",i); } /*Fermeture du fichier*/ fclose(fichier); } } void logo() { printf("\t @@@ @@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@ @@@ \n"); printf("\t @@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@@ @@@ @@@ \n"); printf("\t @@! @@@ @@! @@! @@@ @@[email protected]! @@! @@@ \n"); printf("\t [email protected]! [email protected]! @[email protected] [email protected]! [email protected]! @[email protected] [email protected][email protected]! [email protected]! @[email protected] \n"); printf("\t [email protected] @[email protected] [email protected]! @!!!:! @[email protected] [email protected]! @!! @!! @[email protected] [email protected]! \n"); printf("\t !!! [email protected]! !!! !!!!!: [email protected]! !!! !!! [email protected]! [email protected]! !!! \n"); printf("\t !!: !!: !!! !!: :!: !!: :!!:!:!!: !!: !!! \n"); printf("\t :!: :!: !:! :!: ::!!:! !:::!!::: :!: !:! \n"); printf("\t :: :::: :: :: :::: :::: ::: ::::: :: \n"); printf("\t : :: : : : :: :: : ::: : : : \n"); printf("\t _____________________________________________________\n"); }
J'ai fais cela pour diminuer au maximum le nombre de conditions effectuées dans la boucle de génération et donc d'optimiser le programme.
Voilà j'espère que ce code vous aidera :-p.
Je vais de ce pas le proposer dans le sujet concernant le crack de clés WPA.
Bonne soirée à vous.
Commentaire