一种应用程序加壳的方法技术

技术编号:27306819 阅读:23 留言:0更新日期:2021-02-10 09:21
本发明专利技术公开一种应用程序加壳的方法,先把可执行文件拷贝进内存,并拆分区段提取资源表,修改PE头,把其它区段整合成一个区段放在一起然后加密,再添加三个区段A、B、C,后两个用于存放加壳的代码并修复它们的重定位表,第一个用于存放用于代码检查模块;第二个用于修复被加壳程序的运行环境;第三个用于解压各区段,把A区段的数据整理成dll文件,并加载。并加载。并加载。

【技术实现步骤摘要】
一种应用程序加壳的方法


[0001]本专利技术涉及计算机
,尤其是指一种应用程序加壳的方法。
[0002]
技术介绍

[0003]加壳,是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变,以达到缩小文件体积或加密程序编码的目的。现有的加壳产品有Upx、ASpack之类的压缩壳,例如专利CN201110437932.9、CN201310648196.0之类的加密壳。
[0004]然而,Upx、ASpack之类的压缩壳不能防止ida静态分析,而专利CN201110437932.9、CN201310648196.0公开的加密壳没有压缩代码,加壳后文件体积偏大。因此有必要研究一种方案以解决上述问题。
[0005]
技术实现思路

[0006]有鉴于此,本专利技术针对现有技术存在之缺失,其主要目的是提供一种应用程序加壳的方法,其能够防止静态分析和动态分析,并且尽可能减少文件体积。
[0007]为实现上述目的,本专利技术采用如下之技术方案:一种应用程序加壳的方法,先把可执行文件拷贝进内存,并拆分区段提取资源表,修改PE头,把其它区段整合成一个区段放在一起然后加密,再添加三个区段A、B、C,后两个用于存放加壳的代码并修复它们的重定位表,第一个用于存放用于代码检查模块;加密导入表,加密函数名成表,函数地址表,将它们填入函数名称的哈希值,将入口点指向C区段中的函数。
[0008]优选的,所述区段B和C的代码均是从准备好的dll文件中的区段拷贝而来,区段B主要是用来解密和修复目标文件,区段C主要是用来解压目标文件。
[0009]优选的,所述区段B的代码流程主要分为以下几步,每步运行时,解密下一步代码:获取关键函数;将区段B中关键的代码计算成哈希值,用于解密目标区段,然后拆分区段,并把资源表和它们整合到一起,以达到恢复成原始原始的内存排布的样子;按照目标文件的映射粒度来映射区段;解密导入表,加载导入表中的文件;加密函数地址表,将函数地址表指向一个新的结构;先是传入模块名称的哈希值,再传入函数名称的哈希值,然后跳转到函数地址计算函数;修复TLS;检查入口点的一部分代码,跳转到入口点。
[0010]优选的,所述区段C的代码主要流程是加载关键模块,获取所需要的函数;创建线程清除硬件断点,关闭日志;解压其它的区段;全代码检查;申请堆空间,存放解密后的B区段代码,并修复区段B的重定位表;解密区段A,手动将它映射进内存,并在模块链表中添加该模块信息;进入解密后的区段B的起始函数。
[0011]本专利技术与现有技术相比具有明显的优点和有益效果,具体而言,由上述技术方案可知:
通过采用本专利技术方法,每步函数运行时,将自身计算成哈希值,解密下一步,防止ida静态编译,同时防止程序调试。加壳时先进行压缩减少文件体积,运行后再自我解压;手动加载导入表,并将自身区段里的dll文件手动加载进去,并加密函数名称表,增加脱壳难度。
[0012]附图说明
[0013]图1是本专利技术之较佳实施例的流程示意图;图2是本专利技术之较佳实施例中区段B的代码流程示意图。
[0014]具体实施方式
[0015]本专利技术揭示了一种应用程序加壳的方法,先把可执行文件拷贝进内存,并拆分区段提取资源表,修改PE头,把其它区段整合成一个区段放在一起然后加密,再添加三个区段A、B、C,后两个用于存放加壳的代码并修复它们的重定位表,第一个用于存放用于代码检查模块;加密导入表,加密函数名成表,函数地址表,将它们填入函数名称的哈希值,将入口点指向C区段中的函数(如图1所示)。
[0016]所述区段B和C的代码均是从准备好的dll文件中的区段拷贝而来,区段B主要是用来解密和修复目标文件,区段C主要是用来解压目标文件。
[0017]如图2所示,所述区段B的代码流程主要分为以下几步,每步运行时,解密下一步代码:获取关键函数;将区段B中关键的代码计算成哈希值,用于解密目标区段,然后拆分区段,并把资源表和它们整合到一起,以达到恢复成原始原始的内存排布的样子;按照目标文件的映射粒度来映射区段;解密导入表,加载导入表中的文件;加密函数地址表,将函数地址表指向一个新的结构;先是传入模块名称的哈希值,再传入函数名称的哈希值,然后跳转到函数地址计算函数;修复TLS;检查入口点的一部分代码,跳转到入口点。
[0018]以及,所述区段C的代码主要流程是加载关键模块,获取所需要的函数;创建线程清除硬件断点,关闭日志;解压其它的区段;全代码检查;申请堆空间,存放解密后的B区段代码,并修复区段B的重定位表;解密区段A,手动将它映射进内存,并在模块链表中添加该模块信息;进入解密后的区段B的起始函数。
[0019]本专利技术的设计重点是:通过采用本专利技术方法,每步函数运行时,将自身计算成哈希值,解密下一步,防止ida静态编译,同时防止程序调试。加壳时先进行压缩减少文件体积,运行后再自我解压;手动加载导入表,并将自身区段里的dll文件手动加载进去,并加密函数名称表,增加脱壳难度。
[0020]以上结合具体实施例描述了本专利技术的技术原理。这些描述只是为了解释本专利技术的原理,而不能以任何方式解释为对本专利技术保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本专利技术的其它具体实施方式,这些方式都将落入本专利技术的保护范围之内。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用程序加壳的方法,其特征在于:先把可执行文件拷贝进内存,并拆分区段提取资源表,修改PE头,把其它区段整合成一个区段放在一起然后加密,再添加三个区段A、B、C,后两个用于存放加壳的代码并修复它们的重定位表,第一个用于存放用于代码检查模块;加密函数地址表,将它填入函数名称的哈希值,将入口点指向C区段中的函数。2.如权利要求1所述的一种应用程序加壳的方法,其特征在于:所述区段B和C的代码均是从准备好的dll文件中的区段拷贝而来,区段B主要是用来解密和修复目标文件,区段C主要是用来解压目标文件。3.如权利要求1所述的一种应用程序加壳的方法,其特征在于:所述区段B的代码流程主要分为以下几步,每步运行时,解密下一步代码:获取关键函数;将区段B中关键的代码计算成哈希值,用...

【专利技术属性】
技术研发人员:吴建亮胡鹏张振林
申请(专利权)人:广州锦行网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1