摘要:本文主要从三个方面介绍了计算机软件注册与加密技术:DOS系统下软件注册与加密,Windows系统软件注册与加密以及共享软件网络注册方法。文中介绍的许多方法现在仍在沿用,也有的方法和技术早已过时,但大都值得我们借鉴学习。在分析注册加密过程和方法的同时,引用了不少源代码以突出其实现过程。
关键词:软件加密、软件注册、共享软件
引言
随着计算机科学与技术的发展,计算机软件学科已经成为计算机科学的重要组成部分,软件产品也在计算机产品市场上占有重要地位。由于软件产品的可复制性和可篡改性,它能很容易的被非法复制并销售,严重损害了软件设计者的合法权益。为此,软件设计者们经过不懈努力,精心为自己的软件加密,以保证自己的权益不被侵犯。他们成功过,但也曾对计算机安全产生了不良影响,有的设计者为了严厉打击盗版,在程序代码中加入“逻辑炸弹”,更有甚者,设计出带有“自杀性”和病毒的软件,当发现有复制操作进行时,便使用这段代码把自己销毁并将病毒传播出去,这些举动都对计算机系统的安全造成威胁。
要了解当今流行的计算机软件注册和加密技术,我们必须首先深入DOS系统,深刻理解DOS环境下的软件注册和加密的原理和实现方法。虽然Windows已一统天下,DOS早已失去了它的光芒,但基于这一平台的许多软件设计思想都是值得借鉴的,因为它具有Windows系统不可替代的特性:对硬件操作更加方便,软件的加密方法更加多样化也更容易实现。Windows系统的出现,又给软件设计者们带来了新的机遇:注册表、动态连接库、多线程技术和计算机网络给软件注册和加密提供了新的途径。如果能将这两种完全不同结构的系统下软件注册加密技术结合的话,我想,所能实现的效果是任何一种技术都不可比拟的。
本文讨论的重点并不在于数据的加密过程,而是在于如何充分利用操作系统的特性和提供的API才能使软件加密更加安全。或者说,对于如何实现数据加密和通过什么途径来实现软件加密这两个问题,我们更加关心后者。软件加密和数据加密不同,方法不同,目的也不同,但软件加密离不开数据加密。
一、DOS系统下软件注册和加密技术
许多共享软件都有这样的特点:使用了一段时间后,要求用户输入用户名和注册码,用户名由用户自己定义,而注册码则需要通过付款给软件著作人的途径来取得,得到注册码后,用户将编码填入对话框后,软件便能继续使用,否则将无法运行。这一过程是一等价交换的过程:设计者获得其价值,用户获得使用价值,软件成为商品。那么,软件本身是如何知道用户填入的信息是合法的呢?其实很简单:著作人和软件本身使用了同一套注册机制,或称之为“协议”,用户并不知道这一协议,所以无法破解注册码,只能从著作人处购买。其实所有的注册型软件都有一段类似于下面的程序代码:
program MyProgram (Input, Output);
function GetKey (UserName,OtherInfo:String):KeyType;
begin
//...
end;
function Registered (UserName,OtherInfor:String;UserInput:KeyType):Boolean;
begin
if GetKey(UserName,OtherInfo)=UserInput then begin
result:=TRUE;
Exit;
end;
result:=FALSE;
end;
begin
//...
if (not Registered) then begin
ShowMessage ('Not Registered!!');
Exit;
end;
//...
end.
在这段代码中,GetKey函数用于通过用户的用户名和一些其它信息生成注册码,Registered函数用于返回用户是否正确注册。上面已经提到过,软件加密与数据加密不同,软件加密在注重数据加密算法的同时,更加注重数据密码的隐蔽性。下面从三个方面来介绍DOS系统下的常用加密技术。
1、 使用磁盘的隐藏扇区实现加密
这是最古老的加密技术。仍然是上面这个问题,为什么软件使用一段时间以后或者是使用了多少次以后,它会提示用户注册?它怎么会知道用户用了多长时间或用了多少次?我们可以这样想:在软件被安装程序安装的时候,一些记录用户合法性和安装时间的信息被写到本地计算机中,在今后运行软件时,只要判断这些信息是否合法就可以决定是让用户继续使用还是立即注册。这种方法在一定程度上也增强了软件本身的防复制性,因为复制品在其它未正确安装的机器上找不到合法用户信息,也就无法正确运行。在计算机设备中,能保存数据的最直接的地方就是磁盘,而用硬盘的隐藏扇区保存这些密码信息又最可靠。在硬盘的数据结构中,每个硬盘逻辑分区的第一个柱面是隐藏的,整个物理硬盘的最后几个柱面也是隐藏的。说它是隐藏的,也就是说,在DOS系统中,普通的INT 21H所提供的对磁盘读写的中断调用无法管辖这部分区域,要操作这部分隐藏的磁盘空间,就必须通过INT 13H来进行。