CN103019828B - 一种基于加壳程序的辅助脱壳方法及装置 - Google Patents

一种基于加壳程序的辅助脱壳方法及装置 Download PDF

Info

Publication number
CN103019828B
CN103019828B CN201210592483.XA CN201210592483A CN103019828B CN 103019828 B CN103019828 B CN 103019828B CN 201210592483 A CN201210592483 A CN 201210592483A CN 103019828 B CN103019828 B CN 103019828B
Authority
CN
China
Prior art keywords
information
data rewriting
address
data
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.)
Active
Application number
CN201210592483.XA
Other languages
English (en)
Other versions
CN103019828A (zh
Inventor
陈锦
刘业欣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nsfocus Technologies Inc
Nsfocus Technologies Group Co Ltd
Original Assignee
NSFOCUS Information Technology Co Ltd
Beijing NSFocus Information Security Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NSFOCUS Information Technology Co Ltd, Beijing NSFocus Information Security Technology Co Ltd filed Critical NSFOCUS Information Technology Co Ltd
Priority to CN201210592483.XA priority Critical patent/CN103019828B/zh
Publication of CN103019828A publication Critical patent/CN103019828A/zh
Application granted granted Critical
Publication of CN103019828B publication Critical patent/CN103019828B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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 (6)

1.一种基于加壳程序的辅助脱壳方法,其特征在于,包括:
在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,
获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围;
其中,选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中数据改写时间和整个内存在所述数据改写时间的数据两类子信息;获取所有数据改写信息中选取的数据改写时间和整个内存在所述数据改写时间两类子信息的数据;以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到所述第一辅助图形;根据所述第一辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围,具体包括:拖动所述横轴,获取运行所述加壳程序过程中整个内存的数据变化,数据包含有函数或模块字符串的内存地址范围可以作为所述重定位表和导入表的所在地址范围;或者,
选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在所述坐标系中,得到所述第一辅助图形;根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接所述第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接所述第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;若所述数据改写执行曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则确定所述数据改写执行曲线进入所述设定内存地址范围时对应的第一数据改写时间与位于所述第一改写时间之前且相邻的第二数据改写时间之间的时间范围为所述加壳程序对应的原始程序的OEP的时间范围,所述设定内存地址范围中的数据在所述确定的OEP的时间范围之前被改写过;在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围;或者,
选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形,具体包括:选取数据改写信息中全部子信息;获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在所述坐标系中,得到所述第一辅助图形;根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接所述第一辅助图形中表示内存熵值的点得到内存熵值曲线;确定内存熵值逐渐增加直到稳定的时间范围是所述加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围;
选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形,具体包括:选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在所述坐标系中,得到所述第二辅助图形;根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:连接所述第二辅助图形中表示代码执行片段地址的点得到代码执行地址曲线;若所述代码执行地址曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则所述加壳程序从开始运行到所述代码执行地址曲线进入所述设定内存地址范围之前的时间范围,为所述加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
2.如权利要求1所述的方法,其特征在于,还包括:
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的入口点OEP的时间范围。
3.如权利要求2所述的方法,其特征在于,根据所述第一辅助图形和所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的时间范围,以及重定位表和导入表的所在地址范围,具体包括:
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及
根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;
所述第一时间范围和所述第二时间范围的交集作为OEP的时间范围,所述第一地址范围和所述第二地址范围的交集作为所述重定位表和导入表的所在地址范围。
4.一种基于加壳程序的辅助脱壳装置,其特征在于,包括:
构建单元,用于在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;
确定单元,用于根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围;
其中,所述构建单元,具体用于:选取数据改写信息中数据改写时间和整个内存在所述数据改写时间的数据两类子信息;获取所有数据改写信息中选取的数据改写时间和整个内存在所述数据改写时间两类子信息的数据;以数据改写时间为横轴、内存地址为纵轴建立动态坐标图,将每一数据改写时间对应的整个内存的数据构建一个图,将得到的每张图与对应的数据改写时间关联得到所述第一辅助图形;所述确定单元,具体用于:拖动所述横轴,获取运行所述加壳程序过程中整个内存的数据变化,数据为函数或模块字符串的内存地址范围可以作为所述重定位表和导入表的所在地址范围;
所述构建单元,具体用于:选取数据改写信息中的数据改写地址、数据改写执行地址和数据改写时间三类子信息;获取所有数据改写信息中选取的数据改写地址、数据改写执行地址和数据改写时间三类子信息的数据;以数据改写时间为横轴、以内存地址为纵轴建立坐标系,将获取的每条数据改写信息的数据改写地址和数据改写执行地址的数据标注在所述坐标系中,得到所述第一辅助图形;所述确定单元,具体用于:连接所述第一辅助图形中表示数据改写地址的点得到数据改写曲线,以及连接所述第一辅助图形中表示数据改写执行地址的点得到数据改写执行曲线;若所述数据改写执行曲线进入设定内存地址范围,之后再未离开所述设定内存地址范围,则确定所述数据改写执行曲线进入所述设定内存地址范围时对应的第一数据改写时间与位于所述第一改写时间之前且相邻的第二数据改写时间之间的时间范围为所述加壳程序对应的原始程序的OEP的时间范围,所述设定内存地址范围中的数据在所述确定的OEP的时间范围之前被改写过;在确定的OEP的时间范围之前获取的数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围;
所述构建单元,具体用于:选取数据改写信息中全部子信息;获取所有数据改写信息中选取全部子信息的数据,根据从每条数据改写信息中获取的全部子信息的数据计算记录每条数据改写信息后的内存熵值;以数据改写时间为横轴、以内存熵值为纵轴建立坐标系,将计算得到的内存熵值标注在所述坐标系中,得到所述第一辅助图形;所述确定单元,具体用于:连接所述第一辅助图形中表示内存熵值的点得到内存熵值曲线;确定内存熵值逐渐增加直到稳定的时间范围是所述加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围;
所述构建单元,具体用于:选取所有数据改写信息中代码片段执行时间和代码片段执行地址两类子信息;获取所有代码流程信息中选取的代码片段执行时间和代码片段执行地址两类子信息的数据;以代码片段执行时间为横轴、内存地址为纵轴建立坐标系,将获取的每条代码流程信息的代码片段执行地址标注在所述坐标系中,得到所述第二辅助图形;所述确定单元,具体用于:连接所述第二辅助图形中表示代码执行片段地址的点得到代码执行地址曲线;若所述代码片段执行曲线地址进入设定内存地址范围,之后再未离开所述设定内存地址范围,则所述加壳程序从开始运行到所述代码执行地址曲线进入所述设定内存地址范围之前的时间范围,为所述加壳程序对应的原始程序的OEP的时间范围;在确定的OEP的时间范围之前获取的每条数据改写信息中出现的内存地址范围作为所述重定位表和所述导入表的所在地址范围。
5.如权利要求4所述的装置,其特征在于,所述确定单元,还用于:
根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的入口点OEP的时间范围。
6.如权利要求5所述的装置,其特征在于,所述确定单元,具体用于:
根据所述第一辅助图形确定所述加壳程序对应的原始程序的OEP的第一时间范围,以及重定位表和导入表的第一所在地址范围;以及
根据所述第二辅助图形确定所述加壳程序对应的原始程序的OEP的第二时间范围,以及重定位表和导入表的第二所在地址范围;
所述第一时间范围和所述第二时间范围的交集作为OEP的时间范围,所述第一地址范围和所述第二地址范围的交集作为所述重定位表和导入表的所在地址范围。
CN201210592483.XA 2012-12-28 2012-12-28 一种基于加壳程序的辅助脱壳方法及装置 Active CN103019828B (zh)

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 CN103019828A (zh) 2013-04-03
CN103019828B true 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)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105989252B (zh) * 2015-12-12 2018-10-12 武汉安天信息技术有限责任公司 一种针对函数级别加壳的脱壳方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154259A (zh) * 2007-08-27 2008-04-02 电子科技大学 通用自动化脱壳引擎与方法
CN101414328A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种用于对文件进行脱壳的装置和方法
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
CN102184103A (zh) * 2011-05-12 2011-09-14 电子科技大学 软件保护壳的壳特征提取方法
CN102184363A (zh) * 2011-05-21 2011-09-14 电子科技大学 基于综合处理的软件壳自动脱壳方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009075116A1 (ja) * 2007-12-12 2009-06-18 Nec Corporation プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びに記憶媒体

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154259A (zh) * 2007-08-27 2008-04-02 电子科技大学 通用自动化脱壳引擎与方法
CN101414328A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种用于对文件进行脱壳的装置和方法
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
CN102184103A (zh) * 2011-05-12 2011-09-14 电子科技大学 软件保护壳的壳特征提取方法
CN102184363A (zh) * 2011-05-21 2011-09-14 电子科技大学 基于综合处理的软件壳自动脱壳方法

