Ho appena finito di scriverlo... il codice è molto migliorabile... si può ridurre ai 3/4 di lunghezza inserendo qualche if e cambiando qualche variabile... ma nn mi va!tanto funziona...
Il prog, per il dictionary attack, non fa altro che aprire il dizionario e memorizzare in un array tutte le righe, di moto che il contenuto di una riga sia il un elemento dell'array... perciò il dizionario deve essere strutturato come quello in allegato ...
[attachment=50]
Per finire... qualcuno farebbe da tester? thanxxxx!!
edited: la nuova versione del codice che decripta anche SHA1:
Il prog, per il dictionary attack, non fa altro che aprire il dizionario e memorizzare in un array tutte le righe, di moto che il contenuto di una riga sia il un elemento dell'array... perciò il dizionario deve essere strutturato come quello in allegato ...
[attachment=50]
Per finire... qualcuno farebbe da tester? thanxxxx!!
edited: la nuova versione del codice che decripta anche SHA1:
Codice:
# MD5 & SHA1 cracker
# Per trovare la stringa di caratteri corrispondete al codice MD5 o SHA1
# tramite bruteforce o dictionary attack
use Digest::MD5 'md5_hex';
use Digest::SHA1 'sha1_hex';
@char = ('a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z','A','B','C','D','E',
'F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z',
'1','2','3','4','5','6','7','8','9','0',
'`','-','=','~','!','@','#','$','%','^',
'&','*','(',')','_','+','{','}','|',':',
'"','<','>',' ');
print "\n";
print " ************************************\n";
print " * educative use only *\n";
print " ************************************\n";
print " * MD5/SHA1 cracker *\n";
print " ************************************\n";
print " ************************************\n";
print " * bruteforce code by Tweakz20 *\n";
print " * tradotto da Anubis *\n";
print " * *\n";
print " * dictionary atk code *\n";
print " * and SHA1 features *\n";
print " * by mystixx *\n";
print " ************************************\n\n";
scelta_iniziale();
sub scelta_iniziale() {
print"\nType 1 for MD5 hash, 2 for SHA1 hash: ";
chomp($scelta_iniziale = <STDIN>);
if ($scelta_iniziale eq '1') {scelta2();}
elsif ($scelta_iniziale eq '2') {sceltaSHA1();}
else {print " $scelta_iniziale --> Invalid entry\n"; scelta_iniziale();}
}
sub scelta2() {
print"\nType 1 for a bruteforce attack, 2 for a dictionary attack: ";
chomp($scelta2 = <STDIN>);
if ($scelta2 eq '1') {getmd5();}
elsif ($scelta2 eq '2') {dict();}
else {print " $scelta2 --> Invalid entry\n"; scelta2();}
}
sub getmd5 {
print "\nMD5 hash, please (or exit to terminate): ";
chomp($md5 = <STDIN>); print "\n";
$start_time = localtime;
$start_time2 = time;
testarg();
}
sub testarg {
$len = length ($md5);
if ($len eq 32) { makelist(); }
elsif ($md5 eq 'exit') {exit();}
else { usage(); }
}
sub makelist {
for ($br = 3; $br <= 12; $br++) {
for ($len1 = 0; $len1 <= 85; $len1++) {
$word[1] = $char[$len1];
for ($len2 = 0; $len2 <= 85; $len2++) {
$word[2] = $char[$len2];
if ($br <= 2) {
AddToList(@word);
}
else {
for ($len3 = 0; $len3 <= 85; $len3++) {
$word[3] = $char[$len3];
if ($br <= 3) {
AddToList(@word);
}
else {
for ($len4 = 0; $len4 <= 85; $len4++) {
$word[4] = $char[$len4];
if ($br <= 4) {
AddToList(@word);
}
else {
for ($len5 = 0; $len5 <= 85; $len5++) {
$word[5] = $char[$len5];
if ($br <= 5) {
AddToList(@word);
}
else {
for ($len6 = 0; $len6 <= 85; $len6++) {
$word[6] = $char[$len6];
if ($br <= 6) {
AddToList(@word);
}
else {
for ($len7 = 0; $len7 <= 85; $len7++) {
$word[7] = $char[$len7];
if ($br <= 7) {
AddToList(@word);
}
else {
for ($len8 = 0; $len8 <= 85; $len8++) {
$word[8] = $char[$len8];
if ($br <= 8) {
AddToList(@word);
}
else {
for ($len9 = 0; $len9 <= 85; $len9++) {
$word[9] = $char[$len9];
if ($br <= 9) {
AddToList(@word);
}
else {
for ($len10 = 0; $len10 <= 85; $len10++) {
$word[10] = $char[$len10];
if ($br <= 10) {
AddToList(@word);
}
else {
for ($len11 = 0; $len11 <= 85; $len11++) {
$word[11] = $char[$len11];
if ($br <= 11) {
AddToList(@word);
}
else {
for ($len12 = 0; $len12 <= 85; $len12++) {
$word[12] = $char[$len12];
if ($br <= 12) {
AddToList(@word);
}
else {
for ($len13 = 0; $len13 <= 85; $len13++) {
$word[13] = $char[$len13];
if ($br <= 13) {
AddToList(@word);
}
else {
for ($len14 = 0; $len14 <= 85; $len14++) {
$word[14] = $char[$len14];
if ($br <= 14) {
AddToList(@word);
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
sub AddToList {
my (@entry) = @_;
$test = join "", @entry;
my ($m) = md5_hex "$test";
print ("$m = $test\n");
if ($m eq $md5){
$finish_time = localtime;
$finish_time2 = time;
$ttime = $finish_time2 - $start_time2;
print "\n\n\n***!!!MD5 CRACKED!!!***\n\n";
print "Text decrypted: $test\n\n";
print "\n Inizio processo: $start_time";
print "\n Fine processo: $finish_time\n";
print "\n Processo completato in $ttime secondi.\n";
scelta();
}
}
sub usage {
print "Incorrect MD5 hash!\n\n";
getmd5();
}
sub usage2 {
print "Incorrect MD5 hash!\n\n";
dict();
}
sub exit {
}
sub esporta {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "MD5 BruteForce Attack results\n\n";
print TESTO "***!!!MD5 CRACKED!!!***\n\n";
print TESTO "MD5 hash: $md5\n";
print TESTO "\nText decrypted: $test\n\n";
print TESTO "\n Inizio processo: $start_time";
print TESTO "\n Fine processo: $finish_time\n";
print TESTO "\n Processo completato in $ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}
sub scelta {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta();}
elsif ($scelta eq 'Y') {esporta();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta();}
}
sub dict() {
print "\nMD5 hash, please (or exit to terminate): ";
chomp($hash = <STDIN>); print "\n";
$len2 = length ($hash);
if ($len2 eq 32) {attack();}
elsif ($hash eq 'exit') {exit();}
else {usage2();}
}
sub attack() {
apri();
$max_i = $#parole;
$at_st_time = localtime;
$at_st_time2 = time;
for ($i=0; $i<=$max_i; $i++) {
my $str = @parole[$i];
chomp ($str);
my $str2 = md5_hex($str);
print "$str2 = $str\n";
if ($str2 eq $hash) {cracked();}
elsif ($i == $max_i) {fail();}}
}
sub apri() {
print "\n Inserisci il percorso del dizionario: ";
chomp($dictname = <STDIN>); print "\n";
if ($dictname eq '') {print " --> Attenzione!Devi specificare il percorso del dizionario...\n\n"; apri();}
elsif (open DICT, "<", $dictname) {
@parole = <DICT>;
} else {
print " --> Errore! Impossibile aprire il file $dictname: $!\n";
apri();
}}
sub cracked() {
$at_fin_time = localtime;
$at_fin_time2 = time;
$at_ttime = $at_fin_time2 - $at_st_time2;
print "\n\n\nMD5 Dictionary Attack results\n\n";
print "\n\n***!!!MD5 CRACKED!!!***\n";
print "\nText decrypted: @parole[$i]\n\n";
print "\n Inizio processo: $at_st_time";
print "\n Fine processo: $at_fin_time\n";
print "\n Processo completato in $at_ttime secondi.\n";
scelta3();
}
sub fail() {
$at_fin_time = localtime;
$at_fin_time2 = time;
$at_ttime = $at_fin_time2 - $at_st_time2;
print "\n\n\nMD5 Dictionary Attack results\n";
print "\n\n***!!!MD5 UNCRACKED!!!***\n";
print "\nMD5 hash: $hash\n";
print "\n\nDictionary attack FAILED... try BruteForce attack\n\n";
print "\n Inizio processo: $at_st_time";
print "\n Fine processo: $at_fin_time\n";
print "\n Processo completato in $at_ttime secondi.\n";
scelta4();
}
sub scelta3 {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta2();}
elsif ($scelta eq 'Y') {esporta2();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta3();}
}
sub esporta2 {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "MD5 Dictionary Attack results\n\n";
print TESTO "***!!!MD5 CRACKED!!!***\n\n";
print TESTO "MD5 hash: $hash\n";
print TESTO "\nText decrypted: @parole[$i]\n\n";
print TESTO "\n Inizio processo: $at_st_time";
print TESTO "\n Fine processo: $at_fin_time\n";
print TESTO "\n Processo completato in $at_ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}
sub scelta4 {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta3();}
elsif ($scelta eq 'Y') {esporta3();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta4();}
}
sub esporta3 {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "MD5 Dictionary Attack results\n\n";
print TESTO "***!!!MD5 UNCRACKED!!!***\n";
print TESTO "MD5 hash: $hash\n";
print TESTO "\nDictionary attack FAILED... try BruteForce attack\n\n";
print TESTO "\n Inizio processo: $at_st_time";
print TESTO "\n Fine processo: $at_fin_time\n";
print TESTO "\n Processo completato in $at_ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}
sub sceltaSHA1() {
print"\nType 1 for a bruteforce attack, 2 for a dictionary attack: ";
chomp($sceltaSHA1 = <STDIN>);
if ($sceltaSHA1 eq '1') {getsha1();}
elsif ($sceltaSHA1 eq '2') {dictSHA1();}
else {print " $sceltaSHA1 --> Invalid entry\n"; sceltaSHA1();}
}
sub getsha1 {
print "\nSHA1 hash, please (or exit to terminate): ";
chomp($sha1 = <STDIN>); print "\n";
$start_time = localtime;
$start_time2 = time;
testargSHA1();
}
sub testargSHA1 {
$len = length ($sha1);
if ($len eq 40) { makelistSHA1(); }
elsif ($sha1 eq 'exit') {exit();}
else { usage3(); }
}
sub makelistSHA1 {
for ($br = 3; $br <= 12; $br++) {
for ($len1 = 0; $len1 <= 85; $len1++) {
$word[1] = $char[$len1];
for ($len2 = 0; $len2 <= 85; $len2++) {
$word[2] = $char[$len2];
if ($br <= 2) {
AddToListSHA1(@word);
}
else {
for ($len3 = 0; $len3 <= 85; $len3++) {
$word[3] = $char[$len3];
if ($br <= 3) {
AddToListSHA1(@word);
}
else {
for ($len4 = 0; $len4 <= 85; $len4++) {
$word[4] = $char[$len4];
if ($br <= 4) {
AddToListSHA1(@word);
}
else {
for ($len5 = 0; $len5 <= 85; $len5++) {
$word[5] = $char[$len5];
if ($br <= 5) {
AddToListSHA1(@word);
}
else {
for ($len6 = 0; $len6 <= 85; $len6++) {
$word[6] = $char[$len6];
if ($br <= 6) {
AddToListSHA1(@word);
}
else {
for ($len7 = 0; $len7 <= 85; $len7++) {
$word[7] = $char[$len7];
if ($br <= 7) {
AddToListSHA1(@word);
}
else {
for ($len8 = 0; $len8 <= 85; $len8++) {
$word[8] = $char[$len8];
if ($br <= 8) {
AddToListSHA1(@word);
}
else {
for ($len9 = 0; $len9 <= 85; $len9++) {
$word[9] = $char[$len9];
if ($br <= 9) {
AddToListSHA1(@word);
}
else {
for ($len10 = 0; $len10 <= 85; $len10++) {
$word[10] = $char[$len10];
if ($br <= 10) {
AddToListSHA1(@word);
}
else {
for ($len11 = 0; $len11 <= 85; $len11++) {
$word[11] = $char[$len11];
if ($br <= 11) {
AddToListSHA1(@word);
}
else {
for ($len12 = 0; $len12 <= 85; $len12++) {
$word[12] = $char[$len12];
if ($br <= 12) {
AddToListSHA1(@word);
}
else {
for ($len13 = 0; $len13 <= 85; $len13++) {
$word[13] = $char[$len13];
if ($br <= 13) {
AddToListSHA1(@word);
}
else {
for ($len14 = 0; $len14 <= 85; $len14++) {
$word[14] = $char[$len14];
if ($br <= 14) {
AddToListSHA1(@word);
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
sub AddToListSHA1 {
my (@entry) = @_;
$test = join "", @entry;
my ($m) = sha1_hex($test);
print ("$m = $test\n");
if ($m eq $sha1){
$finish_time = localtime;
$finish_time2 = time;
$ttime = $finish_time2 - $start_time2;
print "\n\n\n***!!!SHA1 CRACKED!!!***\n\n";
print "Text decrypted: $test\n\n";
print "\n Inizio processo: $start_time";
print "\n Fine processo: $finish_time\n";
print "\n Processo completato in $ttime secondi.\n";
scelta5();
}
}
sub usage3 {
print "Incorrect SHA1 hash!\n\n";
getsha1();
}
sub scelta5 {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta4();}
elsif ($scelta eq 'Y') {esporta4();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta();}
}
sub esporta4 {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "SHA1 BruteForce Attack results\n\n";
print TESTO "***!!!SHA1 CRACKED!!!***\n\n";
print TESTO "SHA1 hash: $sha1\n";
print TESTO "\nText decrypted: $test\n\n";
print TESTO "\n Inizio processo: $start_time";
print TESTO "\n Fine processo: $finish_time\n";
print TESTO "\n Processo completato in $ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}
sub dictSHA1() {
print "\nSHA1 hash, please (or exit to terminate): ";
chomp($hash = <STDIN>); print "\n";
$len2 = length ($hash);
if ($len2 eq 40) {attackSHA1();}
elsif ($hash eq 'exit') {exit();}
else {usage4();}
}
sub usage4 {
print "Incorrect SHA1 hash!\n\n";
dictSHA1();
}
sub attackSHA1() {
apri();
$max_i = $#parole;
$at_st_time = localtime;
$at_st_time2 = time;
for ($i=0; $i<=$max_i; $i++) {
my $str = @parole[$i];
chomp ($str);
my $str2 = sha1_hex($str);
print "$str2 = $str\n";
if ($str2 eq $hash) {crackedSHA1();}
elsif ($i == $max_i) {failSHA1();}}
}
sub crackedSHA1() {
$at_fin_time = localtime;
$at_fin_time2 = time;
$at_ttime = $at_fin_time2 - $at_st_time2;
print "\n\n\nSHA1 Dictionary Attack results\n\n";
print "\n\n***!!!SHA1 CRACKED!!!***\n";
print "\nText decrypted: @parole[$i]\n\n";
print "\n Inizio processo: $at_st_time";
print "\n Fine processo: $at_fin_time\n";
print "\n Processo completato in $at_ttime secondi.\n";
scelta6();
}
sub failSHA1() {
$at_fin_time = localtime;
$at_fin_time2 = time;
$at_ttime = $at_fin_time2 - $at_st_time2;
print "\n\n\nSHA1 Dictionary Attack results\n\n";
print "\n\n***!!!SHA1 UNCRACKED!!!***\n";
print "\nSHA1 hash: $hash\n";
print "\n\nDictionary attack FAILED... try BruteForce attack\n\n";
print "\n Inizio processo: $at_st_time";
print "\n Fine processo: $at_fin_time\n";
print "\n Processo completato in $at_ttime secondi.\n";
scelta7();
}
sub scelta6 {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta5();}
elsif ($scelta eq 'Y') {esporta5();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta3();}
}
sub scelta7 {
print "\n\n Vuoi esportare i risultati in un file? (Y/N) ";
my $scelta;
chomp($scelta = <STDIN>);
if ($scelta eq 'y') {esporta6();}
elsif ($scelta eq 'Y') {esporta6();}
elsif ($scelta eq 'n') {exit();}
elsif ($scelta eq 'N') {exit();}
else {print " $scelta --> Invalid entry"; scelta4();}
}
sub esporta5 {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "SHA1 Dictionary Attack results\n\n";
print TESTO "***!!!SHA1 CRACKED!!!***\n\n";
print TESTO "SHA1 hash: $hash\n";
print TESTO "\nText decrypted: @parole[$i]\n\n";
print TESTO "\n Inizio processo: $at_st_time";
print TESTO "\n Fine processo: $at_fin_time\n";
print TESTO "\n Processo completato in $at_ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}
sub esporta6 {
print " Inserisci il nome del file: ";
chomp($filename = <STDIN>);
if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
elsif (open TESTO, ">$filename.txt") {
print TESTO "SHA1 Dictionary Attack results\n\n";
print TESTO "***!!!SHA1 UNCRACKED!!!***\n";
print TESTO "SHA1 hash: $hash\n";
print TESTO "\nDictionary attack FAILED... try BruteForce attack\n\n";
print TESTO "\n Inizio processo: $at_st_time";
print TESTO "\n Fine processo: $at_fin_time\n";
print TESTO "\n Processo completato in $at_ttime secondi.\n";
print "\n Risultati esportati in $filename.txt\n";
exit();
} else {
die " --> Errore: $!\n";
exit();
}
}