CN103019740A - 一种获取导入表和重定位表的方法及装置 - Google Patents
一种获取导入表和重定位表的方法及装置 Download PDFInfo
- Publication number
- CN103019740A CN103019740A CN2012105877222A CN201210587722A CN103019740A CN 103019740 A CN103019740 A CN 103019740A CN 2012105877222 A CN2012105877222 A CN 2012105877222A CN 201210587722 A CN201210587722 A CN 201210587722A CN 103019740 A CN103019740 A CN 103019740A
- Authority
- CN
- China
- Prior art keywords
- data
- data rewriting
- rewrite
- information
- continuous
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种获取导入表和重定位表的方法及装置,该方法包括:记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;在确定所述加壳程序对应的原始程序的入口点OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。该方案减少了耗时,提高了效率。
Description
技术领域
本发明涉及计算机技术领域,尤指一种获取导入表和重定位表的方法及装置
背景技术
加壳是对可执行程序资源进行处理的简称,是保护可执行程序的常用手段,其原理是利用特殊算法,对可执行程序里的资源进行压缩、加密。加壳程序可以在设备上直接运行,但是不能获取原始程序,要经过脱壳才可以获取。脱壳的过程主要分为如下三步:第一步,确定原始程序的入口点(Original EntryPoint,OEP);第二步,修复导入表和重定位表;第三步,将内存中的原始程序写入文件,更改程序的新入口地址为OEP,这一步通常称为转储(Dump)。
在为程序加壳的过程中,有时并没有完全破坏原始程序的导入表和重定位表,这样在运行加壳程序的过程中,原始程序的导入表和重定位表会完整重现或部分重现在内存记录的数据中,例如,导入表的数据包括A1、A2、A3,在T1时刻将导入表的数据A1写入内存地址x,在T2时刻将导入表的数据A2写入内存地址x+d1,在T3时刻导入表的数据A3写入内存地址x+d2,A1、A2、A3也可以称为三种内存状态,那么将改写数据A1A2A3进行组合就可以得到整个导入表。可见,对于导入表和重定位表没有被完全破坏的加壳程序,在获取到加壳程序运行过程中产生的所有的数据改写信息、并确定加壳程序对应的原始程序的OEP后,如果能将所有内存状态的可能组合还原,就可以在这些组合后的内存状态中获取导入表和重定位表。
在获取到的加壳程序运行过程中产生的数据改写信息后,为了便于分析数据改写信息从而得到导入表和重定位表,可以将数据改写信息记录在一个表格中,假设将获取的数据改写信息记录在如下表中,其中x、x+d1、x+d2表示数据改写地址,T1、T2、T3表示数据改写时间,A1、A2、A3、B1、B2、B3、C1、C2、C3表示改写数据,那么,根据获取的数据改写信息可以得出3*3*3=27中改写数据的组合。
内存地址/时间 | T1 | T2 | T3 |
x | A1 | A2 | A3 |
x+d1 | B1 | B2 | B3 |
x+d2 | C1 | C2 | C3 |
上表中仅示出了在T1、T2、T3这三个时刻,内存地址x、x+d1、x+d2写入数据的情况,这时就会得到27种改写数据的组合,在实际运行一个加壳程序后,可能会得到大量的数据改写信息,也可能会出现一个内存地址被循环改写多次的情况,这样得到改写数据的数量也是巨大的,然后将大量的改写数据进行组合,就会得到非常多的改写数据的组合,然后逐一在得到的改写数据的组合中获取导入表和重定位表将会非常耗时,效率也非常低。
发明内容
本发明实施例提供一种获取导入表和重定位表的方法及装置,用以解决现有技术中在获取没有被完全破坏的导入表和重定位表时,耗时长、效率低的问题。
一种获取导入表和重定位表的方法,包括:
记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;
在确定所述加壳程序对应的原始程序的入口点OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;
逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。
一种获取导入表和重定位表的装置,包括:
记录单元,用于记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;
组合单元,用于在确定所述加壳程序对应的原始程序的入口点OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;
获取单元,用于逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。
本发明有益效果如下:
本发明实施例提供的获取导入表和重定位表的方法及装置,通过记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;在确定所述加壳程序对应的原始程序的OEP后,将记录的数据改写信息中,数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,将记录的数据改写信息中,数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。该方案只是将记录的数据改写信息中,数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,将记录的数据改写信息中,数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合,然后逐一分析组合后的改写数据来获取导入表和重定表,相对于现有技术中在所有可能的改写数据的组合中获取导入表和重定位表的方式,减少了耗时,提高了效率。
附图说明
图1为本发明实施例中第一种获取导入表和重定位表的方法的流程图;
图2为本发明实施例中第二种获取导入表和重定位表的方法的流程图;
图3为本发明实施例中第三种获取导入表和重定位表的方法的流程图;
图4为本发明实施例中获取导入表和重定位表的装置的结构示意图;
图5为本发明实施例中一种优选的获取导入表和重定位表的装置的结构示意图。
具体实施方式
针对现有技术中在获取没有被完全破坏的导入表和重定位表时,耗时长、效率低的问题,本发明实施例提供三种获取导入表和重定位表的方法,第一种方法的流程如图1所示,执行步骤如下:
S10:记录运行加壳程序过程中产生的数据改写信息,数据改写信息包括数据改写地址、改写数据和数据改写时间。
可以使用虚拟机或者调试器等运行加壳程序,并记录运行过程中产生的数据改写信息。
S11:在确定加壳程序对应的原始程序的OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合。
加壳程序运行过程中,会产生大量的数据改写信息,这些数据改写信息有些是相关的,对于获取导入表和重定位表是有贡献的,有些则是离散的,不会对获取导入表和重定位表有贡献,由于导入表往往会出现在连续大块被改写的内存地址中,因此,可以获取数据改写信息连续、并且数据改写地址连续的数据改写信息,将这些数据改写信息中的改写数据组合后,就可以大大减少所有改写数据组合的可能性,从而可以提高获取导入表和重定位表的效率。
下面以两个具体实例来说明:
例一:在T1、T2、T3、T4、T5、T6这六个连续的时刻记录的数据改写信息如下表所示,A1、A2、A3、B1、B2、B3表示在相应的内存地址写的数据:
内存地址/时间 | T1 | T2 | T3 | T4 | T5 | T6 |
x | A1 | A2 | ||||
x+d1 | B1 | B2 | ||||
x+d2 | C1 | C2 |
从上表中可以看出,共有2*2*2=8种改写数据的组合,但是由于T1-T3是连续的,x-x+d2也是连续的,这也就可以看为一种改写数据的组合,即A1B1C1;同理,由于T4-T6是连续的,x-x+d2也是连续的,也就可以看为一种改写数据的组合,即A2B2C2。也就是说上述六条数据改写信息实际上只是两种改写数据的组合。这样就可以减少改写数据的组合的数量。
例二:在T1、T2、T3……TN这段时间记录的数据改写信息如下表所示,A1、B1……BN、C1表示在相应的内存地址写入的数据:
内存地址/时间 | T1 | T2 | T3 | TN | 备注 | |
x | A1 | A1 | 始终未被改写 | |||
x+d1 | B1 | B2 | B3 | BN | 一个循环,写多次 | |
x+d2 | C1 | 始终未被改写 |
在记录的数据改写地址中,会改写很多零散的数据改写地址,可以不考虑这些改写形成的改写数据的组合,上述3N条数据改写信息实际上只有1种改写数据的组合:A1+B1+C1。
S12:逐一分析组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表。
确定出导入表和重定位表可能的存在的改写数据的组合后,直接逐一分析这些组合后的改写数据,然后就来获取导入表和重定位表。
该方案只是将记录的数据改写信息中,数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合,然后逐一分析组合后的改写数据来获取导入表和重定表,相对于现有技术中在所有可能的改写数据的组合中获取导入表和重定位表的方式,减少了耗时,提高了效率。
第二种获取导入表和重定位表的方法如图2所示,执行步骤如下:
S20:记录运行加壳程序过程中产生的数据改写信息,数据改写信息包括数据改写地址、改写数据和数据改写时间。
S21:在确定加壳程序对应的原始程序的OEP后,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合。
加壳程序运行过程中,会产生大量的数据改写信息,这些数据改写信息有些是相关的,对于获取导入表和重定位表是有贡献的,有些则是离散的,不会对获取导入表和重定位表有贡献,由于导入表往往会出现在连续大块被改写的地址中,因此,可以获取数据改写信息连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合后,就可以大大减少所有改写数据组合的可能性,从而可以提高获取导入表和重定位表的效率。
下面以两个具体实例来说明:
例一:在T1、T2、T3、T4这四个连续的时刻记录的数据改写信息如下表所示,E1T1、E2T2、E1T3、E2T4表示在相应的内存地址写的数据:
从上表中可以看出,共有2*2=4种改写数据的组合,但是由于在T1-T4这四个连续的时刻,E1先对d1执行数据改写,然后E2在对d1执行数据改写,然后E1再对d2执行数据改写,然后E2在对d2执行数据改写,这就可以看成一个循环,因此在在T1-T4这个时间段,改写数据的组合只有两种:E1T1E1T3和E2T1E2T4,这样就可以减少改写数据组合的数量。
例二:在T1、T2、T3、T4这四个连续的时刻记录的数据改写信息如下表所示,E1T1、E2T2、E1T3、E2T4表示在相应的内存地址写的数据:
从上表中可以看出,共有2*2=4种改写数据的组合,但是由于在T1-T4这四个连续的时刻,E1先对d1执行两次数据改写,然后E2再对d2执行两次数据改写,这就可以看成一个循环,因此在在T1-T4这个时间段,改写数据的组合只有两种:E1T1E2T3和E1T2E2T4,这样就可以减少改写数据组合的数量。
S22:逐一分析组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表。
该方案只是将记录的数据改写信息中,数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合,然后逐一分析组合后的改写数据来获取导入表和重定表,相对于现有技术中在所有可能的改写数据的组合中获取导入表和重定位表的方式,减少了耗时,提高了效率。
第三种获取导入表和重定位表的方法如图3所示,执行步骤如下:
S30:记录运行加壳程序过程中产生的数据改写信息,数据改写信息包括数据改写地址、改写数据和数据改写时间。
S31:在确定加壳程序对应的原始程序的OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合。
该步骤与S11是相同的。
S32:在确定加壳程序对应的原始程序的OEP后,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合。
该步骤与S21是相同的。
S33:逐一分析组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表。
可以首先执行S31,在执行S32;也可以首先执行S32,在执行S31;还可以同时执行S31和S32。
该方案只是在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合,然后逐一分析组合后的改写数据来获取导入表和重定表,相对于现有技术中在所有可能的改写数据的组合中获取导入表和重定位表的方式,减少了耗时,提高了效率。
较佳的,上述S11、S21和S32之后,还包括:为组合后的改写数据添加编号信息,并添加到待分析队列中。
将改写数据进行组合后,可以添加上编号信息1、2、3……,然后添加到待分析队列中,待分析队列中存放的是待分析的改写数据的组合。
具体的,上述S12、S22和S33中的逐一分析组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表,具体包括:逐一从待分析队列中取出组合后的改写数据并分析,得到加壳程序的导入表和待选重定位表。
可以按照组合后的改写数据的编号顺序逐一从待分析队列中获取组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表。分析的过程可采用现有技术的方法,这里不再赘述。
基于同一发明构思,本发明实施例提供一种获取导入表和重定位表的装置,该装置的结构如图4所示,包括:
记录单元40,用于记录运行加壳程序过程中产生的数据改写信息,数据改写信息包括数据改写地址、改写数据和数据改写时间。
组合单元41,用于在确定加壳程序对应的原始程序的OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合。
获取单元42,用于逐一分析组合后的改写数据来获取加壳程序对应的原始程序的导入表和重定位表。
较佳的,上述获取导入表和重定位表的装置,如图5所示,还包括添加单元43,用于:为组合后的改写数据添加编号信息,并添加到待分析队列中。
较佳的,上述获取单元42,具体用于:逐一从待分析队列中取出组合后的改写数据并分析,得到加壳程序的导入表和待选重定位表。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种获取导入表和重定位表的方法,其特征在于,包括:
记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;
在确定所述加壳程序对应的原始程序的入口点OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;
逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。
2.如权利要求1所述的方法,其特征在于,还包括:
为组合后的改写数据添加编号信息,并添加到待分析队列中。
3.如权利要求2所述的方法,其特征在于,逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表,具体包括:
逐一从所述待分析队列中取出组合后的改写数据并分析,得到所述加壳程序的导入表和待选重定位表。
4.一种获取导入表和重定位表的装置,其特征在于,包括:
记录单元,用于记录运行加壳程序过程中产生的数据改写信息,所述数据改写信息包括数据改写地址、改写数据和数据改写时间;
组合单元,用于在确定所述加壳程序对应的原始程序的入口点OEP后,在记录的数据改写信息中,将数据改写时间连续且数据改写地址连续的数据改写信息所对应的改写数据进行组合;和/或,在记录的数据改写信息中,将数据改写时间连续、至少两个连续的数据改写地址循环的数据改写信息所对应的改写数据进行组合;
获取单元,用于逐一分析组合后的改写数据来获取所述加壳程序对应的原始程序的导入表和重定位表。
5.如权利要求4所述的装置,其特征在于,还包括添加单元,用于:
为组合后的改写数据添加编号信息,并添加到待分析队列中。
6.如权利要求5所述的装置,其特征在于,所述获取单元,具体用于:
逐一从所述待分析队列中取出组合后的改写数据并分析,得到所述加壳程序的导入表和待选重定位表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587722.2A CN103019740B (zh) | 2012-12-28 | 2012-12-28 | 一种获取导入表和重定位表的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587722.2A CN103019740B (zh) | 2012-12-28 | 2012-12-28 | 一种获取导入表和重定位表的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019740A true CN103019740A (zh) | 2013-04-03 |
CN103019740B CN103019740B (zh) | 2015-08-19 |
Family
ID=47968378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210587722.2A Active CN103019740B (zh) | 2012-12-28 | 2012-12-28 | 一种获取导入表和重定位表的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019740B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108229148A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414328A (zh) * | 2007-10-15 | 2009-04-22 | 北京瑞星国际软件有限公司 | 一种用于对文件进行脱壳的装置和方法 |
US20100257511A1 (en) * | 2007-12-12 | 2010-10-07 | Atsushi Hatabu | Program debugging method and program transformation method, program debugging device and program transformation device using the same, and storage medium |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN102184103A (zh) * | 2011-05-12 | 2011-09-14 | 电子科技大学 | 软件保护壳的壳特征提取方法 |
-
2012
- 2012-12-28 CN CN201210587722.2A patent/CN103019740B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101414328A (zh) * | 2007-10-15 | 2009-04-22 | 北京瑞星国际软件有限公司 | 一种用于对文件进行脱壳的装置和方法 |
US20100257511A1 (en) * | 2007-12-12 | 2010-10-07 | Atsushi Hatabu | Program debugging method and program transformation method, program debugging device and program transformation device using the same, and storage medium |
CN102004884A (zh) * | 2009-08-28 | 2011-04-06 | 华为技术有限公司 | 一种获取可执行文件输入表的方法及装置 |
CN102184103A (zh) * | 2011-05-12 | 2011-09-14 | 电子科技大学 | 软件保护壳的壳特征提取方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108229148A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及*** |
CN108229148B (zh) * | 2016-12-21 | 2022-06-21 | 武汉安天信息技术有限责任公司 | 一种基于Android虚拟机的沙箱脱壳方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN103019740B (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102401596B1 (ko) | 비휘발성 장치에서 데이터 속성 기반 데이터 배치를 활용하기 위해 컴퓨터를 구동하는 경험적 인터페이스 | |
CN104423894B (zh) | 数据储存装置以及快闪存储器控制方法 | |
CN101452396B (zh) | 结合静态优化的动态二进制翻译方法 | |
CN102439577B (zh) | 一种构建内存访问模型的方法及装置 | |
CN103019884A (zh) | 基于虚拟机快照的内存页去重方法及装置 | |
He et al. | Locality-aware replacement algorithm in flash memory to optimize cloud computing for smart factory of industry 4.0 | |
CN106021985B (zh) | 一种基因组数据压缩方法 | |
CN103064792A (zh) | 数据写入方法及装置 | |
US8725461B2 (en) | Inferring effects of configuration on performance | |
EP2919120A1 (en) | Memory monitoring method and related device | |
CN110389712B (zh) | 数据写入方法及其装置、固态硬盘和计算机可读存储介质 | |
CN106528443B (zh) | 适用于星载数据管理的flash管理***及方法 | |
KR20140019413A (ko) | 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 | |
US20120174076A1 (en) | Systems and methods for profiling servers | |
CN102662799B (zh) | 数据备份的方法、服务器及热备份*** | |
US20130318290A1 (en) | Garbage Collection Implemented in Hardware | |
CN104714898B (zh) | 一种Cache的分配方法和装置 | |
CN107220069B (zh) | 一种针对非易失性内存的Shuffle方法 | |
CN103019740B (zh) | 一种获取导入表和重定位表的方法及装置 | |
CN102169464B (zh) | 一种用于非易失性存储器的缓存方法、装置及智能卡 | |
CN103019739B (zh) | 重定位表的修复方法、程序脱壳方法及相关装置 | |
TWI477966B (zh) | 資料儲存裝置與快閃記憶體操作方法 | |
CN105279007A (zh) | 多核处理器的模拟方法及装置 | |
Zhang et al. | Optimizing data allocation for loops on embedded systems with scratch-pad memory | |
CN103914318A (zh) | 程序启动的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100089 Beijing city Haidian District Road No. 4 North wa Yitai three storey building Patentee after: NSFOCUS Technologies Group Co.,Ltd. Patentee after: NSFOCUS TECHNOLOGIES Inc. Address before: 100089 Beijing city Haidian District Road No. 4 North wa Yitai three storey building Patentee before: NSFOCUS INFORMATION TECHNOLOGY Co.,Ltd. Patentee before: NSFOCUS TECHNOLOGIES Inc. |
|
CP01 | Change in the name or title of a patent holder |