【技术实现步骤摘要】
本专利技术涉及计算机
,尤指一种基于加壳程序的辅助脱壳方法及装置
技术介绍
加壳是可执行程序资源压缩的简称,是保护文件的常用手段,其原理是利用特殊的算法,对可执行程序里的资源进行压缩、加密。加壳程序可以直接运行,但是不能查看原始程序,要经过脱壳才可以查看。脱壳的过程主要为三步第一步,确定原始程序的入口点(Original Entry Point, OEP);第二步,修复导入表和重定位表;第三步,将内存中的原始程序写入文件,更改程序的新入口地址为0ΕΡ,这一通常成为转储(Dump)。确定0ΕΡ、修复导入表和重定位表后,即可完成脱壳,得到原始程序,可见脱壳的关键就是确定0ΕΡ、修复导入表和重定位表。 随着现代加密技术的飞速发展,有些壳的保护强度极高,目前只能依靠人工分析来脱壳,研究人员从头到尾通过手工调试才能弄清壳的大体流程,进而定位0ΕΡ、导入表、重定位表的精确位置,通过人工分析脱壳的方式既浪费人力资源,效率还非常低,如果首先能对加壳程序进行辅助脱壳,大致定位出0ΕΡ、导入表、重定位表可能的位置范围,然后研究人员再对确定出的位置范围进行对手工调试,定位出0ΕΡ、导入表、重定位表的精确位置,则可以节省很多人力资源,并能提高效率。但是,目前没有对加壳程序进行辅助脱壳的方法。
技术实现思路
本专利技术实施例提供一种基于加壳程序的辅助脱壳方法及装置,用以实现对加壳程序进行辅助脱壳。—种基于加壳程序的辅助脱壳方法,包括在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息 ...
【技术保护点】
一种基于加壳程序的辅助脱壳方法,其特征在于,包括:在对所述加壳程序执行脱壳操作前,获取运行所述加壳程序过程中产生的数据改写信息,每条数据改写信息包含至少两类子信息;选取数据改写信息中的至少两类子信息,根据所有数据改写信息中选取的至少两类子信息的数据构建第一辅助图形;和/或,获取运行所述加壳程序过程中产生的代码流程信息,每条代码流程信息包含至少两类子信息;选取代码流程信息中的至少两类子信息,根据所有代码流程信息中选取的至少两类子信息的数据构建第二辅助图形;根据所述第一辅助图形和/或所述第二辅助图形确定所述加壳程序对应的原始程序的重定位表和导入表的所在地址范围。
【技术特征摘要】
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的时间范围,以及重定位表和导入表的所在地址范围,具体包括 根...
【专利技术属性】
技术研发人员:陈锦,刘业欣,
申请(专利权)人:北京神州绿盟信息安全科技股份有限公司,北京神州绿盟科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。