Also Published As

Publication number Publication date
CN103019828A (zh) 2013-04-03

Similar Documents

Publication Publication Date Title
KR101568224B1 (ko) 소프트웨어 취약점 분석방법 및 분석장치
CN103714292B (zh) 一种漏洞利用代码的检测方法
CN103365699B (zh) 基于apk的系统api和运行时字符串的提取方法及系统
CN104598793A (zh) 一种指纹认证方法和装置
CN104834859A (zh) 一种Android应用中恶意行为的动态检测方法
EP4080842A1 (en) Method and apparatus for obtaining malicious event information, and electronic device
CN104462943A (zh) 业务系统中非侵入式性能监控装置和方法
JP6282217B2 (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN105204985A (zh) 漏洞检测方法及装置
CN106096391A (zh) 一种进程控制方法及用户终端
CN111709026B (zh) 静态安全检测方法、装置、计算机设备和存储介质
WO2023035751A1 (zh) 移动端应用的智能混淆
US9552284B2 (en) Determining valid inputs for an unknown binary program
CN106843912A (zh) 页面信息获取方法及装置
CN105989294A (zh) 安卓安装包检测方法及装置
JP2021002326A (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
CN103019828B (zh) 一种基于加壳程序的辅助脱壳方法及装置
CN105718793A (zh) 基于修改沙箱环境防止恶意代码识别沙箱的方法及系统
CN105740135A (zh) 一种代码审计方法和装置
CN104200164B (zh) 一种加载器Loader病毒的查杀方法、装置及终端
Kumar et al. Digital investigations for IPv6-based wireless sensor networks
CN105468531A (zh) 一种挖掘漏洞的方法、装置及电子设备
CN111245800B (zh) 网络安全测试方法和装置、存储介质、电子装置
CN110647457B (zh) 数据挖掘方法、数据处理方法和系统
CN105825086A (zh) 一种基于攻击树的rop防护方法

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
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.