在
软件加密保护
技术中,一种常用的保护方法就是基于
硬件指纹进行许可授权,本文将详细介绍
硬件指纹的具体获取
技术,并提供一段演示源代码程序。
硬件指纹加密,指的是用户免费得到
软件并安装后,
软件从用户的机器上取得该机器的一些
硬件信息(如硬盘序列号、BOIS序列号等等),然后把这些信息和用户授权进行绑定,产生
硬件特征码,用户需要将此特征码提交给
软件提供商或开发商,
软件开发商利用
注册机(
软件)产生该
软件的注册号发给用户,用户通过此注册号可以激活本地授权许可。
软件加密虽然加密强度比
硬件方法较弱,但它具有非常廉价的成本、方便的使用方法等优点,从而在低成本的共享
软件领域广泛应用。
硬件指纹加密的关键是电脑
硬件信息的获取,我们需要通过程序将机器的标识一一读取出来,根据机器的标识,通过一定的算法,对用户进行授权限制。
目前比较常见的
硬件资源包或:硬盘物理序列号、
cpu序列号、网卡MAC地址、B
ios序列号、
主板序列号等,如果用户的
硬件信息发生变化,比如更换了网卡等
硬件,则按照一定比例进行判断,比如三分之二的
硬件信息没有变化,则表示同一用户。
下面是使用VB调用Windows的WMI编写的一段
硬件指纹获取的演示程序,直接将其另存为VBS后缀文件即可运行。稍加修改即可应用在共享
软件里,实现用注册码对
软件进行保护的功能。
MsgValue = ""
Set objWMIService = GetObject("winmgmts:\. ootcimv2")
获取硬盘序列号
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMedia", , 48)
For Each objItem In colItems
MsgValue = MsgValue ; vbCrLf ; "硬盘 = " ; objItem.SerialNumber
Next
获取主板序列号
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard", , 48)
For Each objItem In colItems
MsgValue = MsgValue ; vbCrLf ; "主板=" ; objItem.SerialNumber
Next
获取CPU ID
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48)
For Each objItem In colItems
MsgValue = MsgValue ; vbCrLf ; "CPU = " ; objItem.ProcessorId
Next
获取BIOS序列号
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48)
For Each objItem In colItems
MsgValue = MsgValue ; vbCrLf ; "BIOS= " ; objItem.SerialNumber
Next
获取网卡MAC地址
Set colItems = objWMIService.ExecQuery("SELECT MA
caddress FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> Microsoft))", , 48)
For Each objItem In colItems
MsgValue = MsgValue ; vbCrLf ; "网卡 = " ; objItem.MACAddress
Next
Wscript.Echo MsgValue