CN103019828A - 一种基于加壳程序的辅助脱壳方法及装置 - Google Patents
一种基于加壳程序的辅助脱壳方法及装置 Download PDFInfo
- Publication number
- CN103019828A CN103019828A CN201210592483XA CN201210592483A CN103019828A CN 103019828 A CN103019828 A CN 103019828A CN 201210592483X A CN201210592483X A CN 201210592483XA CN 201210592483 A CN201210592483 A CN 201210592483A CN 103019828 A CN103019828 A CN 103019828A
- Authority
- CN
- China
- Prior art keywords
- information
- data rewriting
- data
- address
- sub
- 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
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于加壳程序的辅助脱壳方法及装置,该方法包括:在对加壳程序执行脱壳操作前,获取运行加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。该方案节省人力资源,又能提高效率。
Description
技术领域
本发明涉及计算机技术领域,尤指一种基于加壳程序的辅助脱壳方法及装置
背景技术
加壳是可执行程序资源压缩的简称,是保护文件的常用手段,其原理是利用特殊的算法,对可执行程序里的资源进行压缩、加密。加壳程序可以直接运行,但是不能查看原始程序,要经过脱壳才可以查看。脱壳的过程主要为三步:第一步,确定原始程序的入口点(Original Entry Point,OEP);第二步,修复导入表和重定位表;第三步,将内存中的原始程序写入文件,更改程序的新入口地址为OEP,这一通常成为转储(Dump)。确定OEP、修复导入表和重定位表后,即可完成脱壳,得到原始程序,可见脱壳的关键就是确定OEP、修复导入表和重定位表。
随着现代加密技术的飞速发展,有些壳的保护强度极高,目前只能依靠人工分析来脱壳,研究人员从头到尾通过手工调试才能弄清壳的大体流程,进而定位OEP、导入表、重定位表的精确位置,通过人工分析脱壳的方式既浪费人力资源,效率还非常低,如果首先能对加壳程序进行辅助脱壳,大致定位出OEP、导入表、重定位表可能的位置范围,然后研究人员再对确定出的位置范围进行对手工调试,定位出OEP、导入表、重定位表的精确位置,则可以节省很多人力资源,并能提高效率。但是,目前没有对加壳程序进行辅助脱壳的方法。
发明内容
本发明实施例提供一种基于加壳程序的辅助脱壳方法及装置,用以实现对加壳程序进行辅助脱壳。
一种基于加壳程序的辅助脱壳方法,包括:
在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,
获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
一种基于加壳程序的辅助脱壳装置,包括:
构建单元,用于在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
确定单元,用于根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
本发明有益效果如下:
本发明实施例提供的基于加壳程序的辅助脱壳方法及装置方法及装置,通过在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。该方案可以首先获取运行加壳程序过程中产生的数据改写信息构建第一辅助图形,和/或获取运行加壳程序过程中产生的代码流程信息构建,然后根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围,然后后续可以进一步重定位表和导入表的精确地址,这相对于现有技术只能依靠技术人员从头到尾通过手工调试才能弄清壳的大体流程,进而定位导入表、重定位表的精确位置的方式,既节省人力资源,又能提高效率。
附图说明
图1为本发明实施例中第一种基于加壳程序的辅助脱壳方法的流程图;
图2为本发明实施例中第二种基于加壳程序的辅助脱壳方法的流程图;
图3为本发明实施例中第三种基于加壳程序的辅助脱壳方法的流程图;
图4为本发明实施例中第一种第一辅助图形的示意图;
图5为本发明实施例中第二种第一辅助图形的示意图;
图6为本发明实施例中第三种第一辅助图形的示意图;
图7为本发明实施例中第二辅助图形的示意图;
图8为本发明实施例中基于加壳程序的辅助脱壳装置的结构示意图。
具体实施方式
为了实现对加壳程序进行辅助脱壳,本发明实施例提供的基于加壳程序的辅助脱壳方法,该方法可以有三种方案:
第一种方案的流程如图1所示,具体执行步骤如下:
S10:在对加壳程序执行脱壳操作前,获取运行加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息。
在对加壳程序执行脱壳操作之前,首先获取运行加壳程序产生的数据改写信息,可以通过调试器、虚拟机或是其他监控技术,记录下加壳程序运行过程中的数据改写信息。程序运行中会改写内存中的数据,每一次改写的数据执行地址E、数据改写地址A、改写长度L和改写内容D记为一条数据改写信息,则可以得到E1-A1-L1-D1、E2-A2-L2-D2……En-An-Ln-Dn所有的数据改写信息,所有的数据改写信息组成了加壳程序的数据改写信息,由上可见每条数据改写信息都会包含很多类的子信息。
S11:选取数据改写信息中的至少两类子信息。
S12:根据数据改写信息中选取的至少两类子信息的数据构建第一辅助图形。
由于每条数据改写信息都会包含至少两类子信息,那么就可以选取至少两类子信息,然后获取所有数据改写信息中这至少两类子信息的数据。例如,选取的数据改写执行地址E和数据改写地址A这两类子信息,获取每条数据改写信息中的E和A的数据,即(E1-A1)、(E2-A2)……(En-An)。
S13:根据第一辅助图形确定加壳程度对应的原始程序的重定位表和导入表的所在地址范围。
可以只建立一个第一辅助图形,然后根据这个第一辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围,也可以建立多个第一辅助图形,然后根据多个第一辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
第二种方案的的流程如图2所示,具体执行步骤如下:
S20:在对加壳程序执行脱壳操作前,获取运行加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息。
在对加壳程序执行脱壳操作之前,首先获取运行加壳程序产生的代码流程信息,可以通过调试器、虚拟机或是其他监控技术,记录下加壳程序运行过程中的数据改写信息。程序运行后,会有多个跳转,而这些跳转可能是一个循环,也可能是一个函数调用,用跳转指令来分割程序为若干代码片段,每个代码片段包含片段起始地址X和片段结束地址Y,则可以得到X1-Y1、X2-Y2...Xn-Yn所有代码流程信息,所有的代码流程信息组成了加壳程序的代码流程信息。其中,每个代码流程信息还可以包括,该代码片段是否引发异常,是否存在循环、是否是一个函数入口、所在模块和函数名、是否函数返回等等信息。可见,每条代码流程信息包含至少两类子信息
S21:选取代码流程信息中的至少两类子信息。
S22:根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形。
由于每条代码流程信息都会包含至少两类子信息,那么就可以选取至少两类子信息,然后获取所有代码流程信息中这至少两类子信息的数据。例如,选取片段起始地址X和片段结束地址Y这两类子信息,获取每条代码流程信息中的X和Y的数据,即(X1-Y1)、(X2-Y2)……(Xn-Yn)。
S23:根据第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
可以只建立一个第二辅助图形,然后根据这个第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围,也可以建立多个第二辅助图形,然后根据多个第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
第三种方案的的流程如图3所示,具体执行步骤如下:
S30:在对加壳程序执行脱壳操作前,获取运行加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息。
S31:选取数据改写信息中的至少两类子信息。
S32:根据数据改写信息中选取的至少两类子信息的数据构建第一辅助图形。
S33:获取运行加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息。
S34:选取代码流程信息中的至少两类子信息。
S35:根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形。
S36:根据第一辅助图形和第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
可以先执行S30-S32,再执行S33-S34;也可以先执行S33-S34,再执行S30-S32;也可以同时执行S30-S32和S33-S34。也就是说构建第一辅助图形和第二辅助图形没有严格的先后顺序。
该方案可以首先获取运行加壳程序过程中产生的数据改写信息构建第一辅助图形,和/或获取运行加壳程序过程中产生的代码流程信息构建,然后根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围,然后后续可以进一步重定位表和导入表的精确地址,这相对于现有技术只能依靠技术人员从头到尾通过手工调试才能弄清壳的大体流程,进而定位导入表、重定位表的精确位置的方式,既节省人力资源,又能提高效率。
下面详细介绍三种建立第一辅助图形,并根据第一辅助图形为加壳程序辅助脱壳的方法。
第一种,上述S11-S12或S34-35中的选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中数据改写时间和整个内存在数据改写时间的数据两类子信息;获取所有数据改写信息中选取的数据改写时间和整个内存在数据改写时间两类子信息的数据;以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到第一辅助图形。
上述S13中根据第一辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围,具体包括:拖动横轴,获取运行加壳程序过程中整个内存的数据变化,数据为函数或模块字符串的内存地址范围可以作为重定位表和导入表的所在地址范围。
假设得到的第一辅助图形如图4所示,从图中可以看出F时刻整个内存的状态,0表示该段内存地址范围内没有数据,数据值表示该段内存地址范围内有函数或者字符串,每一时刻都有一个这样的图,拖动横轴,数据为函数或字符串的内存地址范围可以作为重定位表和导入表的所在地址范围。当然也可以采用其他的形式表示内存地址中数据为零,以及为函数或者字符串,例如采用不同的颜色表示,等等。
较佳的,上述基于加壳程序的辅助脱壳方法,还包括:根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的OEP的时间范围。
上述基于加壳程序的辅助脱壳方法还可以辅助确定加壳程序对应的原始程序的OEP的时间范围。
第二种,上述S11-12或S31-32中的选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在坐标系中,得到第一辅助图形。
上述根据第一辅助图形确定加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;若数据改写执行曲线进入设定内存地址范围,之后再未离开设定内存地址范围,则确定数据改写执行曲线进入设定内存地址范围时对应的第一数据改写时间与位于第一改写时间之前且相邻的第二数据改写时间之间的时间范围为加壳程序对应的原始程序的OEP的时间范围,设定内存地址范围中的数据在确定的OEP的时间范围之前被改写过;在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
假设得到的第一辅助图形如图5所示,A1、A2、A3、A4、A5、A6、A7表示数据改写地址,E1、E2、E3、E4、E5、E6、E7表示数据改写执行地址,将A1、A2、A3、A4、A5、A6、A7连接得到数据改写执行地址曲线,将E1、E2、E3、E4、E5、E6、E7连接得到数据改写曲线,从图中可以看出,数据改写执行曲线在到达E5后,就跳转到A1-A4对应的内存地址范围中,之后未离开该区域,E5对应的为第一数据改写时间,位于第一改写时间之前且相邻的是第二数据改写时间,即E4对应的为第二数据改写时间,因此可以确定E4-E5对应的时间范围是数据改写时间范围,也就是加壳程序对应的原始程序的OEP的时间范围,A1-A4对应的内存地址范围就是设定内存地址范围;并且,设定内存区域中的数据在确定的OEP的时间范围之前被改写过。在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
第三种,上述S11-12或S31-32中的选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中全部子信息;获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在坐标系中,得到第一辅助图形。
内存熵值的计算方法为现在技术,这里不再赘述。
根据第一辅助图形确定加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接第一辅助图形中表示内存熵值的点得到内存熵值曲线;确定内存熵值逐渐增加直到稳定的时间范围是加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
假设得到的第一辅助图形如图6所示,从图中可以看出,B到D的内存熵值逐渐增加,从D点开始内存熵值稳定,那么B和D之间的时间范围就是OEP的时间范围,在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。然后可进一步确定OEP的精确时间,以及重定位表和导入表的精确地址。
以上仅仅是列举了三种第一辅助图形,还有很多情况,这里不再一一说明。
下面详细介绍建立第二辅助图形,并根据第二辅助图形为加壳程序辅助脱壳的方法。
具体的,上述S21-22或S34-35中的选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形,具体包括:选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在坐标系中,得到第二辅助图形。
上述根据第二辅助图形确定加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接第二辅助图形中标识代码执行片段执行地址的点得到代码执行地址曲线;若代码片段执行地址曲线进入设定内存地址范围,之后再未离开设定内存地址范围,则加壳程序从开始运行到代码执行地址曲线进入设定内存地址范围之前的时间范围为加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
假设得到的第二辅助图形如图7所示,从图中可以看出片段4和片段5之间的代码执行地址的跨度值最大,也就是说从片段5开始,代码执行地址进入到设定内存地址范围,即大于等于片段5对应的内存地址的内存地址范围,然后再也没有离开这个内存地址范围,那么代码片段执行地址进入设定内存地址范围的时间范围为加壳程序对应的原始程序的OEP的时间范围;将片段1-4的内存地址范围作为重定位表和导入表的所在地址范围。然后可进一步确定OEP的精确时间,以及重定位表和导入表的精确地址。
以上仅仅是列举了一种第二辅助图形,还有很多情况,这里不再一一说明。
具体的,上述根据第一辅助图形和第二辅助图形确定加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
根据第一辅助图形确定加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及根据第二辅助图形确定加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;第一时间范围和第二时间范围的交集作为OEP的时间范围,第一地址范围和第二地址范围的交集作为重定位表和导入表的所在地址范围。
可以将第一辅助图形和第二辅助图形结合起来共同确定OEP的时间范围,以及重定位表和导入表的地址范围。
基于同一发明构思,本发明实施例提供一种基于加壳程序的辅助脱壳装置,该装置的结构如图8所示,包括:
构建单元80,用于在对加壳程序执行脱壳操作前,获取运行加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形。
确定单元81,用于根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
具体的,上述构建单元80,具体用于:选取数据改写信息中数据改写时间和整个内存在数据改写时间的数据两类子信息;获取所有数据改写信息中选取的数据改写时间和整个内存在数据改写时间两类子信息的数据;以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到第一辅助图形。
上述确定单元81,具体用于:拖动横轴,获取运行加壳程序过程中整个内存的数据变化,数据为函数或字符串的内存地址范围可以作为重定位表和导入表的所在地址范围。
较佳的,上述确定单元81,还用于:根据第一辅助图形和/或第二辅助图形确定加壳程序对应的原始程序的OEP的时间范围。
具体的,上述构建单元80,具体用于:选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在坐标系中,得到第一辅助图形。
确定单元81,具体包括:连接第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;若数据改写执行曲线进入设定内存地址范围,之后再未离开设定内存地址范围,则确定数据改写执行曲线进入设定内存地址范围时对应的第一数据改写时间与位于第一改写时间之前且相邻的第二数据改写时间之间的时间范围为加壳程序对应的原始程序的OEP的时间范围,设定内存地址范围中的数据在确定的OEP的时间范围之前被改写过;在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
具体的,上述构建单元80,具体用于:选取数据改写信息中全部子信息;获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在坐标系中,得到第一辅助图形。
确定单元81,具体用于:连接第一辅助图形中表示内存熵值的点得到内存熵值曲线;确定内存熵值逐渐增加直到稳定的时间范围是加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
具体的,上述构建单元80,具体用于:选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在坐标系中,得到第二辅助图形。
上述确定单元81,具体用于:连接第二辅助图形中表示代码执行片段地址的点得到代码执行地址曲线;若代码执行地址曲线进入设定内存地址范围,之后再未离开设定内存地址范围,则加壳程序从开始运行到代码执行曲线进入设定内存地址范围之前的时间范围为加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为重定位表和导入表的所在地址范围。
具体的,上述确定单元81,具体用于:根据第一辅助图形确定加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及根据第二辅助图形确定加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;第一时间范围和第二时间范围的交集作为OEP的时间范围,第一地址范围和第二地址范围的交集作为重定位表和导入表的所在地址范围。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种基于加壳程序的辅助脱壳方法,其特征在于,包括:
在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,
获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
2.如权利要求1所述的方法,其特征在于,选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:
选取数据改写信息中数据改写时间和整个内存在所述数据改写时间的数据两类子信息;
获取所有数据改写信息中选取的数据改写时间和整个内存在所述数据改写时间两类子信息的数据;
以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到所述第一辅助图形;
根据所述第一辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围,具体包括:
拖动所述横轴,获取运行所述加壳程序过程中整个内存的数据变化,数据包含有函数或模块字符串的内存地址范围可以作为所述重定位表和导入表的所在地址范围。
3.如权利要求1所述的方法,其特征在于,还包括:
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的入口点OEP的时间范围。
4.如权利要求3所述的方法,其特征在于,选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:
选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;
获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;
以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在所述坐标系中,得到所述第一辅助图形;
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
连接所述第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接所述第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;
若所述数据改写执行曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则确定所述数据改写执行曲线进入所述设定内存地址范围时对应的第一数据改写时间与位于所述第一改写时间之前且相邻的第二数据改写时间之间的时间范围为所述加壳程序对应的原始程序的OEP的时间范围,所述设定内存地址范围中的数据在所述确定的OEP的时间范围之前被改写过;
在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
5.如权利要求3所述的方法,其特征在于,选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:
选取数据改写信息中全部子信息;
获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;
以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在所述坐标系中,得到所述第一辅助图形;
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
连接所述第一辅助图形中表示内存熵值的点得到内存熵值曲线;
确定内存熵值逐渐增加直到稳定的时间范围是所述加壳程序对应的原始程序的OEP的时间范围;
在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
6.如权利要求3所述的方法,其特征在于,选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形,具体包括:
选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;
获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;
以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在所述坐标系中,得到所述第二辅助图形;
根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
连接所述第二辅助图形中表示代码执行片段地址的点得到代码执行地址曲线;
若所述代码执行地址曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则所述加壳程序从开始运行到所述代码执行地址曲线进入所述设定内存地址范围之前的时间范围,为所述加壳程序对应的原始程序的OEP的时间范围;
在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
7.如权利要求3所述的方法,其特征在于,根据所述第一辅助图形和所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及
根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;
所述第一时间范围和所述第二时间范围的交集作为OEP的时间范围,所述第一地址范围和所述第二地址范围的交集作为所述重定位表和导入表的所在地址范围。
8.一种基于加壳程序的辅助脱壳装置,其特征在于,包括:
构建单元,用于在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
确定单元,用于根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
9.如权利要求8所述的装置,其特征在于,所述构建单元,具体用于:
选取数据改写信息中数据改写时间和整个内存在所述数据改写时间的数据两类子信息;
获取所有数据改写信息中选取的数据改写时间和整个内存在所述数据改写时间两类子信息的数据;
以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到所述第一辅助图形;
所述确定单元,具体用于:拖动所述横轴,获取运行所述加壳程序过程中整个内存的数据变化,数据为函数或模块字符串的内存地址范围可以作为所述重定位表和导入表的所在地址范围。
10.如权利要求8所述的装置,其特征在于,所述确定单元,还用于:
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的入口点OEP的时间范围。
11.如权利要求10所述的装置,其特征在于,所述构建单元,具体用于:
选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;
获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;
以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在所述坐标系中,得到所述第一辅助图形;
所述确定单元,具体用于:
连接所述第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接所述第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;
若所述数据改写执行曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则确定所述数据改写执行曲线进入所述设定内存地址范围时对应的第一数据改写时间与位于所述第一改写时间之前且相邻的第二数据改写时间之间的时间范围为所述加壳程序对应的原始程序的OEP的时间范围,所述设定内存地址范围中的数据在所述确定的OEP的时间范围之前被改写过;
在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
12.如权利要求10所述的装置,其特征在于,所述构建单元,具体用于:
选取数据改写信息中全部子信息;
获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;
以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在所述坐标系中,得到所述第一辅助图形;
所述确定单元,具体用于:
连接所述第一辅助图形中表示内存熵值的点得到内存熵值曲线;
确定内存熵值逐渐增加直到稳定的时间范围是所述加壳程序对应的原始程序的OEP的时间范围;
在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
13.如权利要求10所述的装置,其特征在于,所述构建单元,具体用于:
选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;
获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;
以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在所述坐标系中,得到所述第二辅助图形;
所述确定单元,具体用于:
连接所述第二辅助图形中表示代码执行片段地址的点得到代码执行地址曲线;
若所述代码片段执行曲线地址进入设定内存地址范围,之后再未离开所述设定内存地址范围,则所述加壳程序从开始运行到所述代码执行地址曲线进入所述设定内存地址范围之前的时间范围,为所述加壳程序对应的原始程序的OEP的时间范围;
在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
14.如权利要求10所述的装置,其特征在于,所述确定单元,具体用于:
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及
根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;
所述第一时间范围和所述第二时间范围的交集作为OEP的时间范围,所述第一地址范围和所述第二地址范围的交集作为所述重定位表和导入表的所在地址范围。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210592483.XA CN103019828B (zh) | 2012-12-28 | 2012-12-28 | 一种基于加壳程序的辅助脱壳方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210592483.XA CN103019828B (zh) | 2012-12-28 | 2012-12-28 | 一种基于加壳程序的辅助脱壳方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019828A true CN103019828A (zh) | 2013-04-03 |
CN103019828B CN103019828B (zh) | 2015-06-17 |
Family
ID=47968459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210592483.XA Active CN103019828B (zh) | 2012-12-28 | 2012-12-28 | 一种基于加壳程序的辅助脱壳方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019828B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105989252A (zh) * | 2015-12-12 | 2016-10-05 | 武汉安天信息技术有限责任公司 | 一种针对函数级别加壳的脱壳方法及*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154259A (zh) * | 2007-08-27 | 2008-04-02 | 电子科技大学 | 通用自动化脱壳引擎与方法 |
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 | 电子科技大学 | 软件保护壳的壳特征提取方法 |
CN102184363A (zh) * | 2011-05-21 | 2011-09-14 | 电子科技大学 | 基于综合处理的软件壳自动脱壳方法 |
-
2012
- 2012-12-28 CN CN201210592483.XA patent/CN103019828B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154259A (zh) * | 2007-08-27 | 2008-04-02 | 电子科技大学 | 通用自动化脱壳引擎与方法 |
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 | 电子科技大学 | 软件保护壳的壳特征提取方法 |
CN102184363A (zh) * | 2011-05-21 | 2011-09-14 | 电子科技大学 | 基于综合处理的软件壳自动脱壳方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105989252A (zh) * | 2015-12-12 | 2016-10-05 | 武汉安天信息技术有限责任公司 | 一种针对函数级别加壳的脱壳方法及*** |
CN105989252B (zh) * | 2015-12-12 | 2018-10-12 | 武汉安天信息技术有限责任公司 | 一种针对函数级别加壳的脱壳方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN103019828B (zh) | 2015-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104834859B (zh) | 一种Android应用中恶意行为的动态检测方法 | |
CN102132289B (zh) | 用于代码迷惑的方法及设备 | |
Bao et al. | {BYTEWEIGHT}: Learning to recognize functions in binary code | |
Crussell et al. | Andarwin: Scalable detection of android application clones based on semantics | |
CN105550594A (zh) | 安卓应用文件的安全性检测方法 | |
CN103365699B (zh) | 基于apk的***api和运行时字符串的提取方法及*** | |
CN103532793A (zh) | 一种信息***安全性自动化渗透测试方法 | |
CN105446741A (zh) | 一种基于api比对的移动应用程序辨识方法 | |
CN105468970B (zh) | 一种基于防御网的Android应用程序防篡方法及*** | |
WO2023035751A1 (zh) | 移动端应用的智能混淆 | |
US9552284B2 (en) | Determining valid inputs for an unknown binary program | |
CN105303114A (zh) | 基于windows的***服务函数调用方法及装置 | |
CN108733990B (zh) | 一种基于区块链的文件保护方法及终端设备 | |
JP7197942B2 (ja) | ビッグデータモバイルソフトウェアの類似性についての記述エントロピーに基づくインテリジェントな決定方法 | |
CN103019828B (zh) | 一种基于加壳程序的辅助脱壳方法及装置 | |
CN103971055B (zh) | 一种基于程序切片技术的安卓恶意软件检测方法 | |
CN109040089B (zh) | 网络策略审计方法、设备及计算机可读存储介质 | |
CN104077528A (zh) | 病毒检测方法、装置以及终端 | |
CN102831334A (zh) | 一种目标地址定位方法和*** | |
JP2021002326A (ja) | ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化 | |
US20240095360A1 (en) | Risc-v and o-cfi mechanism-based defense method and apparatus for code reuse attacks | |
CN109670317B (zh) | 一种基于原子控制流图的物联网设备继承性漏洞挖掘方法 | |
CN105825086A (zh) | 一种基于攻击树的rop防护方法 | |
KR102174475B1 (ko) | 머신러닝을 이용하여 애플리케이션의 난독화 또는 패킹 여부를 식별하는 시스템과, 그것을 포함하는 은폐된 멀웨어 탐지 분류 시스템 및 방법 | |
CN114510723B (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 |