现有软件加密基本都是采用各种硬件系列号作为加密依据,实现的是一机一码制,在采用硬件系列号作为加密依据之前,先要了解下各种硬件系列号的情况。这样有利于选择软件加密依据,防止注册码可以在多台计算机上使用。
获取硬盘系列号
硬盘系列号是生产厂家在硬盘出厂之前就写入到硬盘中不可以修改的系列号,也就是所谓的出厂系列号或是物理系列号,该系列号一旦写入就不可以进行修改,并且是唯一的,但有些硬盘厂家生产的硬盘没有这个系列号,也就是说系列号为空。硬盘出厂系列号与硬盘分区卷的系列号的区别在于:卷的系列号可以修改,并且只要一重新格式化,该系列号就会改变;而硬盘出厂系列号是不可修改的,格式化以后系列号不会被改变。
如果采用分区卷的系列号作为加密依据,其一,只要购买一个注册码,其他的计算机只要修改卷的系列号就可以成为软件的正式用户;其二,如果用户重新格式化过分区,那么就要重新给用户发送新的系列号,因为没有确切的证据,也不知道用户是否真的格式化过分区还是使用另外的计算机的分区系列号来获取注册码。所以为了避免出现一码多机可用和引起不必要的麻烦,建议在实际加密过程中不要使用硬盘卷的分区系列号作为加密依据,而应该采用硬盘出厂系列号作为软件的加密依据。
虽然不使用卷的系列号作为加密依据,但这里也来看看怎么获取磁盘分区卷的系列号?其实很简单,只要调用 API函数 GetVolumeInformation 就可以得到磁盘分区卷的系列号。 API 函数 GetVolumelnformation 在 MSDN 中的函数原型如下:
获取硬盘的出厂系列号还要考虑到硬盘的接口类型,在这里只介绍 IDE 接口的和 SCSI 接口的。首先看看要获取硬盘系列号所需要的几个 API 函数:
在实际加密过程中,不建议使用CPU序列号和网卡的MAC地址作为加密依据,因为相同型号的CPU的序列号相同,并且,MAC地址可以更改,以硬盘出厂序列号作为加密依据是比较好的选择。