[发明专利]一种导入表的修复方法及装置有效
申请号: | 201210592469.X | 申请日: | 2012-12-28 |
公开(公告)号: | CN103077029A | 公开(公告)日: | 2013-05-01 |
发明(设计)人: | 陈锦;刘业欣 | 申请(专利权)人: | 北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 郭红丽 |
地址: | 100089 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 导入 修复 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,尤指一种导入表的修复方法及装置。
背景技术
加壳是可执行程序资源压缩的简称,是保护文件的常用手段,其原理是利用特殊的算法,对可执行程序里的资源进行压缩、加密。加壳程序可以直接运行,但是不能获取原始程序,要经过脱壳才可以获取。脱壳的过程主要为三步:第一步,确定原始程序的入口点(Original Entry Point,OEP);第二步,修复导入表和重定位表;第三步,将内存中的原始程序写入文件,更改程序的新入口地址为OEP,这一步通常称为转储(Dump)。修复导入表是脱壳过程中重要的步骤。
下面介绍导入表和导入地址表的概念。
在windows上,运行可执行程序时通常会调用很多函数,这些函数是由windows上的函数库导出的,每个函数库可以称为一个模块。windows加载可执行程序时,会定位该可执行程序的导入表和导入地址表,导入表中包括该可执行程序需要加载的所有函数库的名字,以及需要从每个函数库里导入的函数的名字,导入地址表中包括这些函数需要填充的内存地址,当这些函数全部填充到内存地址后,导入表就没有用了,运行可执行程序要调用函数时,直接从导入地址表中获取函数地址,然后到获取的函数地址中调用函数。
导入地址表的结构很特殊,假设导入地址表的起始地址是0x01001020,可执行程序为32位,则导入地址表的结构如下表所示:
可执行程序中采用类似如下代码调用函数:
mov edi,[0x01001020]//把0x1001020地址中的函数地址给edi;
call edi//调用函数,如上表,调用的是函数kernel32.GetModuleHandleA。
可执行程序加壳后,新的导入表是壳的导入表,加壳程序加载后,系统会填充需要的函数地址到壳的导入地址表中,但是原始程序的导入地址表并不会被系统自动填充,这个工作由壳来完成,壳负责填充函数地址到原始程序的导入地址表中。
当加壳程序运行到OEP后,此时加壳程序的导入地址表虽然已经被壳填充了正确的函数地址,但是导入表却不一定正确,这样即便dump,下次运行加壳程序时,系统仍然找不到需要的函数库和函数,导致加壳程序崩溃。所以要想完成脱壳,还必须修复程序的导入表。
目前,在修复导入表时,通常会采用特征定位法,根据已知类型壳的特征对加壳程序对应的原始程序的导入表进行修复,现有的产品有针对具体壳的脱壳脚本或自动脱壳机等。这种方法在修复导入表时成功率很高,修复得完美,但是一旦已知类型壳升级可能导致特征定位失效,并且对于使用未知类型壳的加壳程序对应的原始程序的导入表不能使用。因此,现有的导入表修复方法并不能普遍适用于修复各种加壳程度对应的原始程序的导入表。
发明内容
本发明实施例提供一种导入表的修复方法及装置,用以解决现有的导入表修复方法不能普遍适用于修复各种加壳程序对应的原始程序的导入表的问题。
一种导入表的修复方法,包括:
记录运行加壳程序过程中产生的数据改写信息和模块加载信息,所述数据改写信息包括数据改写执行地址、数据改写地址、改写数据和数据改写时间,所述模块加载信息包括所述加壳程序映射到内存中的基地址和结束地址;
在确定所述加壳程序对应的原始程序的入口点OEP后,根据数据改写时间、数据改写地址和设定的组合规则将记录的数据改写信息中的改写数据进行组合,并根据模块加载信息和导入表格式在组合后的改写数据中搜寻待选导入表;
若搜寻到待选导入表,确定每个待选导入表对应的导入地址表,获取在到达所述OEP的时刻存在于内存中、并且内存地址最小的导入地址表,将获取的导入地址表对应的待选导入表作为所述加壳程序对应的原始程序的导入表;
若搜寻不到待选导入表,根据记录的数据改写信息中包括数据改写执行地址、数据改写地址、改写数据和数据改写时间重新建立所述加壳程序对应的原始程序的导入表。
一种导入表的修复装置,包括:
记录单元,用于记录运行加壳程序过程中产生的数据改写信息和模块加载信息,所述数据改写信息包括数据改写执行地址、数据改写地址、改写数据和数据改写时间,所述模块加载信息包括所述加壳程序映射到内存中的基地址和结束地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司,未经北京神州绿盟信息安全科技股份有限公司;北京神州绿盟科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210592469.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:三接点式接触型充电组件
- 下一篇:一种双油位开关螺杆并联式压缩冷凝机组