patchGuard v2

本文详细探讨了patchGuard v2中涉及的DPC钩子技术,内容涵盖60多页,旨在深入理解PG3,并通过调试实践来加强理论知识。
摘要由CSDN通过智能技术生成
算是对http://www.uninformed.org/?v=6&a=1&t=sumry 的一个中文摘要,理解还不一定全对


PG2一些改动:


cmp cs:KdDebuggerNotPresent, r12b
jnz short continue_initialization_1
infinite_loop_1:
jmp short infinite_loop_1
sti


更改KdDebuggerNotPresent比较容易,索性直接死循环掉


dr7清零






初始化完毕之后会把这些初始化代码清零


此外不变的是对于自己的数据还是使用了随即内存大小、pool tag,随即密钥等等加密。利用DPC来触发异常,不过可供选择的DPC增加到了十个。




方法一


1.patch guard2也是利用DPC执行一次检查,这些DPC routine都是正常dpc历程,但是传入的DPC context并不是一个有效指针。


所以会转到异常处理_C_specific_handler,patchguard检测函数将在这个异常里无限循环检测patch


bypass的话就可以hook _C_specific_handler这个导出函数


hook之后怎么正常返回到dpc routine的调用位置继续执行是个问题


x86的话会比较麻烦,利用X64的seh表是轻而易举的,调用RtlVirtualUnwind即可


2.这个hook只执行一次,定时器只触发一次,然后就走到异常处理之后无限循环检查


3.接下来的问题是如何过滤异常时有patchguard故意抛出的


内核代码经常会probe一些地址,这有可能引发常规的access violation,但一般probe的都是环3地址,PatchGuard则例外


PG则是引用了non-canonical addresses,处理器抛出这个异常的时候他的exception handler总是-1。


一些写的不规范的驱动可能也会出发这个异常,作者认为可以无视,我想判断也很容易吧,反正有上下文。


方法二


修改所有可能用到的DPC的异常处理注册函数


这需要定位是哪些DPC


DPC该有如下特征


1. Each DPC routine has one exception/unwind-marked registration
以下内容假设你是以管理员权限运行WIN7. ——>>没有UAC提示,没有“以管理员身份运行”提示,或其他类似的提示…<<—— 如何使用: 解压存档的内容到任意位置...按顺序执行: 文件名称 说明: ---------------------------------------------------------------------------------------------- 1.cmd (批处理文件,为你创建一个新的BCD项) 2.exe (字节补丁,使用dUP2...修改复制NTOSKRNL和WINLOAD) 3.cmd (批处理文件,修改后的文件会拷贝到\Windows\System32) checksum.exe (这可以解决PE校验,所以在启动时不会收到0xC0000221的错误。) ---------------------------------------------------------------------------------------------- 按顺序运行1,2,3即可。然后可以安全地删除这些文件。不需要运行checksum.exe,它已经在3.cmd中运行。 重新启动计算机,选择“PatchGuard Disabled v2”启动项来启动系统... 这将允许加载未签名的X64位驱动,挂钩NTOSKRNL,进程隐藏,等 如果有任何建议,或者问题?通过论坛与我联系! 如何卸载: ---------------------------------------------------------------------------------------------- 以管理员权限打开CMD.EXE并输入: bcdedit /delete {46595952-454E-4F50-4747-554944FEEEEE} 然后在\Windows\System32\下删除:ntkrnlmp.exe 和 osload.exe ---------------------------------------------------------------------------------------------- 若不想禁用 WIN7 X64内核保护/驱动签名,开机时选择“Windows 7”启动项即可。 永远记住这一点:这个补丁是为逆向工程和64位内核模式的探索。 这不是为最终用户…如果你不理解“是什么”或“为什么”——请不要使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值