实验Windows对象初始化器 - 参见PG合规免责声明* - 逆向工程
概述
在本文中,我想介绍一种有趣的方法,通过实验性替代手段实现类似于Windows对象回调功能的效果。众所周知,Windows系统上的反恶意软件、反作弊和通用监控工具经常使用这些回调。然而,它们的使用仅限于拥有签名模块的实体,而且这些回调存在被篡改的风险。
构建块
Windows内核中的对象是操作系统运行和记录的基础。我们将以一个熟悉的对象为例:进程(Process)。
进程创建与通知
Windows中的进程通知回调是系统监控和安全的基石。这些回调主要由反恶意软件和反作弊系统使用,提供关于进程创建和终止事件的实时通知。
函数指针重绑定
我们通过修改对象类型初始化器中的函数指针来实现进程通知回调,完全避开传统的对象回调列表。以下是关键实现步骤:
- 定位ObTypeIndexTable表
- 枚举所有对象类型,找到PsProcessType
- 替换原始OpenProcedure指针为我们的处理函数
|
|
利用SecurityProcedure实现反调试
通过挂钩DebugObject类型的安全过程,我们可以实现系统级反调试:
|
|
实现结果
- 成功监控所有新创建的进程
- 有效阻止x64dbg和WinDbg等调试器附加
- 无需签名驱动模块即可实现
注意事项
- 该方法在Windows 11 23H2上测试通过
- 修改受PatchGuard保护的结构可能导致系统崩溃
- 建议仅在PG禁用或短时间内使用此技术
完整对象类型和过程转储
文章最后提供了完整的Windows内核对象类型及其相关过程的转储信息,包括:
- 类型名称
- 打开/关闭/删除过程
- 安全过程
- 解析过程等
这项技术展示了Windows内核对象系统的灵活性,为系统监控和安全研究提供了新的思路。