委托NT DLL
引言 redplait和Adam/Hexacorn分别在2017年和2018年已经记录了此内容,因此这并非一项新发现。该功能自2017年4月发布的RedStone 2(Windows 10创意者更新)起正式可用。redplait指出,它是在2017年1月发布的Insider build 15007中引入的。它与AMD64版本NTDLL中存在的WOW64函数表有相似之处。
参考资料
- DelegatedNtdll
- Beyond good ol’ Run key, Part 87
观察
使用启用了调试符号支持的IDA Pro或Ghidra,可以在ntdll!_LdrpDelegatedNtdllExports找到此表。
DLL本身可以在以下路径之一中找到:
| 架构 | 路径 |
|---|---|
| x86 | C:\Windows\System32\ |
| AMD64 | C:\Windows\SysWOW64\ |
| ARM64 | C:\Windows\SysWOW64\ |
函数表
在我系统上的表包含至少十三个位于.data节中的函数指针地址。根据构建版本的不同,可能包含更多或更少的指针。
有趣的是,与WOW64表类似,NT委托表提供了一种在32位模式下拦截各种回调的简单方法,而无需通过内联挂钩(inline hooking)覆盖代码。大多数旨在检测恶意钩子的工具关注的是可执行代码,而不是对通常位于只读或读写内存中的函数指针的更改。
定位函数表的原理验证代码