Egyan07/Win32-KeyloggerV1.0.1
GitHub: Egyan07/Win32-KeyloggerV1.0.1
用于教学演示的 Windows 键盘记录器,展示低级键盘挂钩、注册表持久化等 Win32 API 核心技术。
Stars: 1 | Forks: 0
# Win32 键盘记录器 — 教学演示
**由 Egyan 编写**
一个使用 Win32 API 编写的 C 语言 Windows 键盘记录器,作为中级键盘挂钩、注册表持久化以及 Win32 编程概念的实践研究。
## 本项目演示的内容
本项目是几个核心 Windows 内部机制和 Win32 API 概念的实践示例:
| 概念 | API / 技术 |
|---|---|
| 系统级键盘挂钩 | `SetWindowsHookEx(WH_KEYBOARD_LL)` |
| 消息泵 | `GetMessage` / `DispatchMessage` |
| 活动窗口检测 | `GetForegroundWindow` + `GetWindowTextA` |
| 虚拟键码映射 | 自定义 `vk_to_string()` |
| 注册表持久化 | 通过 `RegSetValueExA` 写入 `HKCU\Run` |
| 隐蔽编译标志 | `-mwindows` (抑制控制台窗口) |
| 日志轮转 | `time()` + `localtime()` |
这些正是 Windows 内部机制课程、OSCP 实验室和恶意软件分析培训中研究的相同原语。
## 功能特性
- 通过 `SetWindowsHookEx(WH_KEYBOARD_LL)` 实现低级键盘挂钩
- 活动窗口捕获 — 记录你正在哪个应用程序中输入
- 每次窗口切换时的时间戳
- 每日日志轮转 — 每天生成新文件 (`keylog_YYYY-MM-DD.txt`)
- 完整按键映射 — A-Z, 0-9, 符号, 特殊按键标记在 `[方括号]` 中
- 注册表持久化 — 登录时自动启动 (HKCU, 无需管理员权限)
- 可选隐蔽构建 — 无控制台窗口
## 构建说明
### 选项 A — 在 Kali Linux 上交叉编译 (推荐)
```
# 安装 Windows cross-compiler
sudo apt update && sudo apt install mingw-w64 -y
# 编译
make
# 或手动
x86_64-w64-mingw32-gcc -Wall -O2 keylogger_demo.c -o keylogger_demo.exe -mwindows -luser32 -ladvapi32
```
通过 USB 或共享文件夹将 `keylogger_demo.exe` 传输到你的 Windows 测试机。
### 选项 B — 在 Windows 上原生编译
安装 [WinLibs GCC](https://winlibs.com),将其添加到 PATH,然后:
```
gcc -Wall -O2 keylogger_demo.c -o keylogger_demo.exe -mwindows -luser32 -ladvapi32
```
### 调试构建 (控制台窗口可见)
用于在测试期间确认挂钩是否正在运行:
```
# Kali
make debug
# Windows
gcc -Wall -g keylogger_demo.c -o keylogger_demo_debug.exe -luser32 -ladvapi32
```
## 运行程序
```
keylogger_demo.exe
```
在发布构建中不会出现控制台窗口。日志写入位置:
```
C:\Users\Public\logs\keylog_YYYY-MM-DD.txt
```
## 示例日志输出
```
════════════════════════════════
Session started: 2025-01-15 09:32:11
════════════════════════════════
[09:32:15] ── Window: Google Chrome ──
hello world[ENTER]
[09:32:44] ── Window: Notepad - untitled ──
some notes here[ENTER]
```
## 完全移除
```
:: Remove from startup registry
reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "keylogger_demo" /f
:: Delete logs
rmdir /s /q C:\Users\Public\logs
:: Delete the binary
del keylogger_demo.exe
```
## 工作原理
### 键盘挂钩
`SetWindowsHookEx(WH_KEYBOARD_LL)` 安装一个系统级挂钩。无论哪个进程处于焦点状态,Windows 都会为系统上的每个按键事件调用 `KeyboardProc`。消息泵 (`GetMessage` 循环) 保持挂钩处于活动状态。
### 窗口检测
在每次击键时,`GetForegroundWindow()` + `GetWindowTextA()` 会检查活动窗口是否已更改。如果已更改,则会向日志中写入一个新的标题头,提供关于在何处输入内容的上下文。
### 按键映射
虚拟键码 (VK_*) 通过 `vk_to_string()` 转换为可读字符串。使用 `GetAsyncKeyState` 和 `GetKeyState` 检查 Shift 和 CapsLock 状态,以进行正确的字符映射。
### 注册表持久化
`RegSetValueExA` 将完整的 exe 路径写入 `HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run`。此键在每次登录时由 Windows 读取 — 无需管理员权限 (HKCU 对比 HKLM)。
### 日志轮转
每次击键时都会调用 `open_log_for_today()`。它将今天的日期字符串与当前打开文件的日期进行比较,如果已过午夜则打开一个新文件。
## 项目结构
```
win32-keylogger/
├── keylogger_demo.c # Main source
├── Makefile # Cross-compile on Kali
└── README.md
```
## 防御要点
了解其工作原理有助于检测和防御:
- `WH_KEYBOARD_LL` 挂钩是可检测的 — 安全工具通过 `EnumWindows` 和挂钩链扫描具有全局挂钩的进程
- `HKCU\Run` 注册表键是 AV/EDR 工具查找持久化的首要位置之一
- `C:\Users\Public\` 中的日志文件对所有人都可读 — 这对于真正的攻击者来说是一个糟糕的选择,但在实验室环境中显而易见
- 伪装成系统组件的进程名是常见的红队技术 — 了解这一点有助于防御者构建更好的白名单
## 免责声明
本项目**仅用于教育目的**。其构建旨在研究 Win32 API 内部机制、键盘挂钩原理和 Windows 持久化机制 — 这些概念同样涵盖在道德黑客认证 (OSCP, CEH) 和恶意软件分析课程中。
**请勿在你未拥有或未获得明确书面授权测试的任何系统上使用此程序。**
## 许可证
MIT 许可证 — 可免费用于学习和研究。
*由 Egyan 构建 | 网络安全与 Windows 内部机制*
标签:EDR绕过, Golang, Linux, MinGW, NetHunter, OSCP备考, WH_KEYBOARD_LL, Win32 API, Windows内核, 中高交互蜜罐, 后渗透, 后门开发, 子域名枚举, 安全编程, 客户端加密, 底层钩子, 恶意软件开发, 木马技术, 注册表自启动, 白帽子, 系统安全, 跨平台编译, 键盘记录器, 高交互蜜罐