当前位置: 首页 > 专利查询>四川大学专利>正文

基于PE文件改造的内存加载方法技术

技术编号:28036193 阅读:12 留言:0更新日期:2021-04-09 23:18
本发明专利技术公开了基于PE文件改造的内存加载方法,包括压缩目标PE文件;开发PE加载器;将压缩后的目标PE文件和PE加载器拼接后加密,并将加密后的数据编码成图片作为资源插入宿主PE文件;开发代码加载器,用于提取位图资源、解密并执行PE加载器,并将PE加载器插入宿主PE文件的代码段;对宿主PE文件OEP附近的控制流进行劫持得到执行权,释放最终的宿主PE文件并运行。本发明专利技术对宿主PE文件进行改造,将目标PE文件压缩,并与PE加载器拼接、加密后编码成图片资源插入宿主PE文件,后由代码加载器对资源进行提取、解密和执行,并通过入口点模糊、反沙箱检测等技术提升绕过检测机制的能力。

【技术实现步骤摘要】
基于PE文件改造的内存加载方法
本专利技术涉及网络安全
,具体的说,是一种基于PE文件改造的内存加载方法。
技术介绍
随着计算机、互联网技术的飞速发展,信息在当今社会成为一种重要的资源。而即使是最先进的系统也可能受到恶意代码的攻击,恶意软件在目标系统中持续的时间越长,它收集的信息就越多,对目标造成的危害和损失就越大。内存加载就是恶意软件实现隐蔽性的关键技术之一。与传统的恶意软件加载技术不同,使用内存加载的恶意软件不必驻留在硬盘上,而是利用一些合法的、受信任的进程提供的条件或系统组件来运行自身以躲避检测。它们的隐蔽特性是对恶意代码分析人员的巨大挑战。由于内存具有易失性,计算机重启后恶意代码执行痕迹就不复存在,导致对其恶意行为进行取证比较困难。执行恶意功能的代码只存在于内存中,其呈现出的隐蔽性强、潜伏周期久、危害性大等特点,已对信息安全构成巨大的威胁。现有检测机制能发现大部分已知恶意代码技术,但不能应对新的、未知的威胁。因此,研发一种新的可以绕过现有检测机制的内存加载方法,对于增强现有安全机制的恶意代码检测能力和保护重要信息系统基础设施具有重要的实际应用价值。
技术实现思路
本专利技术的目的在于提供一种基于PE文件改造的内存加载方法,用于缓解现有检测机制不能应对未知内存加载方法的问题,为增强现有恶意代码检测机制和机器学习模型提供参考依据。本专利技术通过下述技术方案解决上述问题:一种基于PE文件改造的内存加载方法,包括:步骤S1:压缩目标PE(PortableExecutable)文件;步骤S2:以Shellcode形式开发PE加载器,PE加载器用于执行解压目标PE文件、PE文件内存展开、基址重定位和IAT修复等功能;步骤S3:将压缩后的目标PE文件和PE加载器拼接后加密,并将加密后的数据编码成图片;步骤S4:将图片作为资源插入宿主PE文件;步骤S5:以Shellcode形式开发代码加载器,用于提取位图资源、解密并执行PE加载器,并将PE加载器插入宿主PE文件的代码段;步骤S6:对宿主PE文件程序的入口点OEP附近的控制流进行劫持得到执行权,释放最终的宿主PE文件,运行最终的宿主PE文件即可内存加载目标程序。本专利技术提出一种基于PE文件改造的内存加载方法。通过模拟Windows的PE加载器,设计实现内存加载执行PE文件的基本功能,并将主要功能代码编写为Shellcode,利用图片隐写技术将Shellcode编码成PE文件的图片资源,并使用入口点模糊、反沙箱等技术提升其绕过检测机制的能力,其中入口点模糊是在不改变宿主文件入口点特征的情况下跳转执行代码加载器的代码;反沙箱具体实现可以是为代码加载器设置静默时长,但不限于此。所述步骤S1中采用LZMA算法对读取的目标PE文件进行压缩。所述PE加载器和代码加载器以Shellcode形式开发。为提升Shellcode开发的效率,本专利技术使用C语言配合微软SDK提供的各种头文件中的结构体定义进行开发。开发步骤包括(1)API函数地址获取、(2)常规C语言开发以及(3)Shellcode提取。其中(1)API地址获取的具体过程是:计算需要调用的API函数名称的哈希值HASH1,接着通过PEB枚举当前进程空间中的用户模块列表并遍历各个模块的导出表,同时对遍历到的导出API函数用同样的方法计算哈希值HASH2,若HASH1和HASH2匹配,则HASH2对应的导出API函数地址即为需要调用的API函数地址。值得注意的是,这里的哈希值计算方法不唯一;(2)常规C语言开发指的是在上一步获取了所需API函数地址之后,就可以用地址来调用API,与C语言函数调用无异。为了下一步提取Shellcode方便,将相关C语言代码写进预设名称的函数中,本专利技术实现时将相关代码写入函数Shellcode(),但不限于此。利用VisualStudio的函数顺序设置,将Shellcode代码紧密排列。值得注意的是,由于Shellcode开发时,PE加载器和代码加载器的参数未知,所以在Shellcode()起始部分添加获取外部参数的代码。C语言代码写好后编译生成包含所需Shellcode的二进制可执行文件;(3)Shellcode的提取方法是在上一步生成包含所需Shellcode的二进制可执行文件中,提取出预设的函数部分的二进制数据写入单独的二进制文件,即为所需的Shellcode。提取包含PE加载器主要功能逻辑的shellcode的.bin文件之后和外部参数、压缩的目标PE文件拼装成最终的PE加载器。同样,将外部参数、包含代码加载器主要功能逻辑的shellcode二进制文件拼装得到最终的代码加载器。所述步骤S6中采用HOOK技术对程序的入口点OEP附近的控制流进行劫持得到执行权,使用入口点模糊提升绕过检测机制的能力。本专利技术与现有技术相比,具有以下优点及有益效果:本专利技术对宿主PE文件进行改造,将目标PE文件压缩,并与Shellcode形式开发的PE加载器拼接、加密后编码成图片资源插入宿主PE文件,后由Shellcode形式开发的代码加载器对资源进行提取、解密和执行,并通过代码混淆、反沙箱检测等技术提升绕过检测机制的能力。附图说明图1为本专利技术中对宿主PE文件进行改造的流程图;图2为本专利技术中PE加载器的实现流程图;图3为本专利技术中代码加载器的实现流程图;图4为本专利技术中最后释放的宿主PE文件的执行流程图。具体实施方式下面结合实施例对本专利技术作进一步地详细说明,但本专利技术的实施方式不限于此。实施例:本专利技术提出一种基于PE文件改造的内存加载方法,可内存加载目标PE文件,绕过部分安全产品的检测。如图1所示,改造宿主文件的流程:首先将目标文件和宿主文件读入内存,再对两者进行初始化检查,这一步主要是检查两者是否均为PE文件;接着使用LZMA算法对目标PE文件进行压缩;然后将PE加载器的数据即Shellcode读入内存,并对PARAM_PE_LOADER结构进行填充,这里的PARAM_PE_LOADER结构为Shellcode形式的PE加载器提供外部参数,参数包括①压缩后目标程序的大小、②目标程序原始大小、③PE加载器总大小以及其他参数,其中①②指导目标程序的解压缩、其他参数保证PE加载器的正常运行;接下来拼装PE加载器,整个PE加载器包含PARAM_PE_LOADER结构、Shellcode形式的PE加载器二进制数据以及压缩,目标文件;然后将整个PE加载器加密,并伪装成.bmp格式的文件,这里伪装成.bmp格式是考虑了改造后文件的大小问题,此步骤也可更换使用更精妙的隐写技巧,只要保证后续能够提取并解压目标文件即可;再将.bmp文作为宿主文件的位图资源插入;下一步读取Shellcode形式的代码加载器数据,并填充PARAM_CODE_LOADER结构,这里的PARAM_CODE_LOADER结构为Shellcode形式的代码加载器提供外部参数,参数包括①PE加载器本文档来自技高网...

