本发明专利技术的基于PE?Loader的软件加壳保护方法,按照以下步骤实施:将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定位,计算出壳模板入口点所在区段的RVA和此区段的大小,用计算出的区段的RVA和区段的大小两个值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;将被保护软件映射到内存中并利用计算出的密钥,将被保护的软件用AES加密算法加密;将加密过的数据添加到壳模板的Reloc段中;处理将要保护软件中的特殊资源以及其附加数据提取,分别附加到壳模板文件的结尾处,并修改壳模板的PE结构中关于特殊资源的相应数据项;将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件即成。本发明专利技术方法显著增加了软件的安全性。
【技术实现步骤摘要】
本专利技术属于计算机软件程序保护
,针对软件被非法篡改和破解问题,具 体涉及。
技术介绍
软件保护是软件开发中一个不可忽视的环节,由于软件开发后要面对众多逆向分 析人员的研究,要给发布的软件加一层保护壳几乎成了保护软件的一个必要步骤。现有的 加壳保护技术一般是把可执行文件(这里主要指Win32平台的PE文件)的入口点(Entry Point)指向壳的she 11 code,并把原来的可执行文件压缩或者加密,然后把壳的sheIlcode 作为目标程序一个新的段添加进去,运行时壳shellcode首先执行,在内存中解密或者解 压,解密或者解压完成后跳到被保护程序的原始入口点(OEP),执行被保护程序。因此,在现 有的传统壳保护下,攻击者很容易能找到被保护程序的原始入口点(OEP),这时壳已经把被 保护的程序解压缩,解密,攻击者就可以通过内存中的明文数据,分析甚至还原目标程序, 从而达到逆向的目的。
技术实现思路
本专利技术的目的是提供,解决现有技术中 的传统加壳保护后的软件易于被攻击者破解及非法篡改的问题。本专利技术所采用的技术方案是,,该方法按 照以下步骤实施步骤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内存中数 据则成功脱掉保护壳并进行下一步破解。作为对比,用本专利技术的方法对要保护的软件加保护壳本文档来自技高网...
【技术保护点】
一种基于PE Loader的软件加壳保护方法,其特征在于:该方法按照以下步骤实施:步骤1、将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定位,计算出壳模板入口点所在区段的RVA和该区段的大小,用计算出的区段的RVA和该区段的大小值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;步骤2、将被保护软件映射到内存中并利用上步计算出的密钥,将被保护的软件用AES加密算法加密;步骤3、将加密过的数据添加到壳模板的Reloc段中;步骤4、处理将要保护软件中的特殊资源以及其附加数据提取,分别附加到壳模板文件的结尾处,并修改壳模板的PE结构中关于特殊资源的相应数据项;步骤5、将修改好的壳模板从内存中转存到磁盘上,作为被保护后的软件即成。
【技术特征摘要】
一种基于PE Loader的软件加壳保护方法,其特征在于该方法按照以下步骤实施步骤1、将壳模板映射到内存中,模拟Windows的PE加载器对壳模板进行基址重定位,计算出壳模板入口点所在区段的RVA和该区段的大小,用计算出的区段的RVA和该区段的大小值作为参数,通过SHA算法计算出的散列值作为AES加密算法的密钥;步骤2、将被保护软件映射到内存中并利用上步计算出的密钥,将被保护的软件用AES加密算法加密;步骤3...
【专利技术属性】
技术研发人员:孙钦东,王倩,马哲,
申请(专利权)人:西安理工大学,
类型:发明
国别省市:87[中国|西安]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。