APP下载

软件保护机制研究

2014-07-13兰勇龚捷刘亦歆

电脑知识与技术 2014年5期
关键词:脱壳加密

兰勇 龚捷 刘亦歆

摘要:计算机安全领域中,软件保护一直是很热门的研究课题,针对软件开发者来说希望自己的软件在采用软件和硬件加密的技术后不能够被修改或破解。但是任何的软件破解者只要花费足够的资源和精力,几乎所有的软件都能够被破解和修改。如何提高软件的保护能力,提高软件的安全性是一个迫在眉睫的问题。该文主要分析常见的软件保护方法,以及介绍PE文件格式,同时提出了基于混合的软件壳保护模型。

关键词:加密;加壳;脱壳;MAC;PE文件

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)05-1081-05

常见的软件保护方式包括硬加密和软加密两种方式。硬件加密主要是采用加密狗、盘保护两种方式。软加密保护主要是充分利用计算机硬盘序列号、CPU序列号、MAC等唯一性,利用软件将硬件的唯一性绑定到一起,有效的形成软件保护。常见的软件保护包括:软件水印、注册验证、反跟踪、软件加壳保护;随着目前软件技术的发展,以及恶意软件感染能力的增强,采用传统的软件保护方式针对安全性要求高的软件来说保护效果不够明显,所以需要提出新的软件保护方式。软件开发者通常会自主开发软件加密算法和用户账号统一管理工具来提高软件的安全性。

1 硬加密方式

常用的硬加密通常采用的方式是将被保护的软件与硬件加密锁有效的绑定到一起,比如一些重要的敏感数据、key file授权文件、加密算法等都存储到硬件加密锁中。一般根据使用CPU的不同分为普通加密锁和智能加密锁。

硬加密雖然从安全性上来说比较高,但是缺点还是比较明显:

1)对于升级、维护比较难以管理;

2)由于需要硬件设备,所以成本偏高,主要包括生产、运输、安装等成本;

3)影响用户体验,因为需要安装相应硬件的设备驱动和硬件设备。

2 软加密方式

软加密是指使用软件方法来进行各种加密保护,随着软件保护技术的发展越来越多的软加密技术已经出现,比如常见的:注册码保护方式、功能菜单限制保护、使用时间限制保护、采用网络验证机制、验证文件保护、反跟踪技术保护、软件加壳保护机制等。

2.1基于注册码保护机制

注册码其实就是序列号保护机制,本质为防止软件被盗版而采取的保护措施。用户通常从网络上下载一个试用版本的软件,在使用时间上有限制,如果时间过期后,就必须注册才能够继续使用,使用者必须将自己的身份证号码或手机号提供给软件公司,然后软件开发公司利用用户的信息通过注册机计算出一个有效的、唯一的序列号。用户再利用计算出的序列号和用户信息输入软件中,如果信息合法那么相应的限制被取消。整个过程从数学的角度看其实就是映射关系。常见的映射关系有四种,如表1:

表1 序列号映射函数

2.2基于菜单功能限制保护机制

基于菜单功能限制保护的软件保护机制,主要用于软件的demo版本,部分菜单功能被限制不能够使用,通常有两种方式方法一:使用版本的软件和正式版本的软件本身完全不同,使用版本的软件在菜单中对于的功能实现函数根本就没有,也就是只有正式版本中才有相应的功能处理函数。方法二:使用版本和正式版本实质上是一样的,只是将功能菜单设置为非激活状态或隐藏,只有用户成功升级为正式用户后,被限制的功能才会解除。对于破解者来说,只需要想办法如何打开这些受限的菜单功能模块代码上。

2.3基于时间限制保护策略

基于时间限制的软件保护机制主要包括两种方式:1、总使用时间限制;2单次使用时间限制。

总使用时间限制主要是针对试用版本的软件在试用时间上的限制,比如某个软件试用期限为30天,如果用户超过软件试用期的时间,此软件用户就不能够再使用了。

第二种方式,主要是指用户单次使用试用版过程中的使用时间的限制,比如使用版本的软件单次使用的时间为20分钟,20分钟后就不停的弹出提示用户购买升级为正式用户。

2.4基于key-file文件保护机制

Key-file(注册文件保护)文件保护机制,用户不需要输入序列号或注册码等信息,充分利用文件来保存验证信息实现软件安全性保护。这种方式其实是序列号保护机制的变形,只是验证信息保存在文件中,通常key-file文件中的文件格式都是软件开发者自行定义的,从原理上来说通常与软件的配置文件(通常xml格式)有点类似。用户升级为正式用户后,软件开发者会提供一个key-file文件,你只需要把这个文件放到特定的目录安装目录下面,下次启动软件的时候会自动寻找验证用户的合法性。

2.5基于软件保护壳的保护机制

基于加壳技术的软件保护主要是对可执行文件进行加密、压缩。对要保护的软件加上一个外壳,同时PE文件任然能够正常运行。外壳程序主要负责把受保护的软件解压解密到内存中,并且控制权交还给原程序。整个过程用户不清楚也不并清楚该执行过程,并且程序的运行速度也没有明显的影响。整过过程针对用户来说是透明的。

3 PE文件结构

PE文件对于研究软件保护,分析、掌握可执行文件的组织结构及其执行原理是很有必要的。Windows系统中的“WINNT.H”文件中包含PE文件的详细格式,常见的PE文件包括:.EXE、.DLL、.OCX、.SYS、.COM 等类型的文件。这种类型的文件在磁盘上的存储格式是有一定的规律的。

