随着大规模复制分发非法软件拷贝成为可能,如何设计出切实可行的软件保护方案一直是软件开发商不断研究的课题,为此,在虚拟加密狗保护方法的基础上,加大其核心代码量,应用核心数据与代码、用户计算机指纹绑定技术,我们提出了一种安全增强的虚拟加密狗共享软件保护方法。

一、共享软件保护方法之虚拟加密狗

1、基本思想

针对虚拟加密狗软件保护方法易被爆破与替换的问题,提出一种安全增强的虚拟加密狗共享软件保护方法,该方法分两部分:一、加大虚拟加密狗文件中的核心代码量,将所有需要注册才能使用的核心功能以下简称注册功能)代码封装到DLL文件中,并将该文件所需的核心数据分离出来,保存到INI文件中,实现软件狗的主要功能;二、应用核心数据与代码、用户计算机指纹绑定技术增强虚拟加密狗自身的安全性。

1)增加虚拟加密狗文件中的核心代码量,将所有注册功能的核心代码封装到DLL中,实现虚拟加密狗的主要功能。如图1所示,将软件注册版中每个注册功能模块中的核心代码及数据剔除并预留虚拟加密狗调用接口(图1a虚线框中)生成软件试用版(图1a),将核心代码及数据封装在虚拟加密狗中(图1a);虚拟加密狗由DLL文件及其所需的数据文件两部分组成,其中DLL文件中包括软件核心代码模块、用户计算机指纹验证模块、数据解密模块与DLL文件完整性校验模块等,实现软件狗的主要功能。数据文件保存的是虚拟加密狗DLL文件所需的参数,图1b中核心代码模块与数据文件中的数据一一对应,为便于实现,数据文件采用INI文件格式。

1

2)应用核心数据与代码、计算机指纹绑定技术增强虚拟加密狗自身的安全性。具体步骤是:在虚拟加密狗的DLL文件中加入软件运行时所需数据的解密模块劬能是从虚拟加密狗的数据文件中解密其核心代码所需的数据),然后用DLL文件的数字签名、用户计算机指纹为密钥加密DLL文件中核心代码所需的数据,而将DLL文件所需的数据文件加密保存在数据文件中,其原理描述如下:

①密钥=F DLI.文件的数字签名,用户计算机指纹);

②明文M= Decrypt密文C,密钥);

③密文C= Encrypt朗文M,密钥);

其中明文M是软件运行时DLL文件所需的正确数据,密文C是DLL文件所需数据加密后的数据。

将①、②加入DLL文件的数据解密模块中,③加密的密文C写入INI数据文件供软件运行时DLL文件调用。为了保证密文C的安全性,在其外层采用1024位的RSA算法私钥进行加密保护,确保其安全性,同时在DLL文件中的解密模块的②前加入RSA的公钥解密算法。数据解密模块的流程如图2虚线框中所示,与之向对应的数据文件的加密流程如图3所示。

1

图2描述虚拟加密狗的软件保护流程:①文件完整性校验检测DLL文件是否被篡改;②用户计算机指纹验证模块确保软件在注册用户计算机上运行;③核心代码数据的解密模块是虚拟加密狗保证自己安全的核心模块,先用RSA公钥解密数据文件中key值外层的保护,然后以用户计算机指纹与虚拟加密狗自己DLI.文件的数字签名生成密钥解密出正确的数据供DLL中核心代码模块使用;④核心代码模块完成注册功能调用。

1

2、安全增强的虚拟加密狗开发流程

虚拟加密狗的开发包括DLL文件的开发与数据文件生成程序的开发两部分。

(1)DLI.文件的开发

1)注册用户计算机指纹验证模块

所谓计算机指纹是指与计算机硬件有关的不可复制的信息,这些信息通常包括硬盘物理序列号和主板序列号、CPU序列号与网卡的MAC地址等,可以起到唯一标识计算机的作用。本文中采取的是提取计算机硬盘的序列号与网卡的MAC地址,并糅合成计算机指纹预置到虚拟加密狗的DLL工程的用户计算机指纹验证模块中,确保编译生成虚拟加密狗DLL文件具有不可复制性。当软件运行时采集用户计算机信息生成计算机指纹与预置的注册用户的计算机指纹进行比较,验证用户的合法性。

2)注册功能模块

软件设计时将所有需要注册才能使用其功能的核心代码封装在DLL文件中,而软件试用版保留共享功能、核心代码的调用接口函数,如图1所示。

3)数据解密模块

数据解密模块包括RSA公钥解密模块与对称密钥解密模块。

RSA公钥解密模块的功能是解密虚拟加密狗数据文件中key值外层的保护。RSA非对称算法是密码学上十分成熟的算法,广泛用于数据的加密、解密。该算法采用一对公钥和私钥,从公钥很难推出私钥,反之从私钥也很难推出公钥,此难度是基于大数分解的难度。采用RSA算法加密数据只要选用1024位及其以上的模数就能确保加密数据的安全性。

下面是用大数运算库Miracl ver4. 82实现的RSA算法的关键代码:

char szData C256]=CetlniFileKeyValue (strSection,strKey);

//从INI文件中读取相应核心代码的加密数据

