coercing/WinKnlHook
GitHub: coercing/WinKnlHook
Windows x64 内核态驱动,提供零附加物理内存读写、CR3 解密、动态导出解析、内核鼠标模拟和 HWID 伪造等底层能力,用于安全研究与内核机制分析。
Stars: 0 | Forks: 0
# WinKnlHook-Driver
一个运行于 Ring 0 的 64 位 Windows 10/11 内核态驱动程序,专为底层内存操作、物理内存转换、特征码扫描和内核态鼠标输入模拟而设计。
## 功能
* **零附加(Zero-Attachment)RWX 引擎**:通过自定义的页表遍历器(`PML4 -> PDPT -> PD -> PT`)将虚拟地址转换为物理地址,并在不附加到目标进程的情况下执行物理内存读写操作。
* **Directory Base (CR3) 解密**:利用特征码扫描动态定位 PFN 数据库(`MmPfnDatabase`)以解析目标进程的 directory base,绕过 CR3 混淆/保护。
* **动态导出解析器**:通过扫描 PE 导出目录并遍历 x64 KPCR 栈(`gs:[18h]`)动态解析 `ntoskrnl.exe` 例程,消除静态导入。
* **内核鼠标模拟**:遍历 `\Driver\MouClass` 和 `\Driver\MouHID` 设备栈,通过汇编包装器在 `DISPATCH_LEVEL` 级别直接调用 `MouseClassServiceCallback`。
* **特征码扫描器**:通过访问验证(`MmIsAddressValid`)和结构化异常处理(`__try/__except`)安全扫描目标进程地址空间。
* **HWID Spoofer**:采用注册表回调(`CmRegisterCallback`)和 IRP 分发挂钩来欺骗磁盘序列号、SMBIOS、UUID 和 MAC 地址。
## 快速设置
### 1. 编译
1. 在 Visual Studio 中以 **Administrator** 身份打开 [RWH.sln](RWH.sln)。
2. 使用 Windows Driver Kit (WDK) 在 **Release | x64** 下构建解决方案以生成 `RWH.sys`。
### 2. 加载(手动映射)
由于该驱动程序设计有无参数入口点(`NTSTATUS DriverEntry()`)并使用动态内核基址解析,因此必须使用 **manual mapper**(例如 [kdmapper](https://github.com/TheCruZ/kdmapper))进行加载,而不是通过标准服务注册:
1. 下载或编译一个可靠的 manual mapper(例如 `kdmapper.exe`)。
2. 禁用 Windows Defender 或任何防病毒软件(因为它们会阻止 mapper 所使用易受攻击的驱动程序漏洞利用)。
3. 打开提升权限的命令提示符(以 Administrator 身份运行 `cmd`)并执行:
kdmapper.exe RWH.sys
*注意:Manual mapper 利用易受攻击的签名驱动程序将你未签名的驱动程序映射到内核空间并执行其入口点,从而绕过驱动程序签名强制执行 (DSE),无需启用测试签名模式。*
## IOCTL 快速参考
设备链接:`\\.\WinKnlHook`
| 请求 | IOCTL | 缓冲区结构 | 描述 |
| :--- | :--- | :--- | :--- |
| **获取基址** | `0x2A2` | `base_new { INT32 process_id; ULONGLONG BaseAddress; }` | 获取进程 section 基址 |
| **解密 CR3** | `0x2A3` | `dtb { uint64_t BaseAddress; uint64_t outaddress; }` | 解密进程的 Directory Base |
| **读取内存** | `0x2A4` | `read { ULONGLONG address; ULONGLONG buffer; ULONGLONG size; }` | 物理读取进程内存 |
| **写入内存** | `0x2A5` | `write { ULONGLONG address; ULONGLONG buffer; ULONGLONG size; }` | 物理写入进程内存 |
| **特征码扫描** | `0x2A6` | `pattern_scan { ... }` *(查看 IoCodes.h)* | 运行安全特征码扫描 |
| **移动鼠标** | `0x3A1` | `movemouse { long x; long y; unsigned short button_flags; }` | 模拟直接鼠标移动 |
## 已知稳定性问题与严重 Bug
如果部署此驱动程序,请注意以下严重的内核级缺陷:
1. **[严重] 鼠标栈越界读取** ([MouseMove.cpp:L60-71](Modules/MouseMove/MouseMove.cpp#L60-L71)):
设备扩展大小的计算除以了 `4` 而不是 `8`。这导致回调遍历循环 100% 超出缓冲区边界,从而引发随机页面错误和 **蓝屏 (BSOD)**。
2. **[严重] EPROCESS 引用泄漏** ([Base.cpp:L34-41](Modules/Memory/BaseAddress/Base.cpp#L34-L41)):
如果获取进程基址失败,驱动程序会在未调用 `ObfDereferenceObject` 的情况下退出。这会导致进程对象在内核内存中被永久泄漏。
3. **[高] PML4 缓存竞态条件** ([RWX.cpp:L56-63](Modules/MemoryAccess/RWX/RWX.cpp#L56-L63)):
全局翻译缓存 `cached_pml4e` 没有线程同步机制。并发的用户态 IOCTL 读/写会破坏缓存,导致错误的内存映射和系统崩溃。
4. **[中] 死代码与骨架代码**:
驱动隐藏例程 `DestroyDriverInformation` 从未被调用。此外,整个 Easy Anti-Cheat (EAC) 绕过模块(`Modules/EAC/`)均由不起任何作用的空骨架函数组成。
## 免责声明
本软件仅出于教育、安全研究和测试目的提供。此代码库的某些部分是在人工智能 (AI) 模型的协助下修改、更新或开发的。在内核模式下运行带有固有的风险,包括系统不稳定性和安全漏洞。对于在生产或不受信任的环境中部署此驱动程序所导致的任何误用、系统损坏或出现的问题,作者和贡献者均不承担任何责任。
标签:UML, Web报告查看器, Windows驱动开发, 云资产清单, 内存读写, 内核级, 字典生成, 游戏作弊工具, 硬件ID篡改, 逆向工程, 鼠标模拟