设备唯一标识方法(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失灵。因此无论设备标识或者用户标识很多情况下可能只防君子、不防小人甚至悲观者认为这些手段都是防止合法用户的影响用户使用的方便性大可以取消掉。笔者认为没有必要这么悲观知识产权等信息是尊敬人的价值和劳动的表现即便不能完全防止小人我们也要通过这些方法将一般的小人排除在技术门槛之外并尽量增加高级小人破解时的代价。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →