版权保护是最近几年吵得比较火热的一个话题,那么,共享软件如何进行版权保护呢?今天我们就介绍一下。

一、常见的软件版权保护技术

因特网的飞速发展为共享软件的快速发展提供了前所未有的机遇,同时,由于软件是一类特殊商品,极易复制和网上传播,造成盗版软件泛滥,严重地损害了软件开发商的利益。如何进行软件版权保护,防止非法用户盗版,一直是软件开发商不断研究的课题。依据加密的原理和加密方式,目前软件版权保护技术分为以下三大类:

(1)软加密

它就是不依赖特定的硬件来实现对软件加密保护的技术。常见的保护方式包括:序列号(注册码)保护方式、KeyFile保护方式、功能限制保护方式和时间限制保护方式等。它的最大优势在于加密成本低,便于在互联网上进行软件的发布和销售,是适合共享软件的保护方式;它的缺点在于不能防止破解者通过动态调试或静态分析技术找到软件的关键指令,修改该指令破解软件。

(2)硬加密

它就是依赖特定的硬件,通过硬件和软件相结合的方式来实现软件加密保护的技术。常用的方法有磁盘加密、加密卡和加密锁等。它的优势在于利用硬件的不可复制性达到较高强度的加密保护;其缺点是需要额外的硬件,成本高,而且也不利于网上发布软件。

(3)网络加密

它就是利用网络技术对软件进行加密保护的技术。常见的方法有网络验证等。它的优点是将软件运行的重要数据放在服务器上,只有通过联网验证用户注册信息后才能取得这些数据运行软件,它的加密强度较高,其缺点是需要建立专门的服务器网站,成本高。

通过以上介绍可以看出较为安全的共享软件版权保护方式要同时具有以下四个特征:①软件的重要数据与软件主体分离;②软件不可复制;③软件要有反修改,反跟踪和反静态分析等反破解功能;④便于在互联网上发布和销售软件。根据这四个特征笔者提出一种基于虚拟加密锁的共享软件版权保护方法。

二、虚拟加密锁的理论基础

1、软件加密锁

软件加密锁是为软件开发商提供的一种智能型的软件加密工具,它包括一个安装在计算机并行口或USB口上的硬件,及套适用于各种语言的接口软件和工具软件。它具有如下特点:加密锁据有防破解功能,可对抗各种调试工具的跟踪;一锁一密码或一种电路,软硬件不可互换;提供各种语言的编程和工具软件,方便开发人员在自己开发的程序中使用;允许软件开发商将自己软件中的一部分程序或算法写进锁中,并在锁中运行,从而使开发商的软件同加密硬件有机地结合在一起。

用户在使用软件时,必须把加密锁连接到计算机的并口或USB口上,软件才能继续运行。如果没有安装加密锁或安装的不是该软件的加密锁,则软件不能运行或功能不完整,从而达到保护软件版权的目的。

2、DLL动态链接库

DLL是一个可以被其它应用程序共享的已编译的代码模块,其中封装了一些可以被共享的代码和资源。Windows应用程序可根据DLL中的指令打开、启用、查询、禁用和关闭驱动程序。DLL文件还可以方便地实现对硬件资源和内存资源的访问。它主要具有如下特点:DLL的开发与具体的编程语言及编译器无关,只要遵循其开发规范并安排正确的编程接口,无论使用何种语言编制的DLL都具有通用性;使用DLL不是将其库代码拷贝,而只在程序中记录函数的入口点和接口,程序执行时才能将代码载入内存。多个程序使用相同的DLL时,内存只需要装载一次,可以高效经济地使用内存;DLL是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据和各种资源,扩大了库文件的使用范围。

三、用虚拟加密锁实现共享软件版权保护的方法

1、虚拟加密锁加密的原理

由上述DLL文件具有的功能和特点可知,对DLL文件进行反破解处理就可以实现硬件加密锁的主要功能,完成对软件版权的保护。另外,与加密锁的硬件价格相比,DLL文件的开发几乎不需要投入成本。再者,由于DLL文件与软件主体在同一个文件夹下,软件主体执行时无需访问并行接口或USB接口,因而节约了计算机硬件开销,运行速度更快,可实现对软件的保护。基于上述因素考虑,我们在传统的软件保护技术的基础上,推陈出新,提出一种基于虚拟加密锁的软件版权保护方法。

