原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html

唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用)、软件License,设备标识,设备身份识别等。下面列举一下各种方法的优劣:

(1)网卡MAC地址

MAC地址可能是最常用的标识方法,但是现在这种方法基本不可靠:一个电脑可能存在多个网卡,多个MAC地址,如典型的笔记本可能存在有线、无线、蓝牙等多个MAC地址,随着不同连接方式的改变,每次MAC地址也会改变。而且,当安装有虚拟机时,MAC地址会更多。MAC地址另外一个更加致命的弱点是,MAC地址很容易手动更改。因此,MAC地址基本不推荐用作设备唯一ID。

(2)CPU ID

在Windows系统中通过命令行运行“wmic cpu get processorid”就可以查看CPU ID。

  目前CPU ID也无法唯一标识设备,Intel现在可能同一批次的CPU ID都一样,不再提供唯一的ID。而且经过实际测试,新购买的同一批次PC的CPU ID很可能一样。这样作为设备的唯一标识就会存在问题。

(3)硬盘序列号

在Windows系统中通过命令行运行“wmic diskdrive get serialnumber”可以查看。

 硬盘序列号作为设备唯一ID存在的问题是,很多机器可能存在多块硬盘,特别是服务器,而且机器更换硬盘是很可能发生的事情,更换硬盘后设备ID也必须随之改变,不然也会影响授权等应用。因此,很多授权软件没有考虑使用硬盘序列号。而且,不一定所有的电脑都能获取到硬盘序列号。

(4)自定义算法生成唯一ID

可以使用自制的一个特定算法(如GUID、或者一定位数的随机数)生成唯一的ID,然后写入到注册表或者设备上,作为其唯一ID。

这种方法不依赖任何硬件特征,唯一性也可以自己完全控制,不过纯软件的实现缺点是这个ID很容易伪造,也很容易擦除;而且很可能还需要在线验证,后台存储所有ID的服务器必须保持在线。

