Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

WinPhantom — Обучающий прототип низкоуровневого кейлоггера на Windows C

Данный проект представляет собой высококачественный, модульный, снабженный подробными комментариями прототип кейлоггера на чистом языке C для операционных систем Windows 10/11. Проект создан в исключительно учебных, демонстрационных и исследовательских целях в рамках изучения системного программирования на Windows API (WinAPI) и механизмов обеспечения информационной безопасности (как со стороны атакующего, так и со стороны защищающегося).


🛠 Архитектура решения и обработка хуков в Windows

В основе работы любого кейлоггера на Windows лежит механизм хуков (Hooks) — системных перехватчиков сообщений.

Как Windows обрабатывает клавиатурные события

  1. Аппаратное прерывание: При нажатии клавиши клавиатура генерирует аппаратное прерывание. Драйвер клавиатуры (kbdclass.sys) обрабатывает его и передает событие в подсистему Win32k (win32k.sys).
  2. Низкоуровневый хук (WH_KEYBOARD_LL): На этом этапе Windows проверяет наличие зарегистрированных глобальных низкоуровневых хуков.
    • Низкоуровневые хуки обрабатываются планировщиком ОС до того, как сообщение будет отправлено в очередь сообщений конкретного потока (Thread Message Queue) целевого приложения.
    • Функция обратного вызова хука (LowLevelKeyboardProc) выполняется в контексте потока, который установил этот хук. Для этого поток обязан иметь цикл обработки сообщений (Message Loop: GetMessage/DispatchMessage), так как Windows передает события хука через внутренние сообщения Windows (WM_KEYDOWN, WM_SYSKEYDOWN).
  3. Цепочка хуков: Если зарегистрировано несколько хуков, они образуют цепочку. Каждый callback-метод должен вызывать функцию CallNextHookEx, передавая управление следующему звену. Если этого не сделать (или вернуть ненулевое значение), ввод клавиатуры будет заблокирован для всей операционной системы.
  4. Очередь сообщений приложения: После успешного прохождения цепочки хуков Windows помещает виртуальный код клавиши в очередь сообщений активного на данный момент окна.

Особенности архитектуры WinPhantom

Для обеспечения надежности, скрытности и стабильности в WinPhantom реализована двухпоточная архитектура:

  1. Главный поток (UI/Hook Thread):
    • Сразу скрывает консоль с помощью ShowWindow(GetConsoleWindow(), SW_HIDE).
    • Инициализирует критическую секцию для синхронизации буфера.
    • Устанавливает низкоуровневый клавиатурный хук SetWindowsHookEx.
    • Входит в бесконечный цикл обработки сообщений GetMessage(). Это гарантирует, что хук будет исправно получать события от ОС.
  2. Сетевой поток (Worker Thread):
    • Выполняется параллельно.
    • Инициализирует библиотеку Winsock2 и входит в цикл автоматического подключения/переподключения (Reconnect Loop) к серверу по TCP (порт 4444).
    • Мониторит состояние разделяемого буфера SyncBuffer.
    • Извлекает данные и выполняет отправку пачками по сети, предотвращая блокировку потока хука во время сетевых задержек (если бы мы отправляли данные прямо в колбэке хука, любой лаг сети приводил бы к полному зависанию ввода Windows).

📦 Инструкция по сборке

Для компиляции программы вам потребуется компилятор MinGW-w64 (gcc) или MSVC.

Вариант 1. Сборка через MinGW-w64 (gcc) в консоли

Используйте следующие флаги линковки для сборки:

  • -lws2_32 — библиотека Winsock2 (сетевое взаимодействие).
  • -luser32 — библиотека WinAPI функций пользовательского интерфейса (перехват окон, хуки).
  • -mwindows — флаг сборки GUI-приложения (скрывает консоль Windows при старте, избавляя от мигания окна).
gcc -O2 -Wall -std=c99 winphantom.c -o winphantom.exe -lws2_32 -luser32 -mwindows

