Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #60, НОЯБРЬ 2005 г.

Виртуальный шпион

Tony (porco@argentina.com)

Спецвыпуск: Хакер, номер #060, стр. 060-058-4


#pragma comment(linker,"/SECTION:.Shared,RWS")

Библиотека экспортирует два метода, которые устанавливают и убирают хук. Перед началом работы твое управляющее приложение должно вызвать метод InstallHook(), которому передаются в качестве аргументов дескриптор управляющего окна (HWND) и код сообщения, которое будет приходить окну от DLL в качестве перехваченного сообщения.

Обрати внимание на параметр KeyboardMsgProc - это имя внутренней функции библиотеки, которая выбирает из всех приходящих сообщений сообщения от клавиатуры и транслирует их управляющему приложению. Вот ее код:

//Если это событие нажатия кнопок клавиатуры

if ( (lParam) && (pMsg->gt; message == WM_CHAR) && (wParam == PM_REMOVE) )

{

//То посылаем сообщение управляющей программе

PostMessage (gParentWnd, gInterceptMessage, pMsg->gt; wParam, 0 );

}

Фактически, единственное, что нужно сделать, - это создать свое приложение со скрытым окном, вызвать метод InstallHook() и стричь купоны, в смысле, вести клавиатурные логи. В качестве резюме остается добавить, что если тупо записывать все нажатия кнопок клавиатуры, то за полчасика работы пользователя в этом логе сам черт ногу сломит. Поэтому имеет смысл либо писать в лог информацию о том, в каком именно приложении была нажата та или иная кнопка, либо просто создать несколько логов, по одному для каждого приложения, в которые и писать собранную информацию. Узнать о том, какое именно окно активно в данный момент (то есть куда пользователь вводит свою информацию), можно с помощью функции GetForegroundWindow(), а заголовок окна можно получить, вызвав метод GetWindowText() в контексте полученного дескриптора окна. Все вышесказанное иллюстрируется примерами SpyHook и SpyHookApp.

История похождений ишака

Все похождения пользователя по злачным закоулкам интернета записываются в специальные логи, которые находятся в каталоге Documents and Settings\User\Local Settings\History\History.IE5\.

В этом каталоге ишак создает подкаталоги, в именах которых "зашит" временной период, за который пишется лог. Например, в каталоге с именем MSHist012005090620050907 находится лог, записанный в период с шестого по седьмое сентября этого года. Естественно, в каталоге с максимальной датой создания будет находиться самый последний лог. Как я уже писал, на этот файл можно натравить одну из утилит парсинга и на выходе получить желанную информацию в удобном виде.

Возникает вопрос: "А как же незаметно доставить эти файлы себе?" В первую очередь, сжать архиватором файлы, которые требуется переслать. В примере SimplePack показан способ сжатия файлов с помощью библиотеки zlib. Первый параметр командной строки для SimplePack.exe - это имя сжимаемого файла, второй – имя архива, куда будет положен указанный файл. Далее необходимо передать сжатый файл с использованием Сети к себе на компьютер, где в спокойной обстановке можно продолжить анализ данных. Конечно, можно написать свой протокол и реализовать его с помощью сокетов, но не факт, что межсетевой экран пропустит твои пакеты. Кроме того, зачем изобретать велосипед, если на помощь можно призвать банальную электронную почту? Современные почтовые клиенты поддерживают два программных интерфейса: престарелый MAPI (Messaging Application Programming Interface) и более молодой CDO (Collaboration Data Objects). И тот, и другой позволяют отсылать сообщения через инсталлированный в системе почтовый клиент. Оба интерфейса достаточно хорошо документированы, но имеют несколько общих недостатков: не факт, что установленный почтовый клиент поддерживает выбранный тобой интерфейс, в логах почтовой программы останутся записи о твоих письмах, и, кроме того, при работе с этими интерфейсами необходимо знать имя пользователя и пароль для доступа к почте. Учитывая то, что наша задача требует максимальной скрытности поведения программы, этот вариант не подходит. Но не стоит расстраиваться раньше времени. Мы можем общаться с любым SMTP-сервером по протоколу SMTP, который, как известно, не требует аутентификации. Электронную почту можно отправлять даже с помощью обычного клиента telnet. В примере temail (взят с сайта www.codeguru.com) реализована отправка писем с вложениями по протоколу SMTP.

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