Delegated NT DLL
引言 redplait 和 Adam/Hexacorn 早在2017年和2018年就分别记录了这一点,因此这并非新发现。它自2017年4月发布的RedStone 2起正式可用,redplait称其是在2017年1月发布的内部版本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\ |
表格
在我系统上包含函数指针的表出现在 .text 节中,这表明DLL在编译时合并了 .rdata 和 .text 节。因此,用于定位该表的PoC(概念验证代码)可能对您有效也可能无效,除非您将节更改为 .rdata。可以安全地假设它在某些系统上位于只读内存中,但我没有验证。它包含至少十三个位于 .data 节中的函数指针地址。根据构建版本的不同,可能更多或更少。
有趣的是,与WOW64表类似,NT委托表提供了一种在32位模式下拦截各种回调的简单方法,而无需通过内联挂钩覆盖代码。大多数旨在检测恶意挂钩的工具关注的是可执行代码,而非通常位于只读或读写内存中的函数指针的更改。
查找表的PoC(概念验证)