如何让软件绑定计算机硬件
2016-01-20 21:28
351 查看
软件绑定计算机硬件标识是不少软件采用的防拷贝方法。然而如何确定计算机硬件的唯一标识却不是简单的事情。下面是常采用的方法及其优缺点。
目前存在的CPU几乎都支持CPUID指令。这个指令不仅可以获取CPU生产厂商等基本信息,还可以获取其他有关CPU的硬件信息,包括CPU序列号。
首先需要说明的是,CPU批号和CPU序列号是不同的东西,同样型号的CPU具有相同的批号,而CPU序列号基本可以说是唯一的。
然而不幸的是,并不是所有CPU都支持CPU序列号。曾经这还是个政治问题,用户处于保密考虑,不希望CPU厂商使用序列号来标识其购买的CPU。Intel的官方文档还说,就算是其生产的CPU支持CPU序列号,也不能保证其唯一性,而且用户还可以在BIOS里禁用序列号功能。
VMware等虚拟机可以轻松的更改虚机的CPU序列号。
不建议使用。
网卡MAC是具有国际标准的地址编号,能够确保世界上的每一块网卡具有唯一的序列号。
问题是,虽然现在大部分机器都继承了网卡,但是仍然有部分机器没有安装网卡。而且有些机器还安装了多个网卡,这就需要做更多的判断。
虚拟网卡软件早就有了,对于虚拟的网卡,其MAC地址可以随便修改。
联网机器可以尝试使用。
除了一些特殊硬盘外,大部分硬盘都有自己唯一的硬件序列号,而且不可修改。
但是硬盘相对而言,不如集成网卡和CPU那样稳定,用户更换硬盘的行为时而会发生。也存在多个硬盘并存的情况。
另外,对于使用RAID的用户来说,硬盘序列号是不存在的。
对于虚拟机来说,无安全性。
一般。
首先要说明,硬盘分区序列号和硬盘物理序列号是不同的东西。硬盘物理序列号是硬盘厂商指定的,而分区序列号是分区软件指定的。每次重新分区的时候,这个序列号会变动。
对于GPT硬盘分区来说,每一个分区都使用全球唯一的UUID来标识,具有良好的唯一性和可用性。
另外对于RAID设备来说,分区序列号同样存在并可用。
由于这个序列号是分区软件指定的,所以也就无安全性而言了。
可以使用。
获得了硬件唯一标识以后,需要做的就是让软件在运行时动态获取这个标识,然后把它与授权码进行比较。
如何根据硬件唯一标识产生授权码是绑定算法的全部。最简单的方法是直接把硬件唯一标识作为授权码。然而这样做是非常不安全的,软件用户通过修改硬件唯一标识很容易就能蒙混过关。
所以一般的方法是: 授权码=f(硬件唯一标识)。其中的f算法是需要保密的,这样即使用户看到了授权码,仍然不能仅仅通过授权码而修改硬件唯一标识。
但是用户仍然可以复制已经获得授权的机器的硬件标识和授权码来复制软件。
所以对于硬件标识的确定也需要对用户保密,毕竟要完全复制一台机器的所有硬件序列号是一件非常困难的事情。
1 计算机唯一性标识的方法
1.1 CPU序列号
可用性
目前存在的CPU几乎都支持CPUID指令。这个指令不仅可以获取CPU生产厂商等基本信息,还可以获取其他有关CPU的硬件信息,包括CPU序列号。首先需要说明的是,CPU批号和CPU序列号是不同的东西,同样型号的CPU具有相同的批号,而CPU序列号基本可以说是唯一的。
然而不幸的是,并不是所有CPU都支持CPU序列号。曾经这还是个政治问题,用户处于保密考虑,不希望CPU厂商使用序列号来标识其购买的CPU。Intel的官方文档还说,就算是其生产的CPU支持CPU序列号,也不能保证其唯一性,而且用户还可以在BIOS里禁用序列号功能。
安全性
VMware等虚拟机可以轻松的更改虚机的CPU序列号。
使用建议
不建议使用。
1.2 网卡MAC
可用性
网卡MAC是具有国际标准的地址编号,能够确保世界上的每一块网卡具有唯一的序列号。问题是,虽然现在大部分机器都继承了网卡,但是仍然有部分机器没有安装网卡。而且有些机器还安装了多个网卡,这就需要做更多的判断。
安全性
虚拟网卡软件早就有了,对于虚拟的网卡,其MAC地址可以随便修改。
使用建议
联网机器可以尝试使用。
1.3 硬盘序列号
可用性
除了一些特殊硬盘外,大部分硬盘都有自己唯一的硬件序列号,而且不可修改。但是硬盘相对而言,不如集成网卡和CPU那样稳定,用户更换硬盘的行为时而会发生。也存在多个硬盘并存的情况。
另外,对于使用RAID的用户来说,硬盘序列号是不存在的。
安全性
对于虚拟机来说,无安全性。
使用建议
一般。
1.4 硬盘分区序列号
可用性
首先要说明,硬盘分区序列号和硬盘物理序列号是不同的东西。硬盘物理序列号是硬盘厂商指定的,而分区序列号是分区软件指定的。每次重新分区的时候,这个序列号会变动。对于GPT硬盘分区来说,每一个分区都使用全球唯一的UUID来标识,具有良好的唯一性和可用性。
另外对于RAID设备来说,分区序列号同样存在并可用。
安全性
由于这个序列号是分区软件指定的,所以也就无安全性而言了。
使用建议
可以使用。
2 绑定硬件的算法
获得了硬件唯一标识以后,需要做的就是让软件在运行时动态获取这个标识,然后把它与授权码进行比较。如何根据硬件唯一标识产生授权码是绑定算法的全部。最简单的方法是直接把硬件唯一标识作为授权码。然而这样做是非常不安全的,软件用户通过修改硬件唯一标识很容易就能蒙混过关。
所以一般的方法是: 授权码=f(硬件唯一标识)。其中的f算法是需要保密的,这样即使用户看到了授权码,仍然不能仅仅通过授权码而修改硬件唯一标识。
但是用户仍然可以复制已经获得授权的机器的硬件标识和授权码来复制软件。
所以对于硬件标识的确定也需要对用户保密,毕竟要完全复制一台机器的所有硬件序列号是一件非常困难的事情。
相关文章推荐
- HDU 1565:最大点权独立集(网络流)
- BP神经网络算法
- 数据结构之递归算法
- NSURLSession从网络上下载资源,此程序下载的是视频
- NSURLSession从网络上下载资源,此程序下载的是视频
- POJ 2112:floyd+网络流+二分
- BP神经网络原理及C++实战
- Stanford机器学习---第四周.神经网络模型
- uva 1456 - Cellular Network 蜂窝网络 概率DP
- 数据结构和算法学习第1天:线性表
- 【Redis笔记(三)】 Redis数据结构 - hash哈希
- Python配合BeautifulSoup读取网络图片并保存在本地
- IOS学习开发网络篇:文件上传
- 计算机视觉中常用数据集
- Java--多线程读取网络图片并保存在本地
- 自定义tcp流媒体传输协议延时在300ms以内
- java ssl https 连接详解 生成证书
- Hyper-V 网络安装 CentOS
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片比较
- Run busybox httpd with php, sqlite