昨天有个同学问我怎么绕过所谓的PG?就想Hook一下NtOpenprocess总是会看到蓝色的屏幕,很是烦人啊。于是又…有了这篇文章…

PatchGuard是什么?简单说不就是防止系统数据非法更改,派一个叫做Context的大将去检测。。。
Context是什么?简单的又说不就是相关环境什么的,自行百度吧。

绕过PG那就干掉它的大将不就好了吗,实时是如此,但是大将有点多,我怕干不过。下面就简单干干小将吧。

不扯了,步入正题:
本想找找伟大的度娘复制粘贴一番,可惜…无果。
(下面就简单概述吧)
Context不管是什么,总有内存吧?这是最基本的,要不然你怎么执行?好吧,又开始扯了。
既然是内存,那总得分配吧?分配内存函数有哪些?也不多,这里就说个常用的,ExAllocatePool 不卖关子了,Context就是基于类似这种函数去申请的内存,但是数据肯定是有加密,执行时自揭密。
据测试5分钟内会执行一次(无限循环)

顺便说下它的执行逻辑。

调用源执行初始化Context -> 执行 -> 检测正常则 -> 继续申请新的内存储存Context
(当前地址被释放)->无限循环
如果检测到不正常 -> CRITICAL_STRUCTURE_CORRUPTION(蓝色屏幕给你展现) -> GameOver

当然 想拦截它也很简单,思路如下:
1.找到它初始化的内存,准确说应该是找到当前所有大将所在领地!
2.用定身法把大定在原地(当Context执行时会发现我的大将怎么动不了?好了,页面异常,不处理试试?)
3.接管页面异常,会收到错误地址吧,调用源吧?这些暂时不重要
4.直接恢复当前环境数据为Context执行前环境,直接返回。
5.当前所有大将成功抹杀
*(目前测试基本HOOK了所有SSDT函数到现在一夜没有看到蓝色的屏幕,这是不好的,因为还有其他大将存活,但是貌似没有工作)

这时可能有同学疑惑,都找到调用地址了直接ret或者NOP不就好了吗,答案是可以的,但是这个还没有测试。【@笑出猪声】

顺便来这里看看,如果有同样正在研究这个的同学可以一起探讨一番。
一张图没有貌似有点冷清,贴个测试结果吧

HeadlessChrome 绕过 绕过patchguard_HeadlessChrome 绕过


测试环境:Win10 - x64 (所有版本)

拦截Context计数:2

为什么只有2个?因为前面说过,它就像接力赛的模式在运行!把当前环境的大将都干掉了,谁去上报异常和接力?(所以当前环境模式不会再有其他Context检测了)

当然还有其他地区的Context没有去处理,让我很疑惑的是既然没有处理其他的为什么一夜了还看不到蓝色的屏幕???难道这片区域不在管辖范围内吗?【@笑出猪声】

推荐一位同学的源码学习地址: https://wyzf.vip
我的超级大徒弟~~~

基于上面简单概述的内容,大佬请无视。您不适合看这种内容.【@笑出猪声】