Вариант 2. Сборка через MSVC (Developer Command Prompt)

cl.exe /O2 /TC /DUNICODE /D_UNICODE winphantom.c /link ws2_32.lib user32.lib kernel32.lib /SUBSYSTEM:WINDOWS

🌐 Тестирование: Подготовка сервера и запуск

Поведение кейлоггера проверяется в связке с сервером-приемником. В качестве простейшего сервера можно использовать утилиту Netcat (или ее аналог ncat).

Шаг 1. Запуск сервера Netcat (на стороне VPS или локальной тестовой машины)

На порту 4444 запустите прослушиватель (listener):

nc -lvnp 4444

(Флаги: -l — listen, -v — verbose, -n — без резолва DNS, -p 4444 — порт 4444)

Шаг 2. Запуск WinPhantom

Запустите скомпилированный файл winphantom.exe на целевой (тестовой) машине.

  • Программа запустится в фоновом режиме. Окно консоли не отобразится.
  • В Диспетчере задач процесс будет отображаться как winphantom.exe.

Шаг 3. Имитация ввода и получение данных

  1. Откройте Блокнот (Notepad), браузер или любое другое приложение.
  2. Введите любой текст (например, на русском и английском языках с использованием клавиш Shift, Backspace, Enter).
  3. На стороне Netcat-сервера вы увидите плавный вывод:
    • Текст отправляется пачками по 32 символа для снижения нагрузки.
    • Нажатие на клавишу Enter мгновенно сбрасывает накопленный буфер ([ENTER]), перенося строку на сервере.
    • Раскладки клавиатуры (RU/EN) корректно транслируются благодаря системному вызову ToUnicodeEx.

🛡 Обнаружение и методы защиты от кейлоггинга

Понимание механизмов работы кейлоггеров критически важно для построения систем защиты. Вот как обнаружить подобную активность в системе Windows и защититься от неё:

1. Сигнатурный анализ и Антивирусы (AV/EDR)

  • Использование нативных WinAPI для хуков (SetWindowsHookEx) без обфускации импорта — классический триггер для систем статического анализа и антивирусов. Большинство современных EDR мгновенно детектируют такие файлы как подозрительные (Heur.KeyboardHooker).

2. Мониторинг цепочки хуков (Hook Chain Monitoring)

  • Анализ хуков в ОС: С помощью специализированных утилит (например, GMER, Process Hacker / System Informer) или отладчиков ядра можно просмотреть список активных глобальных хуков в системе. Наличие хука типа WH_KEYBOARD_LL, зарегистрированного на неизвестную DLL или неподписанный .exe файл, — явный признак компрометации.

3. Поведенческий анализ (Behavioral Monitoring)

  • Сетевая активность: Легитимные текстовые редакторы или фоновые процессы редко устанавливают постоянные TCP-соединения с неизвестными внешними IP-адресами по нестандартным портам вроде 4444. Мониторинг сетевых соединений с помощью netstat -ano или Sysmon (Event ID 3: Network Connection) легко обнаруживает подозрительный трафик.
  • Изоляция окон (UAC и UIPI): В Windows реализован механизм User Interface Privilege Isolation (UIPI). Процесс с низким уровнем прав (Low Integrity) не может перехватывать ввод процессов с более высоким уровнем прав (High/System Integrity). Запуск чувствительных приложений (например, менеджеров паролей) от имени администратора частично защищает их ввод от обычных пользовательских кейлоггеров.

4. Противодействие и защита

  • Использование Двухфакторной аутентификации (2FA): Минимизирует ущерб от кражи статических паролей кейлоггерами.
  • Экранные (виртуальные) клавиатуры: Ввод конфиденциальных данных с помощью мыши по виртуальной клавиатуре обходит стандартный перехват нажатий физических клавиш.
  • Анти-кейлоггеры: Специализированный софт, который искусственно "зашумляет" ввод, отправляя случайные нажатия клавиш в систему, или перехватывает вызовы API установки хуков, блокируя их.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages