系统安全C/C++汇编 [2021]Windows PatchGuard KiErrata671Present 在一次偶然中我发现了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. 这个东西是如何调用的,会在哪调用,哪些页面会有这个东西,目前来说并不知道 阅读全文 2021-08-18 huoji 5 条评论
系统安全二进制安全汇编 [2021]PatchGuard的 sub_1403DA6F0 回调研究(二) [上一文章](https://key08.com/index.php/2021/06/28/1190.html "上一文章") 中,我们介绍了PG的回调,本篇文章将会大概介绍一下这个回调所调用的sub_1403DA6F0的一些内容: 阅读全文 2021-08-01 huoji 0 条评论
系统安全二进制安全C/C++一线开发 [2021]PatchGuard的 542875F90F9B47F497B64BA219CACF69 回调研究(一) 在研究/看别人研究PG的时候,我注意到了在KiFilterFiberContext函数里面的一个  这个操作 在 [windows10 patchguard 分析研究(版本:1803)](https://key08.com/index.php/2021/01/09/880.html "windows10 patchguard 分析研究(版本:1803)") 中,他们说这个是注册了一个 "TV" 回调 实际上是错误的,这个 "TV"字符串只是用于填充 ObjectAttributes.ObjectName这个字段的unicode_string,真实名字应该叫做"542875F90F9B47F497B64BA219CACF69",仅此而已 如果你想跟进sub_140386010 你就错了,**这个函数是一个巨大的、不可名状的、超过1W+行代码**的PG检查函数(10990行代码),至于是什么我们会在下文说,先关心一下这个注册了什么回调: 阅读全文 2021-06-28 huoji 0 条评论
系统安全C/C++汇编Shellcode [2021]微软如何检测到hypervisor以及如何预防 微软挺奇怪的,什么事都要管一腿.总所周知 win 1809后hypervisor的一些功能比如msr hook(通过替换msr_lstar寄存器)的方案已经无了.怎么无的呢?除了kva shadow的问题,还有如下几个问题: 翻开微软的内核,有如下函数 KiErrata361Present KiErrataSkx55Present KiErrata704Present ... 这些函数有如下特点: 1. 名字莫名其妙 2. 调用者也莫名其妙,比如KiErrata361Present在一个IDA分析都要半个小时的函数里面调用. 3. 大部分都是微软检测虚拟机的函数 KiErrata704Present: 他长这样: 阅读全文 2021-05-13 huoji 1 条评论
[2021]windows10 patchguard 分析研究(版本:1803) [Tetrane_PatchGuard_Analysis_RS4_v1.00.pdf](https://key08.com/usr/uploads/2021/01/3960607802.pdf) 阅读全文 2021-01-09 huoji 0 条评论