小子不忘记 发表于 2023-11-9 15:11:47

分享一下win10 RS5的PatchGuard部分攻击方法


系统环境是win10 1809 17763.437

我没有研究怎么解密上下文,我主要是想办法得到Pg蓝屏时候的堆栈,然后根据对应的方法找对应的攻击措施。

对于dpc例程来说,最有帮助来判断是不是pg的dpc就是DefferContext,很多资料都提了。

首先我做的是hook KiDispatchException,一方面是能够更快的触发PG,另一方面是在PG接手异常前,DbgBreakPoint(),让调试器接管,这样就可以得到PG调用的堆栈。在KiDispatchException中我们可以判断rip,rbx,rdx。大多数通过异常触发DPC都是触发KiCustomRecurseRoutinex这里,但是不管你是把rip跳过那条异常指令还是给一个合法的寄存器让他解引用来绕过异常,后面都还是会出另一个异常,而且有时候会连续验证2次。


PatchGuard会在_except块里恢复寄存器,然后再执行这个函数正常的功能。也就是说没有执行他的except块后面正常执行的时候还是会蓝屏。

下面是其中一次的堆栈,



上面是其中一种,攻击方法是hook KiProcessExpiredTimerList,


原理是替换一个垃圾DPC让Pg执行。我一开始还想过hook _guard_dispatch_icall来处理所有的函数指针调用,发现一hook就死机,不管是虚拟机还是主机都一样。

在打第二次虚拟机快照的时候,Pg又蓝屏了。这一次他并没有通过异常,也没用DPC。我想了一会没想出来他是怎么触发的。

然后我从PG的上下文内存分配入手,一开始我什么也不知道,就直接hook ExallocatePoolWithTag来试一下,在所有分配大字节全部断下


**** Hidden Message *****

页: [1]
查看完整版本: 分享一下win10 RS5的PatchGuard部分攻击方法