Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

[Source] Algoritmo de força bruta

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ [Source] Algoritmo de força bruta

    Fim de semana chegou! Nada pra fazer! Quando surgiu-me uma ideia! "Vou criar um algoritmo de força bruta pra ver se eu consigo descobrir a senha do servidor do FBI. Vou aproveitar e ver se eu estou sendo procurado e logo depois vou dominar o Mundo!"... kkkkk, claro que o verdadeiro motivo não foi esse, teve muita curiosidade e um pouco de tédio nisso.

    Bem, fiz um algoritmo na linguagem C/C++, nele eu testei uma maneira que descobrir uma senha de no máximo 9 dígitos, na tentativa e erro (força bruta), nele tem duas funções, uma força bruta(normal) e outra força bruta(inteligente), a diferença entre as duas funções é que na força bruta inteligente você não precisa controlar o tamanho da senha, já na força bruta normal, necessita-se igualar o número de for's ao numero de caracteres da senha, algo simples mas chato para algumas pessoas, você deve estar se perguntando, "por que ele não deixou apenas a função inteligente?", devido ao fato de ser um algoritmo para descobrir senhas, ele necessita de um maior desempenho e apesar da diferença ser pequena usando apenas números, usando letras ou letras e números essa diferença aumenta muito. Queria também chamar a atenção sobre as impressões das senhas erradas na tela, atrasa muito o a execução do algoritmo, se estiver demorando pra achar a senha retire os printfs de senhas erradas. Vejamos alguns resultados dos testes que realizei em um Notebook Positivo sim+ 1455 Core2 duo 3gb Ram com Windows XP...

    Para quebrar uma senha de 9 Dígitos(Apenas números)

    11.5s Segundos usando Força Bruta (Inteligente)
    8.5s Segundos usando Força Bruta (Normal)

    Para quebrar uma senha de 6 Dígitos(Apenas letras minúsculas sem o Ç)

    3.3s Segundos usando Força Bruta (Inteligente)
    2.2s Segundos usando Força Bruta (Normal)

    Para quebrar uma senha de 7 Dígitos(Apenas letras minúsculas sem o Ç)

    85.2s Segundos usando Força Bruta (Inteligente)
    56.6s Segundos usando Força Bruta (Normal)

    Vou disponibilizar o algoritmo feito em C/C++, compilado na IDE CodeBlocks para quem quiser testar, modificar e aprender ou até critica-lo , A quem baixar comenta aí os resultados dos seus testes. Abaixo segue o link para o download do código e da IDE caso alguém necessite.

    Obs: O código pode conter erros, mas nenhum de compilação no codeblocks. Faz tempo que escrevi isso e faz tempo que não olho. Espero que alguém aprenda algo com isso, pq eu aprendi muita coisa.

    Código em C/C++
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    IDE Codeblocks

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    //97 ao 122 usa só letras minúsculas
    //65 ao 90 usa só letras maiúsculas
    //48 ao 57 usa só numeros
    #define COMECO_CHAR 97
    #define FIM_CHAR 122
    #define MAX_SENHA 20
    
    void Forca_Bruta(char *str);
    void Forca_Bruta_Inteligente(char *pass);
    void Verifica_Senha(char *forca, char *pass);
    
    int main() {
      char senha[MAX_SENHA] = "ciro";
    
      Forca_Bruta_Inteligente(senha);
    
      return 0;
    }
    void Forca_Bruta(char *pass) {
      int i;
      char forca[MAX_SENHA];
    
      for (i = 0;i < MAX_SENHA; i++)
        forca[i] = '\0';
    
      printf("%s", pass);
    
      for (forca[0] = COMECO_CHAR; forca[0] <= FIM_CHAR; forca[0]++)//1 caractere
        for (forca[1] = COMECO_CHAR; forca[1] <= FIM_CHAR; forca[1]++)//2 caracteres
          for (forca[2] = COMECO_CHAR; forca[2] <= FIM_CHAR; forca[2]++)//3 caracteres
            for (forca[3] = COMECO_CHAR; forca[3] <= FIM_CHAR; forca[3]++)//4 caracteres
             // for (forca[4] = COMECO_CHAR; forca[4] <= FIM_CHAR; forca[4]++)//5 caracteres
                //for (forca[5] = COMECO_CHAR; forca[5] <= FIM_CHAR; forca[5]++)//6 caracteres
                  //for (forca[6] = COMECO_CHAR; forca[6] <= FIM_CHAR; forca[6]++)//7 caracteres
                   // for (forca[7] = COMECO_CHAR; forca[7] <= FIM_CHAR; forca[7]++)//8 caracteres
                     // for (forca[8] = COMECO_CHAR; forca[8] <= FIM_CHAR; forca[8]++)//9 caracteres
                        //for (forca[9] = COMECO_CHAR; forca[9] <= FIM_CHAR; forca[9]++)
                        {
                          if ( !strcmp(forca, pass) ) {
                            printf("\nSenha: %s", forca);
                            exit(1);
                           } else // retire o else e o printf abaixo para ter mais desempenho!
                           printf("\n%s", forca);
                        }
    }
    //Verifica e vai aumentando os digitos se não achar a senha...
    void Forca_Bruta_Inteligente(char *pass) {
      int i, tam;
      char forca[MAX_SENHA];
    
      tam = strlen(pass);
    
      for (i = 0;i < MAX_SENHA; i++)
        forca[i] = '\0';
    
      printf("%s", pass);
    
      for (forca[0] = COMECO_CHAR; forca[0] <= FIM_CHAR; forca[0]++) {
        if (tam <= 1){
          if (tam == 1)
            Verifica_Senha( forca, pass);
        } else
        for (forca[1] = COMECO_CHAR; forca[1] <= FIM_CHAR; forca[1]++) {
          if (tam <= 2){
            if (tam == 2)
            Verifica_Senha( forca, pass);
          } else
          for (forca[2] = COMECO_CHAR; forca[2] <= FIM_CHAR; forca[2]++) {
            if (tam <= 3){
              if (tam == 3)
              Verifica_Senha( forca, pass);
            } else
            for (forca[3] = COMECO_CHAR; forca[3] <= FIM_CHAR; forca[3]++) {
              if (tam <= 4){
                if (tam == 4)
                  Verifica_Senha( forca, pass);
              } else
              for (forca[4] = COMECO_CHAR; forca[4] <= FIM_CHAR; forca[4]++) {
                if (tam <= 5){
                  if (tam == 5)
                  Verifica_Senha( forca, pass);
                } else
                for (forca[5] = COMECO_CHAR; forca[5] <= FIM_CHAR; forca[5]++) {
                  if (tam <= 6){
                    if (tam == 6)
                    Verifica_Senha( forca, pass);
                  } else
                  for (forca[6] = COMECO_CHAR; forca[6] <= FIM_CHAR; forca[6]++) {
                    if (tam <= 7){
                      if (tam == 7)
                      Verifica_Senha( forca, pass);
                    } else
                    for (forca[7] = COMECO_CHAR; forca[7] <= FIM_CHAR; forca[7]++) {
                      if (tam <= 8){
                        if (tam == 8)
                        Verifica_Senha( forca, pass);
                      } else
                      for (forca[8] = COMECO_CHAR; forca[8] <= FIM_CHAR; forca[8]++) {
                        if (tam <= 9){
                          if (tam == 9)
                          Verifica_Senha( forca, pass);
                        } else {
                          printf("\nSenha muito grande! > 9");
                          exit(1);
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    
    void Verifica_Senha(char *forca, char *pass) {
    
      if ( !strcmp(forca, pass) ) {
        printf("\nSenha: %s", forca);
        printf("\nSenha em ascii: ");
        {
          int i;
          for (i = 0; forca[i] != '\0'; i++)
            printf("%d:", forca[i]);
        }
        exit(1);
        } else// retire o else e o printf abaixo para ter mais desempenho!
          printf("\n%s", forca);
    }
    Attached Files
    __________________________________________________ ____
    Quem pensa antes tem tempo pra pensar, pois não precisa pensar durante ou depois.
X
Working...
X