基于硬件指纹的软件加密和注册技术--获取硬盘物理序列号、CPU序列号、网卡MAC地址、BIOS序列号、主板序列号

本文介绍了一种基于硬件指纹的软件加密方法,通过获取硬盘序列号、主板序列号、CPU序列号等信息,生成唯一硬件特征码,实现软件授权。文中还提供了一段使用VB编写的演示程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件加密保护技术中,一种常用的保护方法就是基于硬件指纹进行许可授权,本文将详细介绍硬件指纹的具体获取技术,并提供一段演示源代码程序。
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

  硬件指纹加密,指的是用户免费得到软件并安装后,软件从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BOIS序列号等等),然后把这些信息和用户授权进行绑定,产生硬件特征码,用户需要将此特征码提交给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号发给用户,用户通过此注册号可以激活本地授权许可。软件加密虽然加密强度比硬件方法较弱,但它具有非常廉价的成本、方便的使用方法等优点,从而在低成本的共享软件领域广泛应用。

  硬件指纹加密的关键是电脑硬件信息的获取,我们需要通过程序将机器的标识一一读取出来,根据机器的标识,通过一定的算法,对用户进行授权限制。

  目前比较常见的硬件资源包或:硬盘物理序列号、CPU序列号、网卡MAC地址、BIOS序列号、主板序列号等,如果用户的硬件信息发生变化,比如更换了网卡等硬件,则按照一定比例进行判断,比如三分之二的硬件信息没有变化,则表示同一用户。

  下面是使用VB调用Windows的WMI编写的一段硬件指纹获取的演示程序,直接将其另存为VBS后缀文件即可运行。稍加修改即可应用在共享软件里,实现用注册码对软件进行保护的功能。

    MsgValue = ""
    Set objWMIService = GetObject("winmgmts://./root/cimv2")
    '获取硬盘序列号
    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 MACAddress 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

现在我提出一个问题,通过设备唯一标识符,可以做到dongle终端设备绑定,在满足安全性要求的同时,又保证了设备使用便利性。但是由于可连接的设备种类众多,且部分设备无法获取到设备唯一标识符,如苹果手机无法直接获取到UDID,安卓手机无法通过第三方应用直接获取IMEI。因此,使用设备指纹来替代设备唯一标识。 设备指纹包含所连接设备的硬件特征系统特征,如设备名称,处理器信息,系统版本,电池容量,存储空间大小,设备型号,基带版本,内核版本,时区信息,语言设置,IDFV(IOS特有),ANDROID_ID(安卓特有),OAID(安卓特有)等。对于无法获取的特征则直接跳过。 每个特征项都有一定的分值,其中重要特征项如处理器信息分值较高,非重要特征项分值较低。 赋分规则: 一级信息占20分(很难修改的信息):设备型号,机型代码,处理器,MAC地址,电池容量,存储空间,内存信息,屏幕信息,IDFV,ANDROID_ID,OAID,显卡,主板等 二级信息信息占10分(平时较少改动的信息):系统版本,基带版本,内核版本,安全补丁信息等 三级信息信息占5分(可通过软件修改的信息):设备名称,时区信息,语言设置,屏幕分辨率等 按照能够获取到的信息,全部相加即为总分,阈值线为总分的百分之八十。 鉴权方法:dongle通过应用程序获取到所连接设备的设备指纹获取到的设备指纹已存入的设备指纹比较,所有特征项比对完毕后计算分值。如果分值未达到阈值,则禁止使用dongle相关功能。如果分值达到阈值,则允许使用相关功能。结合以上技术表述并选择哈希算法进行验证,要求分别对以上三个模块实行分区验证,每个区域的验证方式不同,通过将以上信息的改变难易实现分类,
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值