虚拟加密锁是一种基于DLL文件的软件保护技术,它是软加密技术的一种,DLL文件主要是通过模拟硬件加密锁对软件主体运行的控制来仿真加密锁的D将软件中只有注册用户才能使用的关键功能模块、注册用户的计算机指纹信息和基于用户计算机指纹的注册验证模块都封装到DLL文件中,同时在DLL文件中加入文件完整性检测、反调试和反静态分析功能模块来提高DLL文件的反破解性能。软件运行时,当执行到DLL文件中需要注册才能使用的功能时,必须进行DLL文件的完整性检测、调试器的检测,只有通过检测、注册验证后才能执行软件的功能,否则退出软件。由于DLL文件内置了用户计算机指纹信息(具有不可复制性)和反破解模块,因而DLL文件具有类似加密锁的功能,可以取代加密锁,达到对软件版权保护的目的。其系统基本原理图如图1所示。

1

2、虚拟加密锁实现的功能

(1)封装软件中的关键功能使软件试用版与正式版分离

为满足第1节所述特征①,设计软件时将软件分成软件主体和DLL文件两部分。软件主体就是软件的试用版,在网上发布。将软件的关键功能封装在DLL文件(虚拟加密锁)中(在实际开发软件时,如果封装的功能多导致DLL文件过大,可以只封装每个功能模块中的关键数据处理部分),如图1所示,它只提供给注册用户,从而实现软件试用版与正式版(即软件主体+虚拟加密锁)文件的分离,降低了破解者破解正式版的几率。

(2)采集用户计算机指纹信息并生成计算机

所谓计算机指纹是指与计算机硬件有关的不可复制的信息,这些信息通常包括硬盘物理序列号和主板序列号、CUP序列号等。不同的计算机有不同的计算机指纹,因而用户计算机指纹可以起到唯一标识计算机的作用,确保虚拟加密锁文件具有不可复制性。将采集的用户计算机指纹信息经过Hash算法(如SHA、MD5等)处理生成用户计算机ID。

(3)注册用户的合法验证

为满足第1节所述特征②,将根据注册用户的计算机指纹信息生成的ID预置到虚拟加密锁(DLL文件)中,保证了该虚拟加密锁只能运行在该注册用户的计算机上。当用户运行虚拟加密锁中的关键功能时,虚拟加密锁采集该用户计算机指纹,经过一定加密运算生成计算机ID与预置的计算机ID比较,若两者相等,说明该用户是合法用户,则正常运行软件功能;若不相等,说明该用户是非法用户,则限制该功能的运行或退出软件。

(4)反破解

如果软件不能防止破解者的非法修改,其它保护措施做得再好,也很容易被破解。为满足第1节所述特征③,在对虚拟加密锁文件进行反调试、反静态分析的基础上增加反修改功能。

1)虚拟加密锁的完整性校验

对虚拟加密锁文件进行完整性校验,可确保其不被非法修改。校验的方法可采用API函数MapFileAndCheckSum进行完整性校验。

//读取虚拟加密锁文件DIIFile的原始的校验和HeaderSum并计算其校验和CheckSum

MapFileAndCheckSum( DIIFile, &HeaderSum, &CheckSum);

if( HeaderSum==CheckSum)

{

//虚拟加密锁文件DIIFilename没有被修改,执行软件功能

}

else

{

//虚拟加密锁文件DIIFilename被修改,中止软件

}

2)调试器检测

为了防止破解者用调试工具(如OllyDbg等)对虚拟加密锁程序文件进行跟踪,可用API函数IsDebuggerPresent来检测。

if( IsDebuggerPresent())

{

//当前程序被调试,中止软件

}

else

{

//没有被调试,执行软件功能

}

3)反静态分析

为了防止破解者通过W32Da.m、IDA Pro等反汇编分析工具进行反汇编分析,可在虚拟加密锁文件中增加大量花指令。另外,用虚拟机软件VMPtotedt对虚拟加密锁文件进行处理,可以大大增强其抗静态分析的性能。

3、用户注册过程

软件试用版用户试用满意后,通过汇款或网上银行转账等方式付款后,用户将计算机ID(根据用户计算机指纹经加密生成的)通过电子邮件发送给软件开发商,软件开发商根据用户计算机ID重新编译程序生成虚拟加密锁文件,再通过电子邮件发送给用户,用户接收后用该文件覆盖软件安装文件夹下的同名文件,就可以使用软件的全部功能硝这样就可以方便地利用互联网完成软件试用版的发布和正式版的销售,这满足了第1节所述特征④。

小知识之DLL文件

DLL文件又称“应用程序拓展”,是软件文件类型。