Partage
  • Partager sur Facebook
  • Partager sur Twitter

utilité brute force

légales bien sûr...

Sujet résolu
Anonyme
    17 décembre 2011 à 13:42:47

    Bonjour a tous,

    Il y a peu, j'ai créé un logiciel brute force que affiche toutes les combinaison possible avec tout les carractères possibles. Je voudrait aller plus loin en l'utilisant dans qqch, mais je ne sais pas quoi.
    Avez-vous uine idée d'utilisation de ce petit logiciel (légale bien evidemment ! :D )

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2011 à 13:52:02

      Bonjour,
      Je pense que ça serai pas mal si tu l'incluait dans un site web pour donner des idées de mots de passe pour des personnes qui n'arrivent pas trop à en trouver un assez "puissant".
      Je dis ça parce que parfois trouver un mot de passe lors d'une inscription est difficile. :p

      ce n'est qu'une idée mais je sais pas si c'est légal par contre. :o
      • Partager sur Facebook
      • Partager sur Twitter
        17 décembre 2011 à 14:07:19

        Citation : axeldu70


        j'ai créé un logiciel brute force que affiche toutes les combinaisons possibles avec tout les carractères possibles


        Bref t'as juste fait un logiciel qui affiche toutes les combinaisons d'un ensemble... inutile de sortir les grands mots "brute force".

        Après si tu veux en faire un logiciel de cassage de mot de passe, il faut que tu le fasse communiquer avec le programme ciblé. sous windows il peut y avoir des sendmessages pour envoyer la combinaisons a tester ( ex: http://forum.hardware.fr/hfr/Programma [...] _135538_1.htm ), y a aussi moyen de rediriger l'entrée sortie de programme avec les pipes.... a toi de choisir la méthode en fonction du programme ciblé!

        Tu peux essayer par exemple avec winrar/winzip, je crois qu'ils offre la possibilité de créer des archives sécurisée par mot de passe. Il te suffit d'en créer une et de tester ton prog dessus.
        Sinon tu peux créer toi même ton programme qui demande un mot de passe, et essayer de comprendre quels sont les mécanismes qui facilitent / rendent difficiles la méthode brute force....

        un simple:
        int main()
        {
           char mdp[16];
           do
           {
              fgets(mdp, 16, stdin);
           }while strcmp(mdp, "motdepasse" )!=0); 
           printf("mot de passe trouvé!\");
           // tu eux même y mettre une mesure du temps!
        }
        

        pourrait permettre de tester ...
        • Partager sur Facebook
        • Partager sur Twitter
        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        Anonyme
          17 décembre 2011 à 15:42:33

          slt, je n'ai pas trop compris comment communiquer le mot de passe a winzip, tu ne pourait pas m'expliquer un peu plus?
          Sinon, merci pour vos idées.
          Postez-en encore ! ;)
          • Partager sur Facebook
          • Partager sur Twitter
            17 décembre 2011 à 17:04:21

            Je n'expliquerais pas en détails car c'est assez long mais pour faire simple l'api windows fonctionne en envoyant / recevant des messages. Il "suffit" d'envoyer le message "touche A enfoncé" pour que le programme crois que l'utilisateur a appuyé sur la touche 'A'.
            Renseignes toi sur l'api windows ("prendre le controle d'autre programme" sur le forum)
            Sinon tu peux déjà faire un programme pour "casser" le mot de passe de mon exemple plus haut...
            • Partager sur Facebook
            • Partager sur Twitter
            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
            Anonyme
              17 décembre 2011 à 18:14:20

              Comme ça ?
              do
                  {
                      fgets(mdp, 3, stdin);
                      BruteForce(LgMin, LgMax);
                  }while(strcmp(mdp, "motdepasse" )!=0);
                  printf("mot de passe trouvé!\n%s", mdp);
              

              Le test est en cour...

              Voici ma fonction ForceBrute

              void BruteForce(int LongMin, int LongMax)
              {
               const char ALL[105] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz1234567890<>,?;.:/!§*µù%$£¤¨+=})]à@ç^\\_`è|-[({'#\"é~&";
               int Lg = LongMin - 1;
               int i, x, y;
              
               char* Buff = (char*) malloc(Lg); // Creer le Buff de Lg octet
               while(Lg != LongMax)
               {
                   realloc(Buff, Lg); // Augmente la taille du buff
                   int Nchar[Lg];
                   for(i=0; i<=Lg; i++)
                   {
                       Buff[i] = ALL[0]; // Remplie le Buff du premier char
                       Nchar[i] = 0; // Initialise le tableau de int a 0
                   }
                   while(Nchar[0] != 105)
                   {
                        for(x=0; x<=105; x++)
                        {
                                Buff[Lg] = ALL[x];
                                Nchar[Lg] = x;
                                printf("%s \n", Buff);
                                nbMDP++;
                        }
                        for(y=Lg; y>=0; y--)
                        {
                            if((Nchar[y] == 105)&&(Nchar[0]!= 105))
                            {
                                Nchar[y] = 0;
                                Nchar[y-1]++;
                            }
                            Buff[y] = ALL[Nchar[y]];
                        }
                  }
                  Lg++;
               }
               free(Buff);// Libere la memoire
              }
              


              ça marche pas ...
              • Partager sur Facebook
              • Partager sur Twitter
                17 décembre 2011 à 19:01:15

                Hein ?
                Si tu ne testes pas le retour de ta fonction BruteForce, je ne vois pas l'intérêt de l'appeler. J'imagine que tu as bien compris comment elle fonctionnait ?
                • Partager sur Facebook
                • Partager sur Twitter
                Staff désormais retraité.
                Anonyme
                  17 décembre 2011 à 19:05:21

                  Oui j'ai a peu près compris.
                  Ce que tu veut dir, c'est qu'il faut retourner buff ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 décembre 2011 à 20:24:53

                    Citation : axeldu70

                    Comme ça ?

                    do
                        {
                            fgets(mdp, 3, stdin);
                            BruteForce(LgMin, LgMax);
                        }while(strcmp(mdp, "motdepasse" )!=0);
                        printf("mot de passe trouvé!\n%s", mdp);
                    


                    Le test est en cour...



                    euh la c'est strictement sans interet!
                    le but c'est de faire un programme séparé!
                    • Partager sur Facebook
                    • Partager sur Twitter
                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                    Anonyme
                      17 décembre 2011 à 20:39:03

                      Tu veur=t dire 2 programmes qui interagisse netre eux ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 décembre 2011 à 21:42:27

                        Ben oui, si tu avais le code source du programme ciblé tu te contenterais d'enlever la protection par mot de passe au lieu de la forcer!
                        le but c'est que ton programme Brute Force envoie des mot de passe en boucle jusqu'à ce que le programme ciblé reconnaisse le bon mot de passe?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                        Anonyme
                          18 décembre 2011 à 13:08:29

                          oui c'est le but, mais je ne sais pas comment envoyer les mots de passe a l'autre programme.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 décembre 2011 à 13:14:15

                            tu peux utiliser la redirection, les pipes...
                            Faut se renseigner sur les différentes techniques.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                            Anonyme
                              18 décembre 2011 à 13:29:54

                              Je vais utiliser les pipes pour ça. Si vous avez un tuto la dessus, je suis preneur ! ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 décembre 2011 à 14:45:28

                                Trouvé deux liens propre à microsoft (donc sous windows):
                                http://support.microsoft.com/kb/190351
                                http://msdn.microsoft.com/en-us/librar [...] v=vs.85).aspx

                                edit, j'en profite pour mettre une version fonctionnelle du programme cible:
                                //#undef UNICODE
                                #include <stdio.h>
                                #include <string.h>
                                int main()
                                {
                                   char mdp[16];
                                   char passwd[16]="motdepasse";
                                   printf("Programme cible\nEntrer votre mot de passe:");
                                   do
                                   {
                                      fgets(mdp, 16, stdin);
                                      /* il faut enlever le\n mis a la fin */
                                      mdp[strlen(mdp)-1]='\0';
                                      // printf("mdp=%s - %d\n", mdp, strcmp(mdp, passwd )); // pour tester que tout va bien
                                   }while( strcmp(mdp, passwd )!=0); 
                                   printf("Bienvenu dans le logiciel!\n");
                                   // tu eux même y mettre une mesure du temps!
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                Anonyme
                                  18 décembre 2011 à 18:36:35

                                  Même avec les tutos je ne vois pas comment les faire communiquer... :euh:
                                  Sinon merci pour le programme cible, il est super. Mais simple. Mais super quand même :D
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 décembre 2011 à 20:42:22

                                    Fonctionne mais pas tout a fait...
                                    En fait on ne peut lire le programme cibler que quand il a fini de s'executer apparement!

                                    #undef UNICODE
                                    #include <windows.h>
                                    #include <stdio.h>
                                    #include <string.h>
                                    #pragma hdrstop
                                    
                                    //j'utilise un dictionnaire pour tester, plus pratique et moins aléatoire que ta méthode.
                                    char *dico[8]={"salut", "test", "suivant", "motdepasse", "bonjour", "chien", "mot", "neserspas"};
                                    
                                    //------------Sample using CreateProcess and Anonymous Pipes-----------------
                                    //---------------------passcracker.c----------------------------------------
                                    //---------------------use freely--------------------------------------------
                                    #define bzero(a) memset(a,0,sizeof(a)) //easier -- shortcut
                                    
                                    
                                    //j'ai pas touché
                                    int IsWinNT()  //check if we're running NT
                                    {
                                      OSVERSIONINFO osv;
                                      osv.dwOSVersionInfoSize = sizeof(osv);
                                      GetVersionEx(&osv);
                                      return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);
                                    }
                                    
                                    //j'ai pas touché
                                    void ErrorMessage(char *str)  //display detailed error info
                                    {
                                      LPVOID msg;
                                      FormatMessage(
                                        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                                        NULL,
                                        GetLastError(),
                                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                                        (LPTSTR) &msg,
                                        0,
                                        NULL
                                      );
                                      printf("%s: %s\n",str,msg);
                                      LocalFree(msg);
                                    }
                                    
                                    //---------------------------------------------------------------------------
                                    void main()
                                    {
                                      char buf[1024];           //i/o buffer
                                    
                                      STARTUPINFO si;
                                      SECURITY_ATTRIBUTES sa;
                                      SECURITY_DESCRIPTOR sd;               //security information for pipes
                                      PROCESS_INFORMATION pi;
                                      HANDLE newstdin,newstdout,read_stdout,write_stdin;  //pipe handles
                                    
                                      unsigned long exit=0;  //process exit code
                                      unsigned long bread;   //bytes read
                                      unsigned long avail;   //bytes available
                                    
                                      BOOL ret;
                                      char app_spawn[] = "cible.exe";  //<-  le nom du programme cible, doit être dans le même répertoire que le programme passcracker.exe
                                      int indice = -1;
                                    
                                    
                                      if (IsWinNT())        //initialize security descriptor (Windows NT)
                                      {
                                        InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
                                        SetSecurityDescriptorDacl(&sd, 1, NULL, 0);
                                        sa.lpSecurityDescriptor = &sd;
                                      }
                                      else sa.lpSecurityDescriptor = NULL;
                                      sa.nLength = sizeof(SECURITY_ATTRIBUTES);
                                      sa.bInheritHandle = TRUE;         //allow inheritable handles
                                    
                                      if (!CreatePipe(&newstdin,&write_stdin,&sa,0))   //create stdin pipe
                                      {
                                        ErrorMessage("CreatePipe");
                                        getchar();
                                        return;
                                      }
                                      if (!CreatePipe(&read_stdout,&newstdout,&sa,0))  //create stdout pipe
                                      {
                                        ErrorMessage("CreatePipe");
                                        getchar();
                                        CloseHandle(newstdin);
                                        CloseHandle(write_stdin);
                                        return;
                                      }
                                    
                                      GetStartupInfo(&si);      //set startupinfo for the spawned process
                                      /*
                                      The dwFlags member tells CreateProcess how to make the process.
                                      STARTF_USESTDHANDLES validates the hStd* members. STARTF_USESHOWWINDOW
                                      validates the wShowWindow member.
                                      */
                                      si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
                                      si.wShowWindow = SW_HIDE;
                                      si.hStdOutput = newstdout;
                                      si.hStdError = newstdout;     //set the new handles for the child process
                                      si.hStdInput = newstdin;
                                                                                         //system
                                    
                                      //spawn the child process
                                      if (!CreateProcess(app_spawn,NULL,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,  NULL,NULL,&si, &pi))
                                      {
                                        ErrorMessage("CreateProcess");
                                        getchar();
                                        CloseHandle(newstdin);
                                        CloseHandle(newstdout);
                                        CloseHandle(read_stdout);
                                        CloseHandle(write_stdin);
                                        return;
                                      }
                                      Sleep(5000);  //Rajout: attendre que le programme se lance?
                                      bzero(buf);
                                    
                                    //******************************Ca se passe dans cette boucle*************************
                                      for(;;)      //main program loop
                                      {
                                    	bread = 0;
                                        GetExitCodeProcess(pi.hProcess,&exit);      //while the process is running
                                        if (exit != STILL_ACTIVE && indice >= 7)  //condition de controle plus ou moin foireuse mais pour la premiere partie, ala seconde sert a ne pas sortir du dico
                                          break;
                                        ret = PeekNamedPipe(read_stdout,buf,1023,&bread,&avail,NULL);
                                    	if (ret == 0)
                                           ErrorMessage("PeekNamedPipe");
                                    
                                        //check to see if there is any data to read from stdout
                                    
                                        if (bread != 0)
                                        {
                                          bzero(buf);
                                          if (avail > 1023)
                                          {
                                            while (bread >= 1023)
                                            {
                                              ReadFile(read_stdout,buf,1023,&bread,NULL);  //read the stdout pipe
                                              printf("Recu: %s",buf);
                                              bzero(buf);
                                            }
                                          }
                                          else {
                                            ReadFile(read_stdout,buf,1023,&bread,NULL);
                                            printf("Recu: --->%s<---",buf);
                                          }
                                        }
                                        Sleep(2000); // on attends mais ca semble inutile!
                                        indice++;
                                        WriteFile(write_stdin, dico[indice], strlen(dico[indice]), &bread, NULL);  //on ecrit un mot du dico sur le stdin du programme cible
                                        buf[0] = '\n';
                                        WriteFile(write_stdin,buf,1,&bread,NULL); //send an extra newline char, on rajoute le retour chariot
                                        printf(" '%s' tester...\n",dico[indice]); //chaine de controle
                                      }
                                      CloseHandle(pi.hThread);
                                      CloseHandle(pi.hProcess);
                                      CloseHandle(newstdin);            //clean stuff up
                                      CloseHandle(newstdout);
                                      CloseHandle(read_stdout);
                                      CloseHandle(write_stdin);
                                    }
                                    //----------------------------EOF--------------------------------------------
                                    //---------------------------------------------------------------------------
                                    


                                    et le resultat:
                                    F:\DATABASE\PROG\vc2010\PassCracker\Debug>PassCracker.exe
                                     'salut' tester...
                                     'test' tester...
                                     'suivant' tester...
                                     'motdepasse' tester...
                                    Recu: --->Programme cible
                                    Entrer votre mot de passe:Bienvenu dans le logiciel!
                                    <--- 'bonjour' tester...
                                     'chien' tester...
                                     'mot' tester...
                                     'neserspas' tester...
                                    
                                    F:\DATABASE\PROG\vc2010\PassCracker\Debug>

                                    donc il ne détecte pas la fin du programme (puisqu'il continue jusqu'a la fin du dico alors que le programme cible est censé avoir terminé?)mais on peut "lire" une partie de la sortie du programme cible quand on y a rentrer le bon mot de passe!
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                      18 décembre 2011 à 21:57:25

                                      Salut,

                                      Pas essayé de comprendre le code du brute-force, mais il me parait bien compliqué, et pas du tout optimal...

                                      Au passage, avec un charset de 105 caractères, ton bruteforce ne pourra guère aller très loin (compte <math>\(105^n\)</math> combinaisons pour une clef de n caractères, ça fait très vite mal...) Au delà de 5/6 caractères de longueur, c'est mort :-° . Enfin bon, pas grave, c'est de toutes façons le cas pour n'importe quel bruteforce, au delà d'un certaine longueur de clef.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        19 décembre 2011 à 12:57:51

                                        Après pour tester toutes les possibilitées mettre
                                        dico[]           = "";
                                        dico = BruteForce(Lg min, Lg max);
                                        
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 décembre 2011 à 14:49:25

                                          Ca plantera: l'espace réserver à dico sera insuffisant!
                                          Ensuite sa fonction n'est pas adaptée....
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                          Anonyme
                                            21 décembre 2011 à 17:33:17

                                            p'tit up pour ceux qui ont d'autres idées ! :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                            Anonyme
                                              27 décembre 2011 à 18:46:06

                                              Qu'est-ce que tu veux ?
                                              Le brute force ça sert pas à grand chose. Surtout si tu veux faire un générateur de mots de passe, au delà de 5 ou 5 lettres, tu peux oublier !
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              utilité brute force

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown