很多人为了保持自己软件开发的劳动成果会给软件增加license授权功能。该授权可以是离线版的,也可能是在线版的(被授权者和授权者之间有交互)。根据授权长短维度区分有试用版(15天、1月)、有限期限版(1年1授权)、终身版。

一、离在线授权

1、离线授权

很多比较小的软件,没有专门的授权服务器。这部分软件只会通过校验被授权主机的一些信息确定唯一性,然后根据特征信息生成唯一编码,发给软件作者,软件作者再根据此唯一编码通过一定的加密算法生成一个key信息。

license
license

一机一码就要包含客户机器的唯一标识,可以通过获取机器硬件CPU、主板、Bios、Mac地址、显卡、声卡等的ID来生成。比如在linux上如下信息:

1获取CUP ID : dmidecode -t 4 | grep ID | sort -u |awk -F': ' '{print $2}'
2获取DISK ID : fdisk -l |grep 'Disk identifier' |awk {'print $3'}
3[root@localhost ~]# dmidecode -t 4 | grep ID | sort -u |awk -F': ' '{print $2}'
412 0F 60 00 FF FB 8B 17
5[root@localhost ~]# fdisk -l |grep 'Disk identifier' |awk {'print $3'}
60x0004aa62

不过上面的方法会存在一个问题,就上上面的命令只能是root才能执行,普通用户无权执行,但你要在主机上运行的软件不一定都在root用户下运行的。这个时候可以使用blkid这类命令获取唯一识别信息:

1[kiosk@localhost ~]$ blkid
2/dev/sda1: UUID="1a1f6d46-aa47-48ec-a3f8-c93cc6a32b7e" TYPE="xfs"
3/dev/sda2: UUID="Cx5NCC-OGFp-j9xn-SedO-0VIl-KmR8-ARh6uf" TYPE="LVM2_member"
4/dev/mapper/centos-root: UUID="dff63ee2-14b0-4229-8c93-67f3b94e63c0" TYPE="xfs"
5/dev/mapper/centos-swap: UUID="35c032ff-d5c4-45af-b178-aa3f6ed72865" TYPE="swap"

假设这里以拿到的dff63ee2-14b0-4229-8c93-67f3b94e63c0 为唯一编码,将该信息发给软件作者后,其会生成一个key给被授权的主机。该主机拿到该码后,激活后可以使用。

使用硬件唯一识别码也会有一个问题,如果别人使用的是一台虚拟机呢?岂不是可以无穷分发使用 ?

2、在线授权

在线授权基本思想可能和离线授权差不多,不同的是,其可以通过授权机和被授权机的交互,进行更复杂的验证。比如加入时间参数,加入两者的交互。

二、基于时间的授权

上面提到的试用30天、一年一授权、一次授权永久有效,这种基本都是基于时间的。除了key,另一个验证的就是时间。关于时间的破解方法很多,常见的如下:

1.试用版到期后修改系统时间;
2.试用版到期后找到license文件并修改或删除;
3.试用版到期后卸载软件,重新安装;
4.黑客直接反编译软件,屏蔽掉验证License的逻辑;

基于时间的,可以在软件内部写好与在线授权服务器对时,或者加上基本时间的动态码,一旦时间不对生成的动态码就不对,强制要求对时。