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...
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); }