EPT Stealth Inline Hook
为了尽可能提高性能,减少不必要的VM-Exit,钩子页面应该是4KB分页。
一个钩子页面有两个页面:原始页面和钩子页面。
这两个页面应该有以下属性。
- 原始页面:R+/W+/X- 当执行到该页面时,会触发EPT violation
- 钩子的页面:R-/W-/X+ 当对页面读写时 ,会触发EPT violation
当VM-Exit时,可以通过GPA定位到钩子页面,然后切换Page Table Entry
NPT Stealth Inline Hook
AMD由于没有“execution-only page”功能,Intel EPT的方法不能用于AMD NPT上
参考tandasat/SimpleSvmHook:SimpleSvmHook是AMD处理器上Windows的研究目的的虚拟机管理程序。 (github.com)
由于实现了也会对性能开销极大,所以这里就不说了
PatchGuard Detect Hook
在Win10高版本,PG可能会通过KiErrata671Present来检测EptHook
xor eax,eax
inc eax
ret
Monitor Trap flag
MTF类似标志寄存器中的TF位,CPU执行完一条指令后触发一次单步异常
Intel VT-x使用MTF可以模拟单步一次,在某些情况下是非常重要的,而AMD-V还是一样没有这个功能
检测
DBVM在AMD环境下模拟MTF存在问题,导致可以检测,而INTEL环境下CheatEngine的做法则是忽略TF
如果断点一页中存在TF时情况下
Cheat Engine DBVM攻击测试
由于是AMD环境,只能测试DBVM
补充INTEL环境下则断点失效