一种PE文件代码合并执行方法技术

技术编号:3823900 阅读:646 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种PE文件代码合并执行方法,属于文件加密技术,解决了现有技术中单一文件代码容易被非法利用的问题。该PE文件代码合并执行方法包括:(1)建立PE文件头;(2)建立区段信息;(3)将各个PE文件数据合并到上述相应的区段,形成一个新的PE文件;(4)处理各个PE文件之间的相互调用关系;(5)将处理各个PE文件的初始化数据的代码附加到新的PE文件中;(6)可根据实际需要,为合并后的PE文件添加附加处理代码,扩展相应的功能。本发明专利技术不仅实现了多个PE文件代码的合并,而且合并后的PE文件可实现动态或静态加密或添加额外的功能代码,并且能够有效地多文件代码进行保护,防止单一文件代码被非法利用。

【技术实现步骤摘要】

本专利技术涉及一种文件合并方法,具体地说,是涉及一种PE文件 合并后能够实现加密保护的PE文件代码合并执行方法
技术介绍
传统的PE文件其运行与相互调用均存在于一个进程的不连续的 线性内存空间中,每一个新的PE文件被加载,Windows根据PE文件 的相关信息从进程的内存空间中开辟一块新的内存,然后将PE文件 的数据载入此内存块中,然后处理PE文件的导入表等相关需要初始 化的数据,每个PE文件被装入的内存起始地址与相互之间的内存地 址差值均不固定,每次初始化新装入的PE文件均需要重新计算并修 正PE相互之间的调用代码。 一般情况下,每个PE文件均是一个单独 的文件。传统的PE文件之间的代码相互之间的调用如图1所示,假设有A. EXE与B. DLL两个PE文件,A. EXE被装入内存的从0x00400000开 始大小为0x80000字节的内存块中,同时B.DLL被装入同一进程的从 0x00600000开始大小为0x100000字节的内存块中,在A. EXE的相对 与起始地址向后偏移0x3000字节处也就是0x403000处有一段调用B. DLL的0x602000处的代码,该代码通过位于0x470000处的导入表 获取B. DLL相应代码的内存地址值,此地址值由系统在载入A. EXE时 通过B. DLL的导出表计算得出并写入到内存0x470000处。当A. EXE的代码执行到0x403000处便跳转到B. DLL内存空间中的0x00602000 处执行相应代码,执行完毕并返回后,继续0x403005处执行,从而 达到了代码之间的相互调用的目的。传统方法要求,各PE文件必须为一独立的文件,并且其相互之 间的调用在每次装入时都需要重新计算并作相应修正。此方法不能有 效的对PE的代码进行保护以及防止被非法利用。
技术实现思路
本专利技术的目的在于提供一种PE文件代码合并执行方法,通过将 多个文件合并为一个文件,实现文件的加密保护的目的,从而避免单 一文件被非法利用。为了实现上述目的,本专利技术采用的技术方案如下一种PE文件代码合并执行方法,其特征在于,所述文件合并加密保护方法包括以下步骤(1)建立PE文件头;(2)建立区段信息; (3)将各个PE文件数据合并到上述相应的区段,形成一个新的PE 文件;(4)处理各个PE文件之间的相互调用关系;(5)将处理各个PE文件的关键初始化数据的代码附加到新建立的PE文件中;(6)根 据实际需要,为合并后的PE文件添加附加处理代码。所述步骤(1)的方法为从需要合并的多个PE文件中任意选择 一个PE文件并复制其文件头。所述步骤(1)的方法还包括对新复制的文件头进行修正。所述步骤(2)还包括将可执行和可读写属性添加至区段属性标识中。所述步骤(2)中区段信息至少为一个。所述步骤(3)的具体步骤为a.根据每个PE文件的重定位信息 对其代码分别进行重新修正;b.将PE文件数据逐个完整地写入步骤 (2)所建立的区段中;c.合并PE文件的重定位信息,并修正;d. 建立新的重定位表并写入合并后的PE文件中。所述a中对PE文件代 码的修正依据为前一个PE文件写入后的代码末尾的内存地址减去 被修正的PE文件的PE文件头的虚拟大小,并省略对PE文件头的复 制。所述c中重定位信息修正的依据为前一个PE文件写入后的代 码末尾的内存地址减去被修正的PE文件的PE文件头的虚拟大小。所述步骤(4)具体包括收集所有PE文件合并前的导入表和导 出表信息,将PE文件之间的相互调用修改为直接调用。所述合并后的PE文件由合并前的多个PE文件无间隙连接而成。在上述方案中,对新复制的文件头的修正是根据合并后的PE文 件的需求作出的,如取消DLL属性、增加DLL属性等等;而代码区段 的数量以一个为佳,这样只需要将各个PE文件数据按照一定的顺序 写入该区段即可,合并数据相对简单。在写入区段之前,还需要对各 个PE文件的代码根据各自的重定位信息进行重新修正,修正的依据 为前一个PE文件写入后的代码末尾的内存地址减去被修正的PE文 件的PE文件头的虚拟大小,并省略对PE文件头的复制。在合并PE 文件的过程中,还需要不断地修正PE文件头的区段信息的相关值, 如VirtualSize属性。在合并重定位信息中,需要将所有重定位信息 修正后合并到一起,并建立一个格式规范的重定位表,其修正依据为前一个PE文件写入后的代码末尾的内存地址减去被修正的PE文件的 PE文件头的虚拟大小。而在处理PE文件之间调用关系的过程中,需 要添加相应的IAT表地址到合并后的重定位表。新添加到合并后的 PE文件的附加处理代码用于处理合并前各个PE文件的导入表等信 息,添加附加处理代码的同时,将合并后的PE文件大代码入口指向 附加处理代码的代码入口。附加处理代码为一段自定义的处理代码, 在此自定义的处理代码中,需要对各个PE文件的导入表数据进行初 始化,或者解密代码等操作,最后转入真实的PE文件的代码入口。 附加处理代码主要用于功能扩展,用户可以根据自己的实际扩展需要 添加不同的处理代码。采用本专利技术可以对多个PE文件进行合并,并可对合并后的PE文 件进行动态或静态加密或添加额外的功能代码,且本专利技术合并的多个 PE文件代码之间不存在内存空间,为完全连续的线性内存空间,从 而可以避免单一文件代码被非法利用,实现对文件代码的保护。 附图说明图1为现有技术中PE文件代码之间的调用示意图。 图2为本专利技术的PE文件代码之间的调用示意图。具体实施方式 实施例一种PE文件代码合并执行方法,包括以下步骤 (1)建立PE文件头从需要被合并的PE文件中的任意一个复制PE头,并根据合并后的PE文件的需求做出相应的修正,如取消DLL属性。(2) 建立区段信息根据需要建立相应的区段头信息,数量根据需求决定, 一般包括代码段、导入表段、资源段,若是DLL—般还包括 导出表段、重定位信息段,然后将可执行与可读写属性添加到区段属 性标识里面。(3) 合并PE文件数据到区段将需要合并的PE文件分别根据 其相应的重定位信息将其代码重新修正,并按顺序依次逐个完整地写 入步骤(2)所建立的区段内,相邻文件之间无间隙连接。对PE文件代码进行重新修正的依据为前一个PE文件写入后的 代码末尾的内存地址减去被修正的PE文件的PE文件头的虚拟大小, 并省略对PE文件头的复制。同时,还需要不断修正PE文件头的区段 信息的相关值。如VirtualSize属性。(4) 合并重定位信息将所有需要合并的PE文件的重定位信息 合并到一起,并修正,建立一个新的重定位表并写入合并后的PE文 件。将所有需要被合并的PE文件的重定位信息通过修正后合并到一 起,并新建立一个规范格式的重定位表,各PE文件重定位信息的修 正依据为前一个PE文件写入后的代码末尾的内存地址减去被修正 的PE文件的PE文件头的虚拟大小。(5) 处理PE之间相互调用收集所有PE的导出表与导入表信 息,然后将相互之间的调用直接修改为直接调用,因此相对地址不再 变动。本步骤中还需要添加相应的IAT表地址到合并后的重定位表面。(6)添加附加处理代码由于将多个PE文件合并后,仅有一个导入表以及一个导出表能被Windows正确识别,因此需要向合并后的 PE文件添加额本文档来自技高网
...

【技术保护点】
一种PE文件代码合并执行方法,其特征在于,所述PE文件代码合并执行方法包括以下步骤: (1)建立PE文件头; (2)建立区段信息; (3)将各个PE文件数据合并到上述相应的区段,形成一个新的PE文件; (4)处理各个 PE文件之间的相互调用关系; (5)将处理各个PE文件的初始化数据的代码附加到新的PE文件中。

【技术特征摘要】

【专利技术属性】
技术研发人员:章立春
申请(专利权)人:成都磐石软件有限责任公司
类型:发明
国别省市:51[中国|四川]

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

1