【技术保护点】
1.一种基于PE文件改造的内存加载方法,其特征在于,包括:/n步骤S1:压缩目标PE文件;/n步骤S2:开发PE加载器,PE加载器用于解压目标PE文件、PE文件内存展开、基址重定位和IAT修复;/n步骤S3:将压缩后的目标PE文件和PE加载器拼接后加密,并将加密后的数据编码成图片;/n步骤S4:将图片作为资源插入宿主PE文件;/n步骤S5:开发代码加载器,用于提取位图资源、解密并执行PE加载器,并将PE加载器插入宿主PE文件的代码段;/n步骤S6:对宿主PE文件OEP附近的控制流进行劫持得到执行权,释放最终的宿主PE文件并运行。/n

【技术特征摘要】
1.一种基于PE文件改造的内存加载方法,其特征在于,包括:
步骤S1:压缩目标PE文件;
步骤S2:开发PE加载器,PE加载器用于解压目标PE文件、PE文件内存展开、基址重定位和IAT修复;
步骤S3:将压缩后的目标PE文件和PE加载器拼接后加密,并将加密后的数据编码成图片;
步骤S4:将图片作为资源插入宿主PE文件;
步骤S5:开发代码加载器,用于提取位图资源、解密并执行PE加载器,并将PE加载器插入宿主PE文件的代码段;
步骤S6:对宿主PE文件OEP附近的控制流进...

【专利技术属性】
技术研发人员:张磊王劭华刘亮
申请(专利权)人:四川大学
类型:发明
国别省市:四川;51

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

1