从总体上看PE文件分为五大部分:1、Dos Header;2、PE Header;3、Section Table;4、Section;5 调试信息。如图1所示:

图1 IPE文件结构图

可执行文件加载器加载文件的时候,并不是一次把可执行文件一次性装入内存中,而是通过循环遍历文件的内部结构来判断那一部分的内容被映射到内存中。当文件被加载到内存中,内存和外存中的文件数据结构已经发生了变化。通常可执行文件在内存映射文件中各数据块之间的相对偏移地址已经发生了改变,同时科技将内存映射文件偏移与外存文件偏移进行轉换(如图2):

图2 外存与内存映像结构图

4 加壳软件保护模型

软件壳其实就是一段可执行代码用于防止软件被非法的使用、修改、拷贝等的程序,当可执行文件加载到内存后,外壳程序首选获得程序的控制权,然后解压加密还原PE文件,最后把控制权交还给原PE文件。此模型除了采用代码乱序,还有加密算法和防破解的分析技术,增强了防止破解者修改程序的能力。

从技术层面上分析目前壳软件的发展现状:

1)多次加壳。从语义上来说就是对PE文件进行多次加壳,达到增强软件的保护强度。就软件保护而言,并不是加壳的次数与保护强度成正比的。

2)伪装加壳。通常通过改变文件自身的特征属性来伪装自己,从而干扰软件破解者的分析能力,如果用户没有正确的分辨出外壳的类型,破解的时候将花费巨大的资源和时间,TrickySigner是目前比较流行的伪装加壳工具。

3)代码混淆加壳。现在JAVA中间代码的保护就采用的这种方法,目前.net Obfuscator程序上也采用这种保护方式。

4)代码变化加壳。这种方式主要是采取合适的算法对代码进行代码变化,原程序运行的时候外壳程序就需要把乱序的原程序恢复为正常的。从静态反汇编后看到的代码全是乱序的。

4.1 加壳原理

加壳的原理:1)对PE文件各section区块压缩和加密;2)添加解密和解压程序到新的section区块中,以及添加区块头到区块表中;3)最后修改原程序的入口地址;加壳结构如图3:

图3 加壳结构

4.2外壳加载

外壳的加载过程如图4:

1)保存程序的入口参数

2)获取壳要用的API地址

3)解密原程序中的所有区块的数据

4)初始化IAT

5) 重定位

6)HOOK-API

7) 跳转到源程序的入口地址

图4 加壳可执行文件的执行过程

4.3基于混合的软件保护模型

常见的脱壳步骤为:首先找到可执行原程序的入口地址,再dump可执行文件的映像,从加壳后的可执行文件自身来看不管什么时候最终都要转入原程序的入口地址。由于壳技术本身的要求我们不可能隐藏入口点的地址。那么我们可以采取的方式是让脱壳者即使dump了可执行文件也没法还原程序。基于这个特性本文采用了基于混合的软件加壳保护模型,将原程序和外壳有效的混合到一起。

图5 基于混合的软件保护模型

从图5中可以看出即使脱壳者查找到程序的入口地址,同时dump可执行文件的内存映像,也很难还原原程序文件。因为一旦把壳脱了原程序部分代码也脱掉了。这样就很难还原原代码从而达到保护软件的目的。

此模型主要是采用代码乱序的技术。此技术就是把原程序打乱,让脱壳者很难分析和破解。达到外壳和原程序相互混合的目的,增加软件的安全性。此模型除了采用代码乱序技术以外,也结合花指令技术、反-反汇编技术、以及结构化异常处理技术等来增强被分析、破解的软件保护技术。

4.3.1模型系统架构图

原可执行文件处理包括添加壳程序和可执行文件重组工程:将需要加壳的文件从磁盘加载到内存中去,接着对可执行文件内存映射每个相关头、区块进行处理。

外壳程序: 加壳后的PE文件首先运行壳程序时候,会对原来的可执行文件进行循环校验,同时对原加密的区块数据进行解密,以及重建输入表,原程序乱序处理,最后还是跳转到原程序的入口地址。如上页图6。

此保护模型主要由加密部分、外壳部分、外壳添加部分、可执行文件处理部分构成,详细的加壳程序流程如图7所示:

图7 系统加壳流程图

5 结论

该文首先分析了软件加密的两种方式:硬加密和软加密,同时详细的介绍了当前比较流行的软件加密的几种方式。然后采用软件壳的软件保护方式,分析PE文件的结构,提出基于混合的代码保护模型。假如外壳程序与原程序融合的越紧密,那么起到保护软件的作用就越显着。

参考文献:

[1] 李文.基于壳技术的软件保护研究[D].电子科技大学,2012:43-44.

[2] 杨新柱.可执行文件格式分析与应用[D].北京邮电大学,2009:30-34.

[3] 梁晓.恶意代码行为自动化分析的研究与实现[D].电子科技大学,2008.

[4] Bruce Schneier,“Security-FOCUS:Attack Trends”,QUEUE,June2005.

[5] Hodong Lee,“The construction and principal of executable file of windows systems”,Hanvit Media,2005.6.

猜你喜欢

脱壳加密
基于ARIZ理论的卤虫卵脱壳问题的研究
顶管接收端脱壳及混凝土浇筑关键技术
河蟹脱壳期间注意事项
一种基于熵的混沌加密小波变换水印算法
智慧农业助上安村“脱壳”
加密与解密
一种基于LWE的同态加密方案
认证加密的研究进展
“空壳村”如何“脱壳”
基于ECC加密的电子商务系统