ShadowWalker

虚拟页表。

实现内存隐藏欺骗。
原理:(目前在X86测试通过)

  • 通过HOOK 0xe号中断,即HOOK缺页中断函数。在HOOK后的处理函数中通过判断CR3来确定是在哪个程序发生的

  • 在处理函数中通过判断CR2来判断缺页的虚拟地址,以此来保护(通过修改PTE来隐藏或者保护我们的目标虚拟地址),但是我们需要执行(如果是执行保护)一下目标内存代码,目的是更新TLB,然后再把PTE的错误(欺骗)地址写回去。

  • 我们通过errno判读缺页类型。例如是0的执行缺页还是其他的读写缺页等等。以此实现读取和执行等不同种类缺页的不同对策。达到执行正常,但是无法读取可执行代码的效果

  • 通过EIP可以知道触发缺页中断时系统代码的执行地址。

  • 此方法可以欺骗CE、OD等工具,使其无法读取应用程序的可执行代码的信息,但是应用程序仍然可以正常执行。可以做到代码保护反调试的效果。

  • 通过测试猜测:CE在RING3下通过系统API来获取进程内存;但是加载了驱动后,CE也使用PTE复制到类似0地址的地方进行读取,ShadowWalker仍然祈起到效果。(通过查看缺页时EIP得知)

  • 需要HOOK系统中断API,不适合实际应用,可能会导致系统不稳定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容