mais um dia se passa e decidi mexer um pouco mais no algoritmo, Fiz uma função para quebrar uma senha que contenha tanto letras minúsculas quanto maiúsculas,essa função pula do código ASCII '90' = "Z" para o '97'= "a", evitando assim, 6 caracteres( ], [, \, ^, _, ' ), a mais na força bruta, reduzindo assim o tempo de execução da função. Também fiz uma mesma função, só que essa fiz um modo burro, usando também os 6 caracteres ( ], [, \, ^, _, ' ), retirados da outra função, meu objetivo era testar se of "IF's" da primeira função retardariam a execução do algoritmo, o que foi provado empiricamente que não retarda mais do o retardo causado pelo uso dos 6 caracteres especiais. Vejamos os resultados
Para quebrar uma senha com apenas letras (a-z, A-Z).
5 Dígitos: 5s Segundos usando Força Bruta (Inteligente)
6 Dígitos: 250s Segundos usando Força Bruta (Inteligente)
Para quebrar uma senha com letras (a-z, A-Z) e os 6 caracteres especiais( ], [, \, ^, _, ' ).
5 Dígitos: 7s Segundos usando Força Bruta (Burra)
6 Dígitos: 388s Segundos usando Força Bruta (Burra)
Para quebrar uma senha com letras (a-z, A-Z) e números(0-9) .
5 Dígitos: 14,2s Segundos usando Força Bruta (Inteligente)
6 Dígitos: 887s Segundos(15 min) usando Força Bruta (Inteligente)
Decidi não usar uma função burra nesse último teste porque prejudicaria muito o desempenho, mais ainda falta um teste com todos os caracteres da tabela ASCII que depois postarei aqui nesse mesmo tópico.
Obs: eu tava pirando nesse tempo, entao deve ter muita coisa errada nesse código. Mass, talvez ajude alguém
O link do código está logo abaixo:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Um link da tabela ASCII que usei para fazer o algoritmo :
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Para quebrar uma senha com apenas letras (a-z, A-Z).
5 Dígitos: 5s Segundos usando Força Bruta (Inteligente)
6 Dígitos: 250s Segundos usando Força Bruta (Inteligente)
Para quebrar uma senha com letras (a-z, A-Z) e os 6 caracteres especiais( ], [, \, ^, _, ' ).
5 Dígitos: 7s Segundos usando Força Bruta (Burra)
6 Dígitos: 388s Segundos usando Força Bruta (Burra)
Para quebrar uma senha com letras (a-z, A-Z) e números(0-9) .
5 Dígitos: 14,2s Segundos usando Força Bruta (Inteligente)
6 Dígitos: 887s Segundos(15 min) usando Força Bruta (Inteligente)
Decidi não usar uma função burra nesse último teste porque prejudicaria muito o desempenho, mais ainda falta um teste com todos os caracteres da tabela ASCII que depois postarei aqui nesse mesmo tópico.
Obs: eu tava pirando nesse tempo, entao deve ter muita coisa errada nesse código. Mass, talvez ajude alguém
O link do código está logo abaixo:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Um link da tabela ASCII que usei para fazer o algoritmo :
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 65 #define FIM_CHAR 122 #define MAX_SENHA 20 void Forca_Int_Letras_Num(char *pass, int Range_1, int Range_2, int Range_3, int Range_4, int Range_5, int Range_6); void Forca_Bruta_Inteligente_Todas_Letras(char *pass, int Range_1, int Range_2, int Range_3, int Range_4); void Forca_Bruta_Todas_Letras(char *pass, int Range_1, int Range_4); void Verifica_Senha(char *forca, char *pass); int main() { char senha[MAX_SENHA] = "zzzzz"; Forca_Int_Letras_Num( senha, 48, 57 , 65, 90, 97, 122); //Forca_Bruta_Inteligente_Todas_Letras( senha, 65, 90, 97, 122); //Forca_Bruta_Todas_Letras( senha, COMECO_CHAR, FIM_CHAR); return 0; } //Verifica e vai aumentando os digitos se não achar a senha... void Forca_Bruta_Inteligente_Todas_Letras(char *pass, int Range_1, int Range_2, int Range_3, int Range_4) { 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] = Range_1; forca[0] <= Range_4; forca[0]++) { if (forca[0] > Range_2 && forca[0] < Range_2 + 2) forca[0] = Range_3; if (tam <= 1){ if (tam == 1) Verifica_Senha( forca, pass); } else for (forca[1] = Range_1; forca[1] <= Range_4; forca[1]++) { if (forca[1] > Range_2 && forca[1] < Range_2 + 2) forca[1] = Range_3; if (tam <= 2){ if (tam == 2) Verifica_Senha( forca, pass); } else for (forca[2] = Range_1; forca[2] <= Range_4; forca[2]++) { if (forca[2] > Range_2 && forca[2] < Range_2 + 2) forca[2] = Range_3; if (tam <= 3){ if (tam == 3) Verifica_Senha( forca, pass); } else for (forca[3] = Range_1; forca[3] <= Range_4; forca[3]++) { if (forca[3] > Range_2 && forca[3] < Range_2 + 2) forca[3] = Range_3; if (tam <= 4){ if (tam == 4) Verifica_Senha( forca, pass); } else for (forca[4] = Range_1; forca[4] <= Range_4; forca[4]++) { if (forca[4] > Range_2 && forca[4] < Range_2 + 2) forca[4] = Range_3; if (tam <= 5){ if (tam == 5) Verifica_Senha( forca, pass); } else for (forca[5] = Range_1; forca[5] <= Range_4; forca[5]++) { if (forca[5] > Range_2 && forca[5] < Range_2 + 2) forca[5] = Range_3; if (tam <= 6){ if (tam == 6) Verifica_Senha( forca, pass); } else for (forca[6] = Range_1; forca[6] <= Range_4; forca[6]++) { if (forca[6] > Range_2 && forca[6] < Range_2 + 2) forca[6] = Range_3; if (tam <= 7){ if (tam == 7) Verifica_Senha( forca, pass); } else for (forca[7] = Range_1; forca[7] <= Range_4; forca[7]++) { if (forca[7] > Range_2 && forca[7] < Range_2 + 2) forca[7] = Range_3; if (tam <= 8){ if (tam == 8) Verifica_Senha( forca, pass); } else for (forca[8] = Range_1; forca[8] <= Range_4; forca[8]++) { if (forca[8] > Range_2 && forca[8] < Range_2 + 2) forca[8] = Range_3; if (tam <= 9){ if (tam == 9) Verifica_Senha( forca, pass); } else { printf("\nSenha muito grande! > 9"); exit(1); } } } } } } } } } } } void Forca_Int_Letras_Num(char *pass, int Range_1, int Range_2, int Range_3, int Range_4, int Range_5, int Range_6) { int i, tam; char forca[MAX_SENHA]; tam = strlen(pass); for (i = 0;i < MAX_SENHA; i++) forca[i] = '\0'; printf("Tentando descobrir a senha %s\n\n", pass); for (forca[0] = Range_1; forca[0] <= Range_6; forca[0]++) { if (forca[0] > Range_2 ){ if ( forca[0] < Range_2 + 2) forca[0] = Range_3; else if ( forca[0] > Range_4 && forca[0] < Range_4 + 2) forca[0] = Range_5; } if (tam <= 1){ if (tam == 1) Verifica_Senha( forca, pass); } else for (forca[1] = Range_1; forca[1] <= Range_6; forca[1]++) { if (forca[1] > Range_2 ){ if ( forca[1] < Range_2 + 2) forca[1] = Range_3; else if ( forca[1] > Range_4 && forca[1] < Range_4 + 2) forca[1] = Range_5; } if (tam <= 2){ if (tam == 2) Verifica_Senha( forca, pass); } else for (forca[2] = Range_1; forca[2] <= Range_6; forca[2]++) { if (forca[2] > Range_2 ){ if ( forca[2] < Range_2 + 2) forca[2] = Range_3; else if ( forca[2] > Range_4 && forca[2] < Range_4 + 2) forca[2] = Range_5; } if (tam <= 3){ if (tam == 3) Verifica_Senha( forca, pass); } else for (forca[3] = Range_1; forca[3] <= Range_6; forca[3]++) { if (forca[3] > Range_2 ){ if ( forca[3] < Range_2 + 2) forca[3] = Range_3; else if ( forca[3] > Range_4 && forca[3] < Range_4 + 2) forca[3] = Range_5; } if (tam <= 4){ if (tam == 4) Verifica_Senha( forca, pass); } else for (forca[4] = Range_1; forca[4] <= Range_6; forca[4]++) { if (forca[4] > Range_2 ){ if ( forca[4] < Range_2 + 2) forca[4] = Range_3; else if ( forca[4] > Range_4 && forca[4] < Range_4 + 2) forca[4] = Range_5; } if (tam <= 5){ if (tam == 5) Verifica_Senha( forca, pass); } else for (forca[5] = Range_1; forca[5] <= Range_6; forca[5]++) { if (forca[5] > Range_2 ){ if ( forca[5] < Range_2 + 2) forca[5] = Range_3; else if ( forca[5] > Range_4 && forca[5] < Range_4 + 2) forca[5] = Range_5; } if (tam <= 6){ if (tam == 6) Verifica_Senha( forca, pass); } else for (forca[6] = Range_1; forca[6] <= Range_6; forca[6]++) { if (forca[6] > Range_2 ){ if ( forca[6] < Range_2 + 2) forca[6] = Range_3; else if ( forca[6] > Range_4 && forca[6] < Range_4 + 2) forca[6] = Range_5; } if (tam <= 7){ if (tam == 7) Verifica_Senha( forca, pass); } else for (forca[7] = Range_1; forca[7] <= Range_6; forca[7]++) { if (forca[7] > Range_2 ){ if ( forca[7] < Range_2 + 2) forca[7] = Range_3; else if ( forca[7] > Range_4 && forca[7] < Range_4 + 2) forca[7] = Range_5; } if (tam <= 8){ if (tam == 8) Verifica_Senha( forca, pass); } else for (forca[8] = Range_1; forca[8] <= Range_6; forca[8]++) { if (forca[8] > Range_2 ){ if ( forca[8] < Range_2 + 2) forca[8] = Range_3; else if ( forca[8] > Range_4 && forca[8] < Range_4 + 2) forca[8] = Range_5; } if (tam <= 9){ if (tam == 9) Verifica_Senha( forca, pass); } else { printf("\nSenha muito grande! > 9"); exit(1); } } } } } } } } } } } //Verifica e vai aumentando os digitos se não achar a senha... void Forca_Bruta_Todas_Letras(char *pass, int Range_1, int Range_4) { 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] = Range_1; forca[0] <= Range_4 ; forca[0]++) { if (tam <= 1){ if (tam == 1) Verifica_Senha( forca, pass); } else for (forca[1] = Range_1; forca[1] <= Range_4; forca[1]++) { if (tam <= 2){ if (tam == 2) Verifica_Senha( forca, pass); } else for (forca[2] = Range_1; forca[2] <= Range_4; forca[2]++) { if (tam <= 3){ if (tam == 3) Verifica_Senha( forca, pass); } else for (forca[3] = Range_1; forca[3] <= Range_4; forca[3]++) { if (tam <= 4){ if (tam == 4) Verifica_Senha( forca, pass); } else for (forca[4] = Range_1; forca[4] <= Range_4; forca[4]++) { if (tam <= 5){ if (tam == 5) Verifica_Senha( forca, pass); } else for (forca[5] = Range_1; forca[5] <= Range_4; forca[5]++) { if (tam <= 6){ if (tam == 6) Verifica_Senha( forca, pass); } else for (forca[6] = Range_1; forca[6] <= Range_4; forca[6]++) { if (tam <= 7){ if (tam == 7) Verifica_Senha( forca, pass); } else for (forca[7] = Range_1; forca[7] <= Range_4; forca[7]++) { if (tam <= 8){ if (tam == 8) Verifica_Senha( forca, pass); } else for (forca[8] = Range_1; forca[8] <= Range_4; 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); }
Comment