Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #79, ИЮЛЬ 2005 г.

Управление RAT

Ms-Rem

Хакер, номер #079, стр. 079-108-5


После выполнения каждой такой связки нужно проверять успешность результата, для чего мы реализуем функцию Success, которая примет ответ сервера и проверит его код.

function Success(): boolean;

var

Bytes: dword;

RBuff: array [0..255] of Char;

begin

Result := false;

Bytes := recv(FSocket, RBuff, 255, 0);

if (Bytes = 0) or (Bytes = SOCKET_ERROR) then Exit;

RBuff[3] := #0;

if lstrcmp(RBuff, '220') = 0 then Result := true else

if lstrcmp(RBuff, '250') = 0 then Result := true else

if lstrcmp(RBuff, '354') = 0 then Result := true;

end;

Как видишь, реализовать элементарный SMTP-движок (его полный исходный код, между прочим, при большом желании и некоторой удаче можешь найти на диске к журналу) проще пареной репы: знай себе отправляй команды и парсь ответы сервера запусками вышеприведенной функции.

[Http и FTP]

Испугался, что писать работу с FTP придется вручную на сокетах, разбирая протокол так же, как было сделано с SMTP? Конечно, можно поступить и так, но не обязательно. Великая и ужасная компания Microsoft хоть что-то сделала за нас, в Windows мы имеем вполне сносные наборы функций Internet API и URLMON API, которые позволят без лишних хлопот организовать обмен данными по протоколам HTTP, FTP и Gopher.

Для начала попробуем слить какой-нибудь файл по протоколу HTTP или FTP. Реализуется просто (перед использованием не забудь включить в секцию uses файл UrlMon.pas):

UrlDownloadToFile(nil, 'http://www.xcontrol.com.ua/img/xclogo.jpg', 'C:\image.jpg', 0, nil);

Такой способ скачивания файла обычно используется для обновления RAT. А для приема пакета команд сохранять файл необязательно. Более того, это даже вредно, так как будет ухудшена маскировка трояна. Лучше загрузить файл прямо в память, а для этого потребуется уже Internet API. Начинать работу с ним следует с вызова InternetOpen:

function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;

Параметры:

lpszAgent - строка символов, которая передается серверу и идентифицирует программное обеспечение, пославшее запрос. Для RAT лучше всего ставить что-нибудь типа "Internet Explore 5.x", чтобы посылаемый запрос не выделялся среди других.

dwAccessType - задает необходимые параметры доступа. Может принимать следующие значения:

INTERNET_OPEN_TYPE_DIRECT - обрабатывает все имена хостов локально. INTERNET_OPEN_TYPE_PRECONFIG - берет установки из реестра. INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY - берет установки из реестра и предотвращает запуск JScript или Internet Setup (INS) файлов.

INTERNET_OPEN_TYPE_PROXY - использование прокси-сервера. В случае неудачи использует INTERNET_OPEN_TYPE_DIRECT - LpszProxy - адрес прокси-сервера. Игнорируется только в том случае, если параметр dwAccessType отличается от INTERNET_OPEN_TYPE_PROXY.

LpszProxyBypass - список имен или IP-адресов, соединяться с которыми нужно в обход прокси-сервера. В списке допускаются шаблоны. Так же, как и предыдущий параметр, не может содержать пустой строки. Если dwAccessType отличен от INTERNET_OPEN_TYPE_PROXY, то значения игнорируются и параметр можно установить в nil.

Назад на стр. 079-108-4  Содержание  Вперед на стр. 079-108-6