Данный проект представляет собой высококачественный, модульный, снабженный подробными комментариями прототип кейлоггера на чистом языке C для операционных систем Windows 10/11. Проект создан в исключительно учебных, демонстрационных и исследовательских целях в рамках изучения системного программирования на Windows API (WinAPI) и механизмов обеспечения информационной безопасности (как со стороны атакующего, так и со стороны защищающегося).
В основе работы любого кейлоггера на Windows лежит механизм хуков (Hooks) — системных перехватчиков сообщений.
- Аппаратное прерывание: При нажатии клавиши клавиатура генерирует аппаратное прерывание. Драйвер клавиатуры (
kbdclass.sys) обрабатывает его и передает событие в подсистему Win32k (win32k.sys). - Низкоуровневый хук (WH_KEYBOARD_LL): На этом этапе Windows проверяет наличие зарегистрированных глобальных низкоуровневых хуков.
- Низкоуровневые хуки обрабатываются планировщиком ОС до того, как сообщение будет отправлено в очередь сообщений конкретного потока (Thread Message Queue) целевого приложения.
- Функция обратного вызова хука (
LowLevelKeyboardProc) выполняется в контексте потока, который установил этот хук. Для этого поток обязан иметь цикл обработки сообщений (Message Loop:GetMessage/DispatchMessage), так как Windows передает события хука через внутренние сообщения Windows (WM_KEYDOWN,WM_SYSKEYDOWN).
- Цепочка хуков: Если зарегистрировано несколько хуков, они образуют цепочку. Каждый callback-метод должен вызывать функцию
CallNextHookEx, передавая управление следующему звену. Если этого не сделать (или вернуть ненулевое значение), ввод клавиатуры будет заблокирован для всей операционной системы. - Очередь сообщений приложения: После успешного прохождения цепочки хуков Windows помещает виртуальный код клавиши в очередь сообщений активного на данный момент окна.
Для обеспечения надежности, скрытности и стабильности в WinPhantom реализована двухпоточная архитектура:
- Главный поток (UI/Hook Thread):
- Сразу скрывает консоль с помощью
ShowWindow(GetConsoleWindow(), SW_HIDE). - Инициализирует критическую секцию для синхронизации буфера.
- Устанавливает низкоуровневый клавиатурный хук
SetWindowsHookEx. - Входит в бесконечный цикл обработки сообщений
GetMessage(). Это гарантирует, что хук будет исправно получать события от ОС.
- Сразу скрывает консоль с помощью
- Сетевой поток (Worker Thread):
- Выполняется параллельно.
- Инициализирует библиотеку Winsock2 и входит в цикл автоматического подключения/переподключения (Reconnect Loop) к серверу по TCP (порт 4444).
- Мониторит состояние разделяемого буфера
SyncBuffer. - Извлекает данные и выполняет отправку пачками по сети, предотвращая блокировку потока хука во время сетевых задержек (если бы мы отправляли данные прямо в колбэке хука, любой лаг сети приводил бы к полному зависанию ввода Windows).
Для компиляции программы вам потребуется компилятор MinGW-w64 (gcc) или MSVC.
Используйте следующие флаги линковки для сборки:
-lws2_32— библиотека Winsock2 (сетевое взаимодействие).-luser32— библиотека WinAPI функций пользовательского интерфейса (перехват окон, хуки).-mwindows— флаг сборки GUI-приложения (скрывает консоль Windows при старте, избавляя от мигания окна).
gcc -O2 -Wall -std=c99 winphantom.c -o winphantom.exe -lws2_32 -luser32 -mwindowscl.exe /O2 /TC /DUNICODE /D_UNICODE winphantom.c /link ws2_32.lib user32.lib kernel32.lib /SUBSYSTEM:WINDOWSПоведение кейлоггера проверяется в связке с сервером-приемником. В качестве простейшего сервера можно использовать утилиту Netcat (или ее аналог ncat).
На порту 4444 запустите прослушиватель (listener):
nc -lvnp 4444(Флаги: -l — listen, -v — verbose, -n — без резолва DNS, -p 4444 — порт 4444)
Запустите скомпилированный файл winphantom.exe на целевой (тестовой) машине.
- Программа запустится в фоновом режиме. Окно консоли не отобразится.
- В Диспетчере задач процесс будет отображаться как
winphantom.exe.
- Откройте Блокнот (Notepad), браузер или любое другое приложение.
- Введите любой текст (например, на русском и английском языках с использованием клавиш Shift, Backspace, Enter).
- На стороне Netcat-сервера вы увидите плавный вывод:
- Текст отправляется пачками по 32 символа для снижения нагрузки.
- Нажатие на клавишу
Enterмгновенно сбрасывает накопленный буфер ([ENTER]), перенося строку на сервере. - Раскладки клавиатуры (RU/EN) корректно транслируются благодаря системному вызову
ToUnicodeEx.
Понимание механизмов работы кейлоггеров критически важно для построения систем защиты. Вот как обнаружить подобную активность в системе Windows и защититься от неё:
- Использование нативных WinAPI для хуков (
SetWindowsHookEx) без обфускации импорта — классический триггер для систем статического анализа и антивирусов. Большинство современных EDR мгновенно детектируют такие файлы как подозрительные (Heur.KeyboardHooker).
- Анализ хуков в ОС: С помощью специализированных утилит (например, GMER, Process Hacker / System Informer) или отладчиков ядра можно просмотреть список активных глобальных хуков в системе. Наличие хука типа
WH_KEYBOARD_LL, зарегистрированного на неизвестную DLL или неподписанный.exeфайл, — явный признак компрометации.
- Сетевая активность: Легитимные текстовые редакторы или фоновые процессы редко устанавливают постоянные TCP-соединения с неизвестными внешними IP-адресами по нестандартным портам вроде
4444. Мониторинг сетевых соединений с помощьюnetstat -anoили Sysmon (Event ID 3: Network Connection) легко обнаруживает подозрительный трафик. - Изоляция окон (UAC и UIPI): В Windows реализован механизм User Interface Privilege Isolation (UIPI). Процесс с низким уровнем прав (Low Integrity) не может перехватывать ввод процессов с более высоким уровнем прав (High/System Integrity). Запуск чувствительных приложений (например, менеджеров паролей) от имени администратора частично защищает их ввод от обычных пользовательских кейлоггеров.
- Использование Двухфакторной аутентификации (2FA): Минимизирует ущерб от кражи статических паролей кейлоггерами.
- Экранные (виртуальные) клавиатуры: Ввод конфиденциальных данных с помощью мыши по виртуальной клавиатуре обходит стандартный перехват нажатий физических клавиш.
- Анти-кейлоггеры: Специализированный софт, который искусственно "зашумляет" ввод, отправляя случайные нажатия клавиш в систему, или перехватывает вызовы API установки хуков, блокируя их.