[2021]Windows PatchGuard KiErrata671Present huoji PG,hypervisor,patchguard,KiErrata671Present 2021-08-18 2419 次浏览 4 次点赞 在一次偶然中我发现了KiErrata671Present,它这个看起来长这样:  人畜无害 但是看调用:  第一眼看不出什么 让我们慢慢解释一下:  请注意,ida反汇编的代码是没有try和catch的,在汇编里面,你可以看得到如下的代码:  通俗的解释一下 1.去掉页面保护 2.给KiErrata671Present + 0x2的位置写0xC3 让其从1返回为0 3.执行KiErrata671Present 4.恢复页面保护 这样做会有什么效果: 一些hypervisor中的EPT/NPT hook技术会让页面读写执行分离实现无痕hook,如果在有EPT/NPT HOOK的情况下并且这个函数正好与某些保护页面在同一页的情况下,第2步(给KiErrata671Present + 0x2的位置写0xC3 让其从1返回为0)不会被写入执行页面,导致执行结果依然是1,从而让其检测到hypervisor,不过这也只是猜测,因为目前有几个不确定: 1. 这个是1809的东西,为什么目前没有1809的ept hook出错的报告 2. 这个东西是如何调用的,会在哪调用,哪些页面会有这个东西,目前来说并不知道 本文由 huoji 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。 点赞 4
但是在 windbg中断下来看到的rip还是hook前的内容
请问一下大佬
x64下用 EPT hook ssdt中某个函数的头部,然后 hook成功,但是过一会在这个ssdt的这个函数页表中会出现 出现 Access violation - code c0000005错误,请问这个是为什么
ept hook内核不分页的代码段也需要锁定物理页(假设不锁定,确实过几天那个虚拟地址就不是映射之前那个物理页了,你的ept hook就不存在了),三天之后触发PG去世,这个是自1709起就有的操作了
括号内的内容想表达的是,其实github上面的开源ept,其实都是存在触发PG的问题,只不过由于它们都不锁定物理页,故此ept hook失效未触发PG
好的 感谢指出 改天验证一下