系统安全C/C++汇编 [2021]Windows PatchGuard KiErrata671Present 在一次偶然中我发现了KiErrata671Present,它这个看起来长这样: ![](https://key08.com/usr/uploads/2021/08/1055346649.png) 人畜无害 但是看调用: ![](https://key08.com/usr/uploads/2021/08/1257889702.png) 第一眼看不出什么 让我们慢慢解释一下: ![](https://key08.com/usr/uploads/2021/08/1678044808.png) 请注意,ida反汇编的代码是没有try和catch的,在汇编里面,你可以看得到如下的代码: ![](https://key08.com/usr/uploads/2021/08/1437456579.png) 通俗的解释一下 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. 这个东西是如何调用的,会在哪调用,哪些页面会有这个东西,目前来说并不知道 阅读全文 2021-08-18 huoji 5 条评论