big n,e,c,m;

mip ->IOBASE= 16; //设定十六进制输入输出模式

n= mirvar O);

e= mirvar O);

c= mirvar O);

m= mirvar Q);

cinstr(n,szData);

cinsti(1, ehar*)LPCTSTR)retumN);//初始化模数n

cinstie,"10001”);//初始化公钥e

if eompare (n,n)==-1)

{

//解密数据,将解密后的数据存放在szUerID数组中

pmvmod 6l,e,n,c);

big_to_byte 256, c,&szData,0);

}

//释放内存

mirkill e);

mirkill e);

mirkill e);

mirkill (n);

mirexit O;

对称密钥算法的功能是以注册用户计算机指纹、虚拟加密狗文件的数字签名为密钥解密出上述RSA算法解密后数据,供虚拟加密狗DLL文件中核心功能模块使用。

由于加密数据的外层有RSA算法加密保护,对称密钥算法采用简单的异或运算对数据进行加密解密,下面是部分关键代码:

CSUing strData= GetData O; //读取RSA公钥解密后的数据

//读取虚拟加密狗DLL文件数字签名、用户计算机指纹生成的密钥

CSUing strPwd= GetPwd O;

BYTE*p.vd;

pwd= new BYTEstrPwd. (;etLength O);

pwd= BYTE*)strPwd. (;etBuffer Q);

for (nt i =l;i< strPwd. GetLength O;i++)

{

pwd=pwd&pwd-l];

}

BYTE*ptxt;

ptxt= new BYTE [strData. GetLengffi];

ptxt=BYTE*)strData. GetBuffer O);

//对数据进行异或运算解密

for (nt j =0;j

对称加密算法的密钥是DLL文件的数字签名、用户计算机指纹简单地连接在一起后采用MD5算法生成的,DLL文件的数字签名也是采用MD5算法生成的。MD5算法的作用是让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式,产生了唯一的MD5信息摘要。这个算法被广泛应用在加密、解密以及数字签名技术上,具有很高的安全性。

4)虚拟加密狗的防破解措施

除上述采用的用户计算机指纹、虚拟加密狗文件的数据签名为密钥加密核心数据,并再次用RSA算法加密保护外,还采用以下措施。

①对虚拟加密狗DLL文件进行的完整性校验,防止非法篡改。校验的方法可采用API函数MapFileAndCheckSum进行完整性校验。该函数是通过比较DLL文件的原始校验和与计算的校验和判断是否被篡改。

②用VMProtect保护软件对虚拟加密狗中的核心代码进行虚拟、变异保护,同时开启文件完整性、内存保护功能,进一步增强虚拟加密狗文件的安全性。

(2)虚拟加密狗加密数据文件的生成程序的开发

数据文件以INI文件格式保存,其中Section名对应相应核心代码功能模块名,其key值对应该功能模块所需的参数。加密处理流程如图3所示,先用上述对称加密算法加密,再用与RSA公钥相匹配的私钥加密。

3、软件发布与注册流程

软件开发商按上述安全增强的虚拟加密狗制作方法将软件设计成试用版和虚拟加密狗的DLL工程及数据文件生成程序;为了方便软件开发商生成加密虚拟加密狗文件,可按图4流程开发虚拟加密狗生成工具,可实现输入用户计算机指纹一次性生成DLL文件及其数据文件;软件试用版中只有共享功能而没有虚拟加密狗文件,不用担心破解,可以通过互联网等途径进行发布传播。

1

当软件试用版用户希望购买时,调用软件中计算机指纹采集模块生成Register. clat文件,按图5所示的流程通过电子邮件将该文件发送给软件开发商,软件开发商根据Register. dat生成虚拟加密狗文件(egDog. dll、regDog.ini)通过电子邮件发送给用户,然后用户接收后覆盖软件安装文件夹下的同名文件,就完成注册,使用软件的全部功能了,从而方便地利用互联网进行软件试用版的发布和销售虚拟加密狗。

1

二、虚拟加密狗的安全性分析

(1)破解者要通过爆破的方式破解软件,首先要篡改虚拟加密狗文件的完整性验证指令与用户计算机指纹验证指令,必然导致DLL文件的数字签名改变,同时由于虚拟加密狗文件不在注册电脑上运行,生成用户计算机指纹也不是注册用户的计算机指纹,这两者中任何一个改变都将导致生成数据文件的解密密钥不正确,核心数据文件解密失败,导致软件不能正常运行,从而加大了采用爆破方法破解的难度。

(2)虚拟加密狗文件中包含软件中所有注册功能的核心代码及其核心数据用1024位的RSA算法加密保护,加大了破解者逆向分析的工作量,增强了用替换DLL文件的方法破解的难度。

(3)用VMProtect软件保护系统对虚拟加密狗的核心代码进行虚拟、变异保护,进一步增强了虚拟加密狗的安全性。

小知识之共享软件

共享软件是以“先使用后付费”的方式销售的享有版权的软件。根据共享软件作者的授权,用户可以从各种渠道免费得到它的拷贝,也可以自由传播它。用户总是可以先使用或试用共享软件,认为满意后再向作者付费;如果你认为它不值得你花钱买,可以停止使用。