之前别人说什么VT调试器,心想,用VT写调试器,真厉害,后来知道了...只是用VT的hook和一小部分功能,本质还是依赖系统的调试体系
我就想写一个不依赖系统调试的真正的VT调试器,先写个执行监视试试水,思路如下:
VT框架主要抄的hv项目,改写了一些,比如添加了host cr3自身重映射,将其中的vmexit流程改成函数回调链表方便增加功能模块,将EPT改成共享复用,host异常处理流程,报错机制等
详细说说共享EPT:
初始化时会构建一张512GB(主表),然后再仅复制一份pml4表作为另一张(副表) ,系统运行在副表下,现在这两张的二三级页表项都是同步的,主表永远不动,需要setpte时改副表自动重新映射页表路径,这样情况下,需要读执行隔离(无痕hook)时只需要设置副表的HPA为带hook的页属性设置为仅执行,然后触发违例时,切换成主表用MTF单步后再切回副表即可闭环
在上述基础上,再次添加一张表,还是复制于主表,这个表将复制两层,不止pml4表还有pdpt表,将pdpt表的表项全部设置为不可执行,这样我们就有了三张表:主表,全属性不会触发异常,副表,用于触发异常接管执行流,目标执行表,目标在此表运行,用于监视目标执行
所以监视闭环如下:
初始化添加处理回调:
将该页在副表内设置不可执行,在目标执行页设置可执行
在EPT违例处理中判断当前EPT是副表就切换为目标执行表并打开MTF,是目标执行表就切换为副表并关闭MTF
在MTF中无需特殊处理给过就行
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课