17/12/2011

Algoritmo de força bruta feito em C

    Fim de semana chegou! Nada pra fazer! Quando surgiu-me uma idéia! "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 algoritimo 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, nescessita-se igualar o número de for's ao numero de caracteres da senha, algo simples mas chato para algmas 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 nescessita 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 algoritimo, 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)

    Bem, chegou ao fim minha primeira postagem nesse blog, espero não ser a última. Vou disponibilizar o algoritimo 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 alguem nescessite.

Código em C/C++

IDE Codeblocks

5 comentários:

  1. Me perguntaram sobre a biblioteca time.h no código. É que eu estava usando o comando clock(); para medir o tempo de execução, mas como o codeblocks informa o tempo de execução no final do programa, eu retirei o comando clock() e me esqueci de tirar a time...

    ResponderExcluir
  2. 5 anos depois aqui estou eu com uma duvida, haha... e quando eu não souber a senha? você declarou a sua numa linha de codigo, porem para eu tentar descobrir uma aleatoria? como seria?

    ResponderExcluir
    Respostas
    1. Olá Samuk, bem vindo ao blog.

      Bem, esse código é apenas um exemplo, mas a única diferença entre esse exemplo e uma situação real é que na situação real, antes de efetuar um ataque você precisa capturar um hash ou handshake, esse hash/handshake vai depender de que sistema você quer obter a senha.

      Antigamente se fazia ataque de força bruta diretamente nos serviços, mas as senhas eram fracas, 3 a 5 digitos, sem falar que os sistemas não tinham a proteção que tem hoje.

      O negócio do hash/handshake é que eles são uma senha criptografada por algoritmos como MD5, sha-1 sha-2, ai antes de comparar a senha, você usa um algoritmo pra converter sua

      senha(123456789) em um hash/handshake(5e4f6a6c6d6b6e6f6a6c6d6e5687a654e654d) <-- Exemplo

      depois de converter sua senha para um hash/handshake, você compara com o hash/handshake capturado, e assim para todas as senhas da wordlist.

      Excluir
  3. Velho, tu é muito pica, mas mano, oque posso alterar ou adicionar para poder aumentar o número de caracteres possíveis, preciso que possa usar até pelo menos 15 caracteres.

    ResponderExcluir
  4. Anônimo9/2/17 17:40

    Cara acho muito massa seu trabalho mas poderia postar como fazer esses tipos de código C ou me aconselhar um curso online pq só sei poucos códigos uns ... 5 códigos sabe bem....

    ResponderExcluir