- 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)