(5)Windows的产品ID(ProductId

在“控制面板\系统和安全\系统”的最下面就可以看到激活的Windows产品ID信息,另外通过注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion”也可以看到看到“ProductId”字段。

不过这个产品ID并不唯一,不同系统或者机器重复的概率也比较大。虚拟机中克隆的系统,使用同一个镜像安装激活的系统,其产品ID就可能一模一样。经过实测,笔者在两台Thinkpad笔记本上发现其ProductId完全一样。

(6)MachineGUID

Windows安装时会唯一生成一个GUID,可以在注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Cryptography”中查看其“MachineGuid”字段。

这个ID作为Windows系统设备的唯一标识不错,不过值得注意的一点是,与硬件ID不一样,这个ID在重装Windows系统后应该不一样了。这样授权软件在重装系统后,可能就需要用户重新购买授权。

(7)主板smBIOS UUID

在Windows系统中通过命令行运行“wmic csproduct get UUID”可以查看。

主板UUID是很多授权方法和微软官方都比较推崇的方法,即便重装系统UUID应该也不会变(笔者没有实测重装,不过在一台机器上安装双系统,获取的主板UUID是一样的,双系统一个windows一个Linux,Linux下用“dmidecode -s system-uuid”命令可以获取UUID)。

但是这个方法也有缺陷,因为不是所有的厂商都提供一个UUID,当这种情况发生时,wmic会返回“FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF”,即一个无效的UUID。

(8)外置密码设备提供唯一ID

这种方法很多,比如U盾里面可以提供唯一的密钥标识,可信计算密码芯片里面的背书密钥EK等都是唯一固定在安全硬件里面的,而且通过良好的密码算法生成,唯一性和差异性都可以保证,安全性也更高。

这种方法需要在计算设备连接外置密码芯片,增加经济负担和开发成本。而且,即便这种方法也存在欺骗攻击和代理攻击等破解方法。其实设备唯一标识其实也是指纹的一种,想要使用标识或者指纹时,首先必须明确自己的真实意图,是要标识一个用户(这样可以使用身份证、指纹、手机验证等方式),还是要标识一个设备(本文列举的各种设备ID)。根据自己的真实意图才能进一步思考具体使用的方式,不忘初衷。

(9)BIOS序列号

有些bios里面看不到序列号,获取BIOS序列号指令wmic bios get serialnumber. 用户在使用计算机的过程中,都会接触到BIOS,它在计算机系统中起着非常重要的作用。一块主板性能优越与否,很大程度上取决于主板上的BIOS管理功能是否先进。 BIOS(Basic Input/Output System,基本输入输出系统)全称是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电脑提供最低级最直接的硬件控制的程序,它是连通软件程序和硬件设备之间的枢纽,通俗地说,BIOS是硬件与软件程序之间的一个“转换器”或者说是接口(虽然它本身也只是一个程序)负责解决硬件的即时要求,并按软件对硬件的操作要求具体执行。BIOS芯片是主板上一块长方型或正方型芯片,BIOS中主要存放:自诊断程序:通过读取CMOS RAM中的内容识别硬件配置,并对其进行自检和初始化; CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中; 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入DOS系统; 主要I/O设备的驱动程序和中断服务;由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强。重装系统BIOS序列后并不会改变。

 总结:

当然还有很多其它方法,如可以获取声卡、CPU模式和频率、IDE控制器、内存等其他信息。甚至,可以收集设备的软硬件配置,通过统计方法和机器学习方法进行分类识别设备。学术上,还有各种密码算法,硬件不可克隆函数PUF等唯一标识的方法可以使用。

从软件授权这个简单的应用来看,购买外置密码设备硬件太过昂贵,可以采用简单的组合方法,推荐使用主板UUID作为主标识,当UUID返回无效的值时,可以进一步采用CPU ID、BIOS序列号、MachineGUID等方式作为次标识,这基本可以解决问题。

不过,不管使用怎样的硬件信息或者牛气的算法来进行用户或者设备的标识,还是一句老话“道高一尺,魔高一丈”,都是可以被攻破的,即便你的标识伪造不了、克隆不了,攻击者也可以使用其它攻击方式,如逆向你的验证check代码,然后将其修改掉,使其check失灵。因此,无论设备标识或者用户标识,很多情况下可能只防君子、不防小人,甚至悲观者认为这些手段都是防止合法用户的,影响用户使用的方便性,大可以取消掉。笔者认为,没有必要这么悲观,知识产权等信息是尊敬人的价值和劳动的表现,即便不能完全防止小人,我们也要通过这些方法将一般的小人排除在技术门槛之外,并尽量增加高级小人破解时的代价。

设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识相关推荐

  1. 【转载】设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

    设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 原文地址:http://www.vonwei.com/post/UniqueDeviceIDfor ...

  2. 如何在windows系统上安装ubuntu双系统

    如何在windows系统上安装ubuntu双系统 一.准备工具: 1.U盘 2.软碟通:UltraISO,EasyBCD 3.系统镜像.下载网址1:https://www.ubuntu.com/dow ...

  3. 如何在Windows系统上使用Object Detection API训练自己的数据?

    前言 之前写了一篇如何在windows系统上安装Tensorflow Object Detection API?(点击跳转) 然后就想着把数据集换成自己的数据集进行训练得到自己的目标检测模型.动手之前 ...

  4. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  5. epub文件是什么文件?如何在windows系统上打开?

    我们在电脑上下载小说.书本时,经常遇到epub格式的文件.其实,EPUB是一种电子文档格式. 如同word txt pdf一样可以承载很多文字信息.但在这种格式中,使用了不同的开放标准.区别在于,EP ...

  6. 如何在Windows系统上测试服务器端口是否开放

    在工作中处理服务器故障问题的时候,经常需要检测一下Windows的服务器业务端口是否开放,是否能正常在外面通讯.下面小编与大家分享一下如何在windows环境下检测服务器端口是否开放. 1. 我们在工 ...

  7. 如何在Windows系统上下载并安装IBM磁带驱动程序

    在你开始之前 在安装磁带设备驱动程序之前,请确保已完成以下操作: 主机总线适配器(HBA)及其设备驱动程序已自动安装. 注意如果连接到磁带库的HBA是Emulex 适配器,请使用Emulex OneC ...

  8. python安装出错0x80072ee7_如何在Windows系统上安装Python?

    现在用Python的人越来越多,很多学习使用Python的人并不是专业的程序员,而是希望利用Python这个工具去提升自己的工作效率,比如数据分析师.数据运营.风控人员.财务人员等职业都对Python ...

  9. 如何在windows系统上安装Tensorflow Object Detection API?

    前言 都说Linux是最适合程序员使用的操作系统,这话还真不假. 之前一直在云服务器上跑代码,近期接手了师兄的台式机(GTX 1050),虽然配置很渣,但想在本地玩玩看,于是乎先安装一波Tensorf ...

最新文章

  1. python自学免费课堂-推荐5个Python爬虫免费学习资源(B站高赞!)
  2. DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
  3. 手动创建1个基于xml配置的springmvc 项目(without Maven)
  4. 笔记-项目进度管理-精简
  5. SLAM学习--常用数据集
  6. 大话设计模式Python实现-观察者模式
  7. ElastieSearch安装以及与Mongodb的概念对照关系
  8. 人工智能状态图matlab,人工智能—TensorFlow(七):matplotlib图形可视化
  9. jenkins 手动执行_想知道如何用Jenkins自动执行Python脚本输出测试报告?
  10. Xamarin.Forms 简介
  11. 开发Flex for Android第一个ANE(ActionScript Native Extensions)本地扩展
  12. React从入门到精通系列之(14)refs和DOM元素
  13. 笔记本电脑网卡驱动损坏问题
  14. 高中计算机教育类文章,高中信息技术的教学论文
  15. 软件各种版本的含义!例如RC,M,GA等等
  16. 用Java生成word文档
  17. box-sizing失效情况
  18. ioi 赛制_钟子谦IOI2019参赛总结
  19. 什么是敏捷BI?和传统BI有什么不同?
  20. linux-xsell、xftp连接虚拟机

热门文章

  1. (Java)图解排序算法之归并排序
  2. 哈工大计算机系统lab7——微壳
  3. linux中fstab文件_如何在Linux上写入fstab文件
  4. CS224N-HW1
  5. js事件on动态绑定数据,绑定多个事件
  6. 什么是Socket?websocket和socket区别?
  7. java.sql.SQLSyntaxErrorException问题常见解决方案:比如Table xxx doesn‘t exist;Unknown column ‘xxx‘ in ‘where...
  8. DataStage简介
  9. AI智能改写-文本改写人工智能
  10. Exchange 2019数据库切换