介绍本课内容v 2016.pdfVIP

  • 1
  • 0
  • 约3.29千字
  • 约 22页
  • 2024-05-14 发布于北京
  • 举报

HideMemory

•对于特定范围内存可读写

•或对于特定地址范围内存隐藏

•实现原理:

•EPTP切换方式

•EPTP_ORG设置X

•EPTP_SHADOW设置RWX

•EPTP_HIDE设置RW但HPA为空白页

HideMemory

•当一个EPTViolation发生时:

•fault_ripGuestRIP

•fault_va发生EPTViolation的VA(可能不存

在)

•fault_cr3GR3

•fault_pa发生EPTViolation的GPA

•当fault_pa为被处理的PA时,HideMemory

管理器处理有下面的逻辑

•如果fault_cr3为被处理的cr3(R3进程的内存

才需要验证此处)

•且fault_rip为合法的rip范围,则EPTP

切换为SHADOW然后设置MTF

•反之EPTP切换为HIDE然后设置MTF

•MTFHandle切换EPTP回ORG并取消MTF

一些细节问题

•UserModeMemory的Lock问题

•UserModeMemory隐藏的地址选择

Lock问题

•使用MDL可以解决

•VirtualLock可有可无

•mdl的释放问题——进程回调与析构

地址选择

•对于一个Image而言(如果是Allocate出来

的内存,直接全部塞入即可)

•需要根据Section的属性,一般把支持W和X

属性的节都放入,其他节则不放入(只读

和Discard的节表一般都有其他作用)。

GUI初始化

•必须在UI初始化成功后开启HideMemory不

然Csrss不能到某些内存(这也是为啥

大部分hidememory的白里都必然有

Csrss)

别人家的hideMemory的原理

•修改CR3--PM4L(CR3里的那个物理地址

里的数据,参考上节课CR3-PA的转换)

•让PM4L失效,于是内存发生时,就有

#PF,然后选择修复PM4L还是PM4L指向虚

PM4L

•CR3Load/Store的处理,对于csrss等白名

单的切换cr3到被隐藏的cr3,则恢复PM4L其

他则PM4L失效

•无VT时,CR3Load/Store靠SwapContext

处理,#PF靠IDThook

别人家的好处和坏处

•好处:

•方便快捷,PM4L直接给某个进程的就

行了。真的PM4L保存好就行了,直接改一

个位来失效。

•不用考虑Lock与PageOut

•可以不用VT实现

•坏处:

•需要白太大,容易侧漏和。

绕过别人家的HideMemory

•a.PsCreateSystemThread的新用法:

•对csrss进程创建一个systemthread

•然后在该systemthread里对hidememory的

进程进行内存

•b.注入

绕过自己家的HideMemory

•注入

syscall64hook

•网上的hook

•正确的hook

网上的hook

•Hyperbone

•VirtualDbg/VirtualHide

•hook的代码都是用汇编实现syscall64——

兼容性看缘分

正确的hook

•syscall64的代码(比如某公司的方法)

•修复的代码中的call与farjmp等等

•ssdt和shadow_ssdt使用替换页表修复

•对hookssdt等支持的更全面

•支持2003vistawin7win8win10

文档评论(0)

1亿VIP精品文档

相关文档