一种基于PELoader的软件加壳保护方法

文档序号:6331937阅读:440来源:国知局
专利名称:一种基于PE Loader的软件加壳保护方法
技术领域
本发明属于计算机软件程序保护技术领域,针对软件被非法篡改和破解问题,具 体涉及一种基于PE Loader的软件加壳保护方法。
背景技术
软件保护是软件开发中一个不可忽视的环节,由于软件开发后要面对众多逆向分 析人员的研究,要给发布的软件加一层保护壳几乎成了保护软件的一个必要步骤。现有的 加壳保护技术一般是把可执行文件(这里主要指Win32平台的PE文件)的入口点(Entry Point)指向壳的she 11 code,并把原来的可执行文件压缩或者加密,然后把壳的sheIlcode 作为目标程序一个新的段添加进去,运行时壳shellcode首先执行,在内存中解密或者解 压,解密或者解压完成后跳到被保护程序的原始入口点(OEP),执行被保护程序。因此,在现 有的传统壳保护下,攻击者很容易能找到被保护程序的原始入口点(OEP),这时壳已经把被 保护的程序解压缩,解密,攻击者就可以通过内存中的明文数据,分析甚至还原目标程序, 从而达到逆向的目的。

发明内容
本发明的目的是提供一种基于PE Loader的软件加壳保护方法,解决现有技术中 的传统加壳保护后的软件易于被攻击者破解及非法篡改的问题。本发明所采用的技术方案是,一种基于PE Loader的软件加壳保护方法,该方法按 照以下步骤实施步骤1、将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定 位,计算出壳模板入口点所在区段的RVA和该区段的大小,用计算出的区段的RVA和该区段 的大小值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;步骤2、将被保护软件映射到内存中并利用上步计算出的密钥,将被保护的软件用 AES加密算法加密;步骤3、将加密过的数据添加到壳模板的Reloc段中;步骤4、处理将要保护软件中的特殊资源以及其附加数据提取,分别附加到壳模板 文件的结尾处,并修改壳模板的PE结构中关于特殊资源的相应数据项;步骤5、将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件即成。本发明的基于PE Loader的软件加壳保护方法,其特征还在于所述步骤4中,要 保护软件中的特殊资源以及其附加数据提取,选用特殊资源的新位置以及大小。本发明的有益效果是,将被保护的程序感染到加密壳的软件保护架构,加密壳具 有PEloader功能,将被保护软件在内存中加载并执行,这种加密软件保护壳的结构大大增 加了攻击者在破解或者非法篡改软件的难度,甚至无法找到真正的程序的入口点,能有效 的防止逆向分析人员对软件的反汇编破解及非法篡改,大大增加了软件的安全性。


图1是未加任何保护的PE文件操作窗口示意图;图2是将保护的PE文件加密放入壳模板的Reloc段后操作窗口示意图。
具体实施例方式下面结合附图和具体实施方式
对本发明进行详细说明。本发明的方法,将要进行加壳保护的软件先经过AES加密,将加密后的内容放入 外层的壳模板中的Reloc段中,加密的密钥的获取是由根据壳模板中的代码段数据通过 SHA算法动态获得的,若逆向分析人员调试或者修改了壳模板代码段数据,则造成程序解密 失败,不能正常执行,从而有效的达到保护软件的目的。本发明方法按照以下步骤实施步骤1、将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定 位,计算出壳模板入口点所在区段的RVA(Relative Virtual Addresses)和此区段的大小, 用计算出的区段的RVA和区段的大小(两个)值作为参数,通过SHA算法计算出的散列值 作为AES加密算法的密钥;步骤2、将被保护软件映射到内存中并利用计算出的密钥,将被保护的软件用AES 加密算法加密;步骤3、将加密过的数据添加到壳模板的Reloc段中,如图2所示;步骤4、处理将要保护软件中的特殊资源以及其附加数据提取,如特殊资源的新位 置以及大小,分别附加到壳模板文件的结尾处,并修改壳模板的PE结构中关于特殊资源的 相应数据项;步骤5、将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件,从而完 成软件的保护。对于上述处理后保护壳的执行实施步骤包括1)壳模板根据自己在内存中的入 口点所在的段的RVA以及段的大小,由SHA算法计算出哈希值作为密钥,解密自己的Reloc 段。2)将解密后的明文(即被保护的软件)通过壳模板的PE Loarder将其加载并执行。本发明的可行性以及有益性效果分析,通过对一个程序加保护壳,对比加保护壳 前后运行结果进行正确性分析,实验结果表明,程序加壳前后运行正常。图1是未加任何保护的PE文件操作窗口示意图。常用的保护壳技术是在被保护 软件的基础上写入外壳代码,这样外壳初始化的现场环境(各寄存器的值)于原程序的现 场环境必须是相同的,所以在外壳程序和原始的被保护软件OEP处之间就会有一条明显的 界限,这条界限使得壳和被保护程序无论从空间还是逻辑功能上都明显的分割开来,破解 者往往会找到这条界限进行攻击。图2是将保护的PE文件加密放入壳模板的Reloc段后 操作窗口示意图。参照图2,将被保护程序感染到的壳模板中就会使这条界限不再存在,利 用壳模板的PE Loarder功能来加载执行被保护的软件,这种方法更加隐蔽和安全,还可以 在外壳程序和中间结构中再加入大量的花指令和反调试技术。通过本发明的软件保护方 法,能使破解者的攻击消耗大量的时间,破解者的所做的工作是不经济的,则达到了有益的 效果。以下通过对比普通保护壳和本方法保护壳来分析有益效果,即通过动态分析加了
4ASPACK(以ASPACK壳为代表)的保护程序和经本发明方法保护程序来分析有益效果。首先用OllyDbg打开经过ASPACK保护过的程序,可以看到加载的被保护程序断在 第一条指令处,也就是外壳程序的第一条指令,在OllyDbg的反汇编窗口中,可以看到前三 条指令分别是pushadcall 0045700Ajmp 45A274F7分析这前三条指令,由pushad可以得出ASPACK外壳程序在保存当前环境,后两条 call和jmp指令在执行相应的壳程序,因为普通的保护壳软件的编写都是遵守堆栈平衡原 理,也就是说在外壳程序执行前首先要保存当前的环境(各寄存器的值,主要是ESP和EBP 等重要寄存器的值),通常通过pushad/pushfd命令或者间接的通过其他方式保存当前环 境,所以可以根据popad/popfd或加内存断点跟踪找到跳转到OEP的指令。根据堆栈平衡 原理加内存断点跟踪到外壳的结尾处popadjnz short 004573BAmo ν eax, 1retn OCpush 0040CD6Bretn由上面的指令可以看出,popad还原环境后retn指令将跳转到0ΕΡ,此时当前堆栈 的内容ESP指向0040CD6B,所以原程序的OEP是CD6B基址是00400000,执行完retn,跳转 到0040⑶6B处执行,此处汇编指令为push ebpmo ν ebp, esppush-1push 0042D100为了对比此处是0ΕΡ,将未加过保护壳的程序调试并与0040⑶6B处的汇编指令对 比,经比较发现,未加过保护壳的程序的在开始执行处的指令和0040⑶6B处的指令完全相 同,说明0040⑶6B处是经ASPACK加壳保护过的程序的0ΕΡ,若破解者在此处dump内存中数 据则成功脱掉保护壳并进行下一步破解。作为对比,用本发明的方法对要保护的软件加保护壳并分析,用Ollydbg加载经 过本发明的方法保护过的软件,前五条汇编指令如下push ebpmo ν ebp, espsub esp, 134push ebxpush esi在以上汇编指令中并没有保存当前环境的指令以及其他方式保存当前环境的指 令,而是在执行单独的壳模版程序,壳模板是独立与被保护程序的,因此壳模板并不符合堆
5栈平衡定律,壳模板是模拟操作系统加载PE文件的过程来加载并执行被保护的软件的,壳 模版通过解密被保护程序,处理被保护程序的重定位,修正被保护程序的导入表等操作, 最终执行到被保护程序的入口点,再执行被保护软件,壳模板并没有按照堆栈平衡来执行 she 11 code,而是一个独立的程序。 本发明方法作 为一种新的软件保护壳,区别与以往的将壳代码写入被保护软件的 思路,本方法相当于模拟了操作系统的PE Loarder功能,软件破解者的工作量大大增加,使 用本方法还可以在壳模板中加入大量花指令,反调试技术和反dump技术,这样破解者的工 作量及难度也将大大增加。
权利要求
一种基于PE Loader的软件加壳保护方法,其特征在于该方法按照以下步骤实施步骤1、将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定位,计算出壳模板入口点所在区段的RVA和该区段的大小,用计算出的区段的RVA和该区段的大小值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;步骤2、将被保护软件映射到内存中并利用上步计算出的密钥,将被保护的软件用AES加密算法加密;步骤3、将加密过的数据添加到壳模板的Reloc段中;步骤4、处理将要保护软件中的特殊资源以及其附加数据提取,分别附加到壳模板文件的结尾处,并修改壳模板的PE结构中关于特殊资源的相应数据项;步骤5、将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件即成。
2.根据权利要求1所述的基于PELoader的软件加壳保护方法,其特征在于所述步 骤4中,要保护软件中的特殊资源以及其附加数据提取,选用特殊资源的新位置以及大小。
全文摘要
本发明的基于PE Loader的软件加壳保护方法,按照以下步骤实施将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定位,计算出壳模板入口点所在区段的RVA和此区段的大小,用计算出的区段的RVA和区段的大小两个值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;将被保护软件映射到内存中并利用计算出的密钥,将被保护的软件用AES加密算法加密;将加密过的数据添加到壳模板的Reloc段中;处理将要保护软件中的特殊资源以及其附加数据提取,分别附加到壳模板文件的结尾处,并修改壳模板的PE结构中关于特殊资源的相应数据项;将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件即成。本发明方法显著增加了软件的安全性。
文档编号G06F21/22GK101964040SQ201010280090
公开日2011年2月2日 申请日期2010年9月10日 优先权日2010年9月10日
发明者孙钦东, 王倩, 马哲 申请人:西安理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1