黑客攻防从入门到精通(加密与解密篇)
上QQ阅读APP看书,第一时间看更新

1.2 软件注册保护方式

软件开发者为了维护自身的版权和商业利益,不断地寻找各种有效的加密算法和技术来保护自己的软件,以增加其保护强度,预防软件被破解;而破解者或受盗版所带来的高额利润驱使,或出于纯粹的个人兴趣,而不断制作新的破解工具,并针对新出现的保护方式进行跟踪分析以找到相应的破解方法。

从理论上说,几乎没有破解不了的保护。对软件的保护仅仅靠技术是不够的,而这最终要靠人们的知识产权意识和法制观念的进步。但如果一种保护技术的强度大到让破解者在软件的生命周期内无法将其完全破解,这种保护技术就可以说是非常成功的。

软件保护方式的设计应在一开始就作为软件开发的一部分来考虑,列入开发计划和开发成本中,并在保护强度、成本、易用性之间进行多方位的考虑,争取找到一个平衡点。

要进行解密的软件大部分都是付费软件,所以软件作者会在软件注册保护方式上面来防止软件被解密,在正式注册之前是有一定限制的,比如使用功能上和使用时间上。

现在的软件一般都采用注册码方式进行保护,此外还有注册文件、加密狗、光盘加密、网络校验、NAG窗口等方式。

1.注册码方式

现在的大多数软件为了便于在网上进行交易,都会采用注册码进行保护。一般是对软件的功能和使用时间进行限制。软件作者使用的注册算法有很多种,经常使用如下几种方法。

(1)机器码+注册码

机器码一般是通过机器硬件设备的唯一编号,利用软件构造算法来生成,如利用CPU、硬盘、网卡等设备来生成机器码。由于硬件的编号是唯一的,所以机器码在不同计算机中是不会重复的,从而注册码也就是唯一的。

(2)用户名+注册码

利用输入的用户名构造算法来生成注册码,这种方式的缺点是不同的计算机可以用同一个用户名进行注册成功。

(3)组合方式+注册码

这种方法是结合了以上的两种方式来构造算法,参数增多,算法复杂。

在构造注册算法时,大多数的软件作者都会利用计算机中的数学运算和逻辑运算,保护的效果不是很好。在这里软件作者可以借鉴密码学算法应用到自己的算法中,如MD5、RSA、DES、CRC32、BASE64等,这些算法基本上都是不可逆的。如使用MD5,根据得到的结果是得不出原始数据的,现在常用在后台数据库的密码字段。即使得到后台数据库,也猜不出原始密码。

在构造算法的最后就要对注册码的真假进行比较,最好不要用变量直接进行比较,而是构造一个算法,让机器码(用户名)和注册码作为变量参与计算,利用构造的算法进行变换比较。如a机器码或者用户名,b为假注册码,在比较时,不能使用“if f(a)=b”这样的变量比较,而最好使用if f(a,b)=c这样的函数比较。

变量比较就是解密者所说的明码比较,在程序运行的某一个时期,在内存中会出现正确的注册码,这样,即使算法再复杂,也会很容易做出内存注册机;算法比较也就是暗码比较,不会在内存当中出现,增加了解密的难度。

2.加密狗方式

所谓加密狗就是一个数字电路,根据连接在计算机上的不同接口,可以分为USB狗、并口狗。软件通过读取加密狗内的数据来判断是否注册及软件的版本等信息,达到保护软件的目的。

3.光盘加密

这种加密方式一般应用于游戏软件,可以防止原始光盘被非法复制。

4.网络验证

随着互联网的快速发展,网络验证保护方式被越来越多的人所采用。软件在注册时要到官方网站进行注册或在注册后会不定期连接到官方网站进行校验,如果不通过,则视为盗版或试用版本。

5.NAG窗口

软件没有注册或使用的是软件的试用版本,往往会弹出一些提示窗口,这些提示窗口称为NAG窗口,它在软件试用期过后,就要屏蔽软件的正式窗口或某些重要功能窗口,使软件不能正常使用。

6.将软件与机器硬件信息结合

用户得到软件后,安装软件时会从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BIOS序列号等),再把这些信息和用户的序列号、用户名等进行计算,从而在一定程度上将软件和硬件部分绑定。用户需要把这一序列号用E-mail、电话或邮寄等方法寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。

虽然软件加密的加密强度比硬件方法较弱,但它具有非常廉价的成本、方便的使用方法等优点,非常适合作为采用光盘(CDROM)等方式发授软件的加密方案。

这种加密算法的优点如下。

① 不同机器的注册码不同。用户获得一个密码,只能在一台机器上注册使用软件。不同于目前大多软件采用的注册方法,即只要知道注册码,就可在任何机器上安装注册。

② 不需要任何硬件。

③ 可以选择控制软件运行在什么机器、运行多长时间或次数等。

④ 可让软件在注册前的功能为演示软件,只能运行一段时间或部分功能。注册后就立即变为正式软件。

⑤ 采用特别技术,解密者很难找到产生注册号码的规律。

⑥ 在使用注册号产生软件(注册机)时可采用使用密码、密钥盘、总次数限制等方法。

7.时间限制

有些程序的试用版每次运行时都有时间限制,例如,运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面有个定时器,来限制程序运行的时间,这也是一种对软件进行保护的方法。