设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址http://www.vonwei.com/post/UniqueDeviceIDforWindows.html唯一的标识一个设备是一个基本功能可以拥有很多应用场景比如软件授权如何保证你的软件在授权后才能在特定机器上使用、软件License设备标识设备身份识别等。下面列举一下各种方法的优劣1网卡MAC地址MAC地址可能是最常用的标识方法但是现在这种方法基本不可靠一个电脑可能存在多个网卡多个MAC地址如典型的笔记本可能存在有线、无线、蓝牙等多个MAC地址随着不同连接方式的改变每次MAC地址也会改变。而且当安装有虚拟机时MAC地址会更多。MAC地址另外一个更加致命的弱点是MAC地址很容易手动更改。因此MAC地址基本不推荐用作设备唯一ID。2CPU 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的服务器必须保持在线。5Windows的产品IDProductId在“控制面板\系统和安全\系统”的最下面就可以看到激活的Windows产品ID信息另外通过注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion”也可以看到看到“ProductId”字段。不过这个产品ID并不唯一不同系统或者机器重复的概率也比较大。虚拟机中克隆的系统使用同一个镜像安装激活的系统其产品ID就可能一模一样。经过实测笔者在两台Thinkpad笔记本上发现其ProductId完全一样。6MachineGUIDWindows安装时会唯一生成一个GUID可以在注册表“HKEY_MACHINE\SOFTWARE\Microsoft\Cryptography”中查看其“MachineGuid”字段。这个ID作为Windows系统设备的唯一标识不错不过值得注意的一点是与硬件ID不一样这个ID在重装Windows系统后应该不一样了。这样授权软件在重装系统后可能就需要用户重新购买授权。7主板smBIOS UUID在Windows系统中通过命令行运行“wmic csproduct get UUID”可以查看。主板UUID是很多授权方法和微软官方都比较推崇的方法即便重装系统UUID应该也不会变笔者没有实测重装不过在一台机器上安装双系统获取的主板UUID是一样的双系统一个windows一个LinuxLinux下用“dmidecode -s system-uuid”命令可以获取UUID。但是这个方法也有缺陷因为不是所有的厂商都提供一个UUID当这种情况发生时wmic会返回“FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF”即一个无效的UUID。8外置密码设备提供唯一ID这种方法很多比如U盾里面可以提供唯一的密钥标识可信计算密码芯片里面的背书密钥EK等都是唯一固定在安全硬件里面的而且通过良好的密码算法生成唯一性和差异性都可以保证安全性也更高。这种方法需要在计算设备连接外置密码芯片增加经济负担和开发成本。而且即便这种方法也存在欺骗攻击和代理攻击等破解方法。其实设备唯一标识其实也是指纹的一种想要使用标识或者指纹时首先必须明确自己的真实意图是要标识一个用户这样可以使用身份证、指纹、手机验证等方式还是要标识一个设备本文列举的各种设备ID。根据自己的真实意图才能进一步思考具体使用的方式不忘初衷。9BIOS序列号有些bios里面看不到序列号获取BIOS序列号指令wmic bios get serialnumber. 用户在使用计算机的过程中都会接触到BIOS它在计算机系统中起着非常重要的作用。一块主板性能优越与否很大程度上取决于主板上的BIOS管理功能是否先进。BIOSBasic Input/Output System基本输入输出系统全称是ROMBIOS是只读存储器基本输入输出系统的简写它实际是一组被固化到电脑中为电脑提供最低级最直接的硬件控制的程序它是连通软件程序和硬件设备之间的枢纽通俗地说BIOS是硬件与软件程序之间的一个“转换器”或者说是接口虽然它本身也只是一个程序负责解决硬件的即时要求并按软件对硬件的操作要求具体执行。BIOS芯片是主板上一块长方型或正方型芯片BIOS中主要存放自诊断程序通过读取CMOS RAM中的内容识别硬件配置并对其进行自检和初始化 CMOS设置程序引导过程中用特殊热键启动进行设置后存入CMOS RAM中 系统自举装载程序在自检成功后将磁盘相对0道0扇区上的引导程序装入内存让其运行以装入DOS系统 主要IO设备的驱动程序和中断服务由于BIOS直接和系统硬件资源打交道因此总是针对某一类型的硬件系统而各种硬件系统又各有不同所以存在各种不同种类的BIOS随着硬件技术的发展同一种BIOS也先后出现了不同的版本新版本的BIOS比起老版本来说功能更强。重装系统BIOS序列后并不会改变。总结当然还有很多其它方法如可以获取声卡、CPU模式和频率、IDE控制器、内存等其他信息。甚至可以收集设备的软硬件配置通过统计方法和机器学习方法进行分类识别设备。学术上还有各种密码算法硬件不可克隆函数PUF等唯一标识的方法可以使用。从软件授权这个简单的应用来看购买外置密码设备硬件太过昂贵可以采用简单的组合方法推荐使用主板UUID作为主标识当UUID返回无效的值时可以进一步采用CPU ID、BIOS序列号、MachineGUID等方式作为次标识这基本可以解决问题。不过不管使用怎样的硬件信息或者牛气的算法来进行用户或者设备的标识还是一句老话“道高一尺魔高一丈”都是可以被攻破的即便你的标识伪造不了、克隆不了攻击者也可以使用其它攻击方式如逆向你的验证check代码然后将其修改掉使其check失灵。因此无论设备标识或者用户标识很多情况下可能只防君子、不防小人甚至悲观者认为这些手段都是防止合法用户的影响用户使用的方便性大可以取消掉。笔者认为没有必要这么悲观知识产权等信息是尊敬人的价值和劳动的表现即便不能完全防止小人我们也要通过这些方法将一般的小人排除在技术门槛之外并尽量增加高级小人破解时的代价。

相关新闻

STM32F103串口printf重定向实战:从CubeMX配置到Linux驱动排障

STM32F103串口printf重定向实战:从CubeMX配置到Linux驱动排障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 15:39:10 阅读更多 →
mysql数据迁移

mysql数据迁移

背景:随着时间的推移,交易系统中的订单表越来越大,目前达到500w数据。为了防止数据量过大导致的查询性能问题,现将订单表进行拆分,分为实时库和历史库。实时库保留近6个月的数据,用于退款业务需求&#xff…

2026/10/24 13:38:53 阅读更多 →
OC/Swift 第三方 MJRefresh(源码)

OC/Swift 第三方 MJRefresh(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

2026/10/25 0:46:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