|
Клавиатурная снифалка на 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; } |