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

Управление RAT

Ms-Rem

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


[мыло]

Работа с почтой - важная часть многих RAT, поэтому ее реализации нужно уделить особое внимание. К сожалению, по этой части API предоставит мало что. Конечно, есть MAPI, но отправка почты через него будет работать только тогда, когда в системе стоит совместимый почтовый клиент (по умолчанию Outlook), плюс соответственно настроенный. Я уже не говорю о том, что MAPI совершенно непригоден для незаметной посылки данных, в том числе потому, что письма уходят с ящика пользователя. Лучше оставить этот метод mail-червякам, которым важна возможность доступа к адресной книге пользователя, а для себя реализовать нормальный личный SMTP-движок. Это может сначала показаться ужасным, но не так страшен черт, как его малюют. При отправке почты по протоколу SMTP клиент передает серверу самые обычные текстовые команды, а сервер выдает на них ответы, подтверждающие успешность выполнения или сообщающие об ошибках. Для того чтобы послать письмо, не нужно реализовывать весь протокол - достаточно передать всего лишь несколько не самых сложных команд. Сейчас смотри на то, насколько просто отправить письмо вручную через телнет с сервера mail.ru (telnet smtp.mail.ru 25):

220 mail.ru ESMTP Fri, 03 Jun 2005 04:38:29 +0400

HELO mail.ru

250 mx3.mail.ru Hello mail.ru [81.2.56.108]

MAIL FROM: gena@mail.ru

250 OK

RCPT TO: Ms-Rem@yandex.ru

250 Accepted

DATA

354 Enter message, ending with "." on a line by itself

Text Pisma

.

250 OK id=1De0Dd-000CAt-00

QUIT

221 mx3.mail.ru closing connection

В начале мы здороваемся с сервером командой HELO (вместе с которой передаем SMTP-хост) и указываем адреса отправителя и получателя письма командами MAIL FROM и RCPT TO соответственно. Потом мы говорим DATA и диктуем само письмо, содержащее ту или иную полезную информацию. Его конец обозначится строкой, состоящей из одной точки. Ну а вдоволь наобщавшись с электронным другом, можно скомандовать QUIT и отсоединиться от сервера.

Это простое описание протокола не учитывает SMTP-авторизацию, которую могут потребовать некоторые серверы, но писать ее не будем, так как такие серверы непригодны для RAT (не все так плохо: они не требуют авторизации, если отправка осуществляется на локальный адрес – прим. Горлума).

После передачи каждой команды сервер возвращает строку с кодом и текстовым описанием результата ее выполнения. От нас требуется получить эту строку и проверить код результата. Успешными будем считать коды 220, 250 и 354.

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

Каждую команду в программе будем формировать, а после этого отправлять следующим образом:

// Str - это буфер для команд

lstrcpy(Str, PChar('HELO ' + Smtp + #13#10#0));

send(FSocket, Str, lstrlen(Str), 0);

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