- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows内存隐藏技术初探
Windows内存隐藏技术初探
Windows内存隐藏技术初探 Han Yongs blog
最早看到Shadow Walker这种隐藏内存数据的技术的时间忘了,呵呵。大约是一年多或者两年以前吧。当时还只是提出了理论性的东西,没有人实现出来。前段时间搞NP玩的时候,对Themida和虚拟机深恶痛绝,遂想,干 ...
最早看到Shadow Walker这种隐藏内存数据的技术的时间忘了,呵呵。大约是一年多或者两年以前吧。当时还只是提出了理论性的东西,没有人实现出来。前段时间搞NP玩的时候,对Themida和虚拟机深恶痛绝,遂想,干脆把内存数据隐藏得了,省得挂个钩子还得缩手缩脚,找个一劳永逸的办法。于是google了一把网上的代码,自己也花了几天时间实现了一下。虽然不太完美,不支持PAE,目前也只能隐藏ring3的代码,不过对这项技术的原理和实现也算是摸清楚了。由于对现在的安全软件具有极度破坏性的杀伤力,开始没想写这篇文章,不过最近确实比较无聊,NMAKE的文章又比较难写,so还是写写玩吧,权当练文笔了,呵呵。
关于内存隐藏的概念。有时候我们会面临这么一个问题,如果我们有一段内存中的代码,不想被别人发现,但是又要它能确确实实的执行起来起作用,怎么办?或许有很多办法,比如自我变形之类的。但是,如果可以完完全全把这段代码的痕迹从内存中“抹消”,岂不是很舒坦的事情?hoho。简单来说,就是让内存中的一段数据,执行的时候是一个样子,但是read/write的时候又是另外一个样子。是不是有点玄妙了?呵呵。
一切都要从Petium架构CPU提供的TLBS说起。TLBS的全称是Translation Lookaside Buffers。为了加速处理器内存在分页模式下的访问速度,从P6 family的cpu开始就支持这样一种特性。处理器会将最近访问过的页目录(directory)和页表(table)存储在芯片内部称为translation lookaside buffers的缓存中。P6 family处理器分别为4K页面和4M页面分别保留不同的TLBs。绝大多数对分页的访问,都可以通过TLBs的内容完成,只有在缓存中找不到所访问的页面的信息时,才会去访问实际的页目录和页表。Ring0的代码通过重新装载CR3或者使用INVLPG指令,可以将TLB里面某些页表的入口无效化。而CPU分别为内存的执行和读写保存了不同的TLB,即DTLB和ITLB。对于DTLB,在执行数据访问指令的时候,会更新DTLB中被访问页面的入口;而对于ITLB,在执行某个页面代码的时候,会更新ITLB内的入口。通常情况下,DTLB和ITLB的内容是同步的,但是我们可以通过操作这两种TLB,实现对某段内存的读写/执行控制。
如何才能在某个内存地址被读写或者访问的时候获得控制呢?很明显,当内存访问出错的时候,系统会触发页面异常,即Trap0E。通过钩挂Trap0E,并且将我们要控制的内存页面PTE标记为不存在,并且通过INVLPG指令清空TLB中该页的入口,这样,当对这个页面进行读写/执行访问的时候,TLB中不存在该页的入口信息,并且页面不存在,能够触发Trap0E,使得我们可以获得系统的控制权。
接下来,我们需要区分触发异常是由于读写访问还是执行访问。通过比较发生异常的页面地址,和出现异常的代码地址,我们可以区分异常类型。如果出现异常的地址就是发生异常时正执行的代码地址,那么说明是一次执行访问;反之则是读写访问。在捕获到异常并区分出异常类型之后,就可以通过分别手动装载DTLB和ITLB使得读写/执行数据的过滤。TLB被装载之后,只要没有被清除出去,对这些页面的访问就通过TLB里面的内容实现。这样使得Hook页面之后的访问速度,比未Hook之前并不会有明显的损失。
基本的思想就是这样了,后面贴出来一些我的代码实现,其中很多直接“参考”了OllyBone和网上其他公布出来的代码。
由于目的是想做对目标进程的Hook,并且隐藏被修改的代码,仅需要支持对ring3代码的隐藏即可。我的流程是在驱动中提供了一个接口,将应用层传进去的一段代码复制到要hook的地址,并保存原始内容。通过内存伪装,使得该地址执行的是新代码,而读写操作得到的是旧代码。为了在自己Trap0E里面区分是哪个进程触发的异常,采用了比较奇怪的办法,即通过对比CR3寄存器的值来判断,至于为什么这么做,忘了……。另外,为了装载ITLB,需要调用一下伪装页面内的代码,所以我们在被Hook的页面内需要找到一条retn指令,并把这个地址传递给驱动,在装载ITLB的时候,驱动程序直接call这句retn。
下面的代码还有一些问题,只是当时写的实验性的代码,所以也比较零乱。不过大致的流程是清楚的。
您可能关注的文档
最近下载
- TXEEPIA 001-2023 重点行业企业项目碳排放评价技术规范.pdf VIP
- 2025年人教版三年级上册道德与法治全册知识点(新教材).pdf
- 海燕出版社六年度级劳动与技术上册教案.pdf VIP
- TCWEC29-2021水利水电工程清污机制造安装及验收规范(OCR).pdf VIP
- 第8课《回忆鲁迅先生》课件 (共45张ppt) 2025-2026学年统编版语文八年级上册.pptx VIP
- 初中美术折纸教学课件.ppt VIP
- 爱护公物,从我做起 主题班会课件(共30张PPT).pptx VIP
- 第二单元 单元复习课件七年级语文上册.ppt VIP
- 2025年广东高职高考语文试卷及答案.doc VIP
- 小马宝莉英文第四季台词S04E18 Maud Pie.pdf VIP
原创力文档


文档评论(0)