#!C:\Perl\bin\perl.exe -w #!/usr/bin/perl -w ################################################################ #(very) Experimental un-optimized code to create MD5 hash tables #--------------------------------------------------------------- #for quick cracking of passwords #------------------------------- # #Based on the “Swiss researchers” concept this code creates a #MySQL database consisting of all MD5 hashes (A-Z, a-z, 0-9) #which can be used to obtain passwords (upto 8 letters). # #Note: The Swiss researchers demo has now been taken offline #“After one week of operation, more than a million hits from #more than 200000 visitors, we feel that the demo has made its #point.” # #The source code is as yet unreleased: “We have not yet decided #what to do with the tables and the source code. As soon as we #know something, we'll publish some news to inform you.” # #Requirements #------------ #Perl modules: DBI (ppm install DBI), DBD::mysql (ppm install #DBD::mysql) #MySQL database software # #Install #------- #"./perl md5hash_database.txt install" #or manually create database/tables and run #"./perl md5hash_database.txt" # #More Info #--------- #http://lasecpc13.epfl.ch/ntcrack/ #http://zdnet.com.com/2100-1105_2-5053063.html ################################################################ print "Content-type: text/html\n\n"; ++$|; open(STDERR, ">&STDOUT"); $db{'root_uname'} = 'root'; $db{'root_pass'} = ''; $db{'uname'} = 'root'; $db{'pass'} = ''; $db{'host'} = 'localhost'; $db{'name'} = 'md5_hashes'; sub db_error_chk { if ($DBI::errstr) { die $DBI::errstr; } } use DBI; if (($ARGV[0]) && ($ARGV[0] eq 'install')) { $dbh = DBI->connect("DBI:mysql:host=$db{'host'}", "$db{'root_uname'}", "$db{'root_pass'}", { 'AutoCommit' => 1, 'RaiseError' => 1, 'PrintError' => 0 }); eval { $dbh->do( "DROP DATABASE $db{'name'}" ); }; if ($DBI::errstr) { if (!$DBI::errstr =~ /Database doesn't exist/) { &db_error_chk; } } eval { $dbh->do( "CREATE DATABASE $db{'name'}" ); }; &db_error_chk; eval { $dbh->do( "USE $db{'name'}" ); }; &db_error_chk; $sql = qq{ CREATE TABLE MD5Hashes ( MessID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, LettersNo INT(2), Letters VARCHAR(12), Md5hash VARCHAR(32) )}; eval { $dbh->do( $sql ); }; &db_error_chk; $dbh->disconnect; } #------------------------------------------------------------------------------------------- sub irc_db_open { $dbh = DBI->connect("DBI:mysql:database=$db{'name'};host=$db{'host'}", "$db{'uname'}", "$db{'pass'}", { 'AutoCommit' => 1, 'RaiseError' => 1, 'PrintError' => 0 }); } sub irc_db_close { $dbh->disconnect; } sub add_record { $sql = "INSERT INTO MD5Hashes SET\n" . "LettersNo = '$letters_no',\n". "Letters = '$letters',\n". "Md5hash = '$letters_md5hash'\n" ; eval { $dbh->do( $sql ); }; &db_error_chk; } #------------------------------------------------------------------------------------------- &irc_db_open; @letters = ('a' .. 'z','A' .. 'Z','0' .. '9'); $total_letters = @letters; use Digest::MD5 qw(md5_hex); $letters_no = 1; for ($letter0=0; $letter0 < $total_letters; $letter0++) { $letters = $letters[$letter0]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } $letters_no = 2; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { $letters = $letters[$letter0] . $letters[$letter1]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } $letters_no = 3; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } $letters_no = 4; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2] . $letters[$letter3]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } } $letters_no = 5; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { for ($letter4=0; $letter4 < $total_letters; $letter4++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2] . $letters[$letter3] . $letters[$letter4]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } } } $letters_no = 6; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { for ($letter4=0; $letter4 < $total_letters; $letter4++) { for ($letter5=0; $letter5 < $total_letters; $letter5++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2] . $letters[$letter3] . $letters[$letter4] . $letters[$letter5]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } } } } $letters_no = 7; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { for ($letter4=0; $letter4 < $total_letters; $letter4++) { for ($letter5=0; $letter5 < $total_letters; $letter5++) { for ($letter6=0; $letter6 < $total_letters; $letter6++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2] . $letters[$letter3] . $letters[$letter4] . $letters[$letter5] . $letters[$letter6]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } } } } } $letters_no = 8; for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { for ($letter4=0; $letter4 < $total_letters; $letter4++) { for ($letter5=0; $letter5 < $total_letters; $letter5++) { for ($letter6=0; $letter6 < $total_letters; $letter6++) { for ($letter7=0; $letter7 < $total_letters; $letter7++) { $letters = $letters[$letter0] . $letters[$letter1] . $letters[$letter2] . $letters[$letter3] . $letters[$letter4] . $letters[$letter5] . $letters[$letter6] . $letters[$letter7]; $letters_md5hash = md5_hex($letters); &add_record; print "$letters\n"; } } } } } } } } &irc_db_close; exit; @letters = ('a' .. 'z','A' .. 'Z','0' .. '9'); $total_letters = @letters; use Digest::MD5 qw(md5_hex); #3 letters for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { print "$letters[$letter0]$letters[$letter1]$letters[$letter2]"; print " - "; print md5_hex("$letters[$letter0]$letters[$letter1]$letters[$letter2]") . "\n"; } } } #4 letters for ($letter0=0; $letter0 < $total_letters; $letter0++) { for ($letter1=0; $letter1 < $total_letters; $letter1++) { for ($letter2=0; $letter2 < $total_letters; $letter2++) { for ($letter3=0; $letter3 < $total_letters; $letter3++) { print "$letters[$letter0]$letters[$letter1]$letters[$letter2]$letters[$letter3]"; print " - "; print md5_hex("$letters[$letter0]$letters[$letter1]$letters[$letter2]$letters[$letter3]") . "\n"; } } } }