[发明专利]重定位表的修复方法、程序脱壳方法及相关装置有效
申请号: | 201210587721.8 | 申请日: | 2012-12-28 |
公开(公告)号: | CN103019739A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 陈锦;刘业欣 | 申请(专利权)人: | 北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 郭红丽 |
地址: | 100089 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 定位 修复 方法 程序 脱壳 相关 装置 | ||
技术领域
本发明涉及计算机技术领域,尤指一种重定位表的修复方法、程序脱壳方法及相关装置。
背景技术
加壳是可执行程序资源压缩的简称,是保护文件的常用手段,其原理是利用特殊的算法,对可执行程序里的资源进行压缩、加密。加壳程序可以直接运行,但是不能获取原始程序,要经过脱壳才可以获取。脱壳的过程主要为三步:第一步,确定原始程序的入口点(Original Entry Point,OEP);第二步,修复导入表和重定位表;第三步,将内存中的原始程序写入文件,更改程序的新入口地址为OEP,这一步通常称为转储(Dump)。修复重定位表是非常关键的步骤。
下面介绍重定位表的概念。
有的可执行程序,加载到内存中运行时,加载基地址是不固定的,因此可执行程序中有绝对寻址的地方需要加上实际加载基地址与默认加载基地址的差值。
假设dll类型的可执行程序的默认加载基地址是0x10000000,它的程序中有如下汇编代码:
mov eax,[0x10001000]。
该代码表示将地址为0x10001000中的数据传递给eax,也就是将默认加载基地址偏移0x1000后的地址中的数据传递给eax。
但是当这个dll类型的可执行程序的实际加载基地址为0x600000000时,这个代码就有问题了,必须改成下面的代码才正确:
mov eax,[0x60002000]。
在这里需要一个修正偏移,也就是dll类型的可执行程序的默认加载地址和实际加载地址的差值,即0x60002000-0x10001000=0x50000000,这样才能保证寻址正确。
因此,这类可执行文件需要一个重定位表,来存放每一个需要修正偏移的项,也称为重定项。操作系统在加载可执行程序时,在发现重定位表后,会解析重定位表,得到每一个重定位项,然后填充差值到每一个需要修正偏移的项。
要想对有重定位表的原始程序加壳,所加的壳必须能处理重定位表,原始程序加壳后,新的重定位表是壳自身的重定位表,原始程序需要修正偏移的项不再由操作系统自身来修正,而是由壳来修正。
当加壳程序运行到OEP后,此时加壳程序虽然需要修正偏移的项已经被壳修正,但是重定位表却不一定正确,这样即便dump,下次运行时系统仍然不能修正加壳程序需要重定位的数据,导致加壳程序崩溃。所以要想完成脱壳,还必须修复加壳程序对应的原始程序的重定位表。
目前,在修复重定位表时,通常会采用特征定位法,根据已知类型壳的特征对加壳程序对应的原始程序的重定位表进行修复,现有的产品有针对具体壳的脱壳脚本或自动脱壳机等。这种方法在修复重定位表时成功率很高,修复得完美,但是一旦已知类型壳升级可能导致特征定位失效,并且对于使用未知类型壳的加壳程序对应的原始程序的重定位表不能使用。因此,现有的重定位表修复方法并不能普遍适用于修复各种加壳程度对应的原始程序的重定位表。
发明内容
本发明实施例提供一种重定位表的修复方法、基于加壳程序的脱壳方法及装置,用以解决现有的重定位表修复方法不能普遍适用于修复各种加壳程序对应的原始程序的重定位表的问题。
一种重定位表的修复方法,包括:
记录运行加壳程序过程中产生的数据改写信息和模块加载信息,所述数据改写信息包括数据改写执行地址、数据改写地址、改写数据和数据改写时间,所述模块加载信息包括所述加壳程序映射到内存中的基地址和终止地址;
在确定所述加壳程序对应的原始程序的入口点OEP后,根据数据改写时间、数据改写地址和设定的组合规则将记录的数据改写信息中的改写数据进行组合,并根据模块加载信息和重定位表格式在组合后的改写数据中搜寻待选重定位表;
若搜寻到待选重定位表,获取在到达所述OEP的时刻所有重定位项指向内存地址的数据都存在于内存中、并且包含指向的内存地址最小的重定位项的待选重定位表为所述加壳程序对应的原始程序的重定位表;
若搜寻不到待选重定位表,根据记录的数据改写信息中包括数据改写执行地址、数据改写地址、改写数据和数据改写时间重新建立所述加壳程序对应的原始程序的重定位表。
一种重定位表的修复装置,包括:
记录单元,用于记录运行加壳程序过程中产生的数据改写信息和模块加载信息,所述数据改写信息包括数据改写执行地址、数据改写地址、改写数据和数据改写时间,所述模块加载信息包括所述加壳程序映射到内存中的基地址和终止地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司,未经北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210587721.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种甲烷检测报警仪壳体
- 下一篇:乳胶手套针孔率检测装置