首页 电脑 电脑学堂 查看内容

MD5暴力破解实现代码(perl)

2009-8-24 12:15 883 0

摘要: #!/usr/bin/perl $ver = "01"; $dbgtmr = "1"; #Intervall of showing the current speed + lastpassword i...
关键词: nbsp print alpha ARGV charset Crack RawString dbgtmr cnt MD5

#!/usr/bin/perl $ver = "01"; $dbgtmr = "1"; #Intervall of showing the current speed + lastpassword in seconds.  if ($dbgtmr<=0){ die "Set dbgtmr to a value >=1 !\n";}; use Digest::MD5 qw(md5_hex); use Time::HiRes qw(gettimeofday);  if ($ARGV[0]=~"a") {  $alpha = "abcdefghijklmnopqrstuvwxyz";} if ($ARGV[0]=~"A") {  $alpha = $alpha. "ABCDEFGHIJKLMNOPQRSTUVWXYZ";} if ($ARGV[0]=~"d") {  $alpha = $alpha."1234567890";} if ($ARGV[0]=~"x") {  $alpha = $alpha. "!\"\$%&/()=?-.:\\*'-_:.;,";}  if ($alpha eq "" or $ARGV[3] eq "") {usage();}; if (length($ARGV[3]) != 32) { die "Sorry but it seems that the MD5 is not valid!\n";};  print "Selected charset for attack: '$alpha\'\n"; print "Going to Crack '$ARGV[3]'...\n";  for (my $t=$ARGV[1];$t<=$ARGV[2];$t++){  crack ($t); }  sub usage{  print "\n\nMD5 Hash Bruteforce Kit v_$ver\n";  print "by unix_chro alias backtrack ([email protected])\n";  print "Member in staff leader:elite-members,ubuntu-hackers\n\n";  print "USAGE\n";  print "./md5crack <charset> <mincount> <maxcount> <yourMD5>\n";  print " Charset can be: [aAdx]\n";  print " a = {'a','b','c',...}\n";  print " A = {'A','B','C',...}\n";  print " d = {'1','2','3',...}\n";  print " x = {'!','\"',' ',...}\n";  print "EXAMPLE FOR CRACKING A MD5 HASH\n";  print "./md5crack.pl ad 1 3 900150983cd24fb0d6963f7d28e17f72\n";  print " This example tries to crack the given MD5 with all lowercase Alphas and all digits.\n";  print " MD5 Kit only tries combinations with a length from 1 and 3 characters.\n-------\n";  print "./md5crack.pl aA 3 3 900150983cd24fb0d6963f7d28e17f72\n";  print " This example tries to crack the given MD5 with all lowercase Alphas and all uppercase Alphas.\n";  print " MD5 Kit only tries passwords which length is exactly 3 characters.\n-------\n";  print "./md5crack.pl aAdx 1 10 900150983cd24fb0d6963f7d28e17f72\n";  print " This example tries to crack the given MD5 with nearly every character.\n";  print " MD5 Kit only tries combinations with a length from 1 to 10 characters.\n";  die "Quitting...\n"; }  sub crack{  $CharSet = shift;  @RawString = ();  for (my $i =0;$i<$CharSet;$i++){ $RawString[i] = 0;}  $Start = gettimeofday();  do{   for (my $i =0;$i<$CharSet;$i++){    if ($RawString[$i] > length($alpha)-1){     if ($i==$CharSet-1){     print "Bruteforcing done with $CharSet Chars. No Results.\n";     $cnt=0;     return false;    }    $RawString[$i+1]++;    $RawString[$i]=0;    }   } ##################################################  #    $ret = "";    for (my $i =0;$i<$CharSet;$i++){ $ret = $ret . substr($alpha,$RawString[$i],1);}    $hash = md5_hex($ret);    $cnt++;    $Stop = gettimeofday();    if ($Stop-$Start>$dbgtmr){     $cnt = int($cnt/$dbgtmr);     print "$cnt hashes\\second.\tLast Pass '$ret\'\n";     $cnt=0;     $Start = gettimeofday();    }             print "$ARGV[3] != $hash ($ret)\n";    if ($ARGV[3] eq $hash){     die "\n**** Password Cracked! => $ret\n";    } ##################################################  #   #checkhash($CharSet)."\n";    $RawString[0]++;  }while($RawString[$CharSet-1]<length($alpha)); }  sub checkhash{  $CharSet = shift;  $ret = "";  for (my $i =0;$i<$CharSet;$i++){ $ret = $ret . substr($alpha,$RawString[$i],1);}  $hash = md5_hex($ret);  $cnt++;  $Stop = gettimeofday();  if ($Stop-$Start>$dbgtmr){   $cnt = int($cnt/$dbgtmr);   print "$cnt hashes\\second.\tLast Pass '$ret\'\n";   $cnt=0;   $Start = gettimeofday();  }   if ($ARGV[3] eq $hash){   die "\n**** Password Cracked! => $ret\n";  }  }    
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部