实际会被读取的硬件标识符有哪些
主板和硬盘序列号、SMBIOS UUID、MAC 地址、TPM、GPU UUID、卷 ID 以及注册表里的 MachineGuid:每一项存在哪里,内核级机器码伪装工具能改什么、改不了什么。
简短回答
软件读取的不是单一的机器码,而是一组相互关联的值:主板和硬盘序列号、SMBIOS UUID、MAC 地址、TPM 状态、GPU UUID、卷 ID 和 MachineGuid。内核级机器码伪装工具能改变 Windows 对其中大多数值的上报结果,但改不了保存在签名固件里的值。
本页内容10
机器码是单独一个值吗?
不是。“机器码”(HWID)只是一个方便的简称,它所指的东西并不以单一值的形式存在。真正存在的是一组标识符,每一个的读取方式不同,来源和生命周期也各不相同。想要识别一台机器的软件会读取其中好几个,把组合存下来,通常还会合在一起做哈希。正是这种设计,让只改一部分的效果如此之差:剩下的值通常就足以匹配上这一组。
每个标识符存在哪里,能否伪装?
最后一列的“可伪装性”,指的是内核级工具能改变操作系统上报的哪些内容。它从来不意味着芯片里的物理值被改写了。
| 标识符 | 存放位置 | 读取途径 | 常见可伪装性 |
|---|---|---|---|
| 主板序列号 | 主板固件中的 SMBIOS 表 | Win32_BaseBoard | 上报值通常可以在操作系统层面修改,固件里存储的值则不会变 |
| 系统 UUID | SMBIOS 系统信息,出厂时写入 | Win32_ComputerSystemProduct | 通常可以在操作系统层面修改。读取它的软件很多,所以常常是那组标识符的一部分 |
| BIOS 序列号和版本 | 主板固件 | Win32_BIOS | 上报值通常可以修改;与主板型号对不上的值,本身就是一个信号 |
| 硬盘序列号 | 硬盘自身的固件,由 SATA 或 NVMe 的 identify 命令返回 | Win32_DiskDrive、存储 API | 操作系统上报的值通常可以修改。硬盘本身仍然知道自己真实的序列号 |
| 卷序列号和卷 GUID | 分区上的文件系统元数据,格式化时生成 | vol、Get-Volume、卷 API | 格式化后就会变化,通常也会被重新生成。它很容易读取,所以一旦漏掉,也很容易被用来关联 |
| MAC 地址 | 网卡的 EEPROM,其上还有一层操作系统级的覆盖设置 | getmac、Win32_NetworkAdapter | 上报的地址通常可以修改。烧录的原始地址仍保留在网卡里 |
| TPM 身份与证明密钥 | TPM 芯片,密钥由厂商认证 | Win32_Tpm、平台证明 API | 无法伪造。软件编不出厂商签名的密钥,不过可以清除 TPM 状态或禁用该设备,两者各有各的后果 |
| GPU UUID | 显卡自身的固件,由厂商驱动暴露出来 | 厂商工具和驱动 API | 操作系统级的伪装工具一般不会修改它。它是通过厂商驱动读取的,而不是通过 SMBIOS |
| 注册表 MachineGuid | 安装 Windows 时创建的一个注册表值 | HKLM 下的 Cryptography 键 | 纯粹是操作系统的值:干净重装后会变化,通常也会被重新生成 |
| Windows 安装和产品标识符 | 注册表,在安装和激活过程中写入 | 注册表和授权 API | 操作系统的值,干净重装后会被重置 |
| CPU 识别信息 | 处理器本身 | CPUID | 消费级处理器上报的是型号,而不是逐颗唯一的序列号,所以它是个弱标识符,很少起决定作用 |
| EDID 中的显示器序列号 | 显示器自身的固件 | 显示 API 和注册表中的显示器键 | 严格来说不算机器标识符,但它可以被读取,而且你更换电脑配件时它不会变 |
这张表展示的是各个值存在哪里、如何读取。它不是一份修改清单,原因见后文关于手动修改的警告。
内核级机器码伪装工具改的是什么?
内核级工具位于普通软件所用的 API 之下。当客户端向 Windows 询问硬盘序列号或主板序列号时,它得到的答案是工具提供的那个。这确实很强大,因为几乎所有读取标识符的程序都是通过这些途径读的。但这也就是全部了:工具改的是一个答案,而不是一块芯片。
内核级机器码伪装工具改不了什么?
有三类值是它对付不了的。第一类是保存在签名固件里的任何东西,最重要的是 TPM 所认证的内容。这些值无法伪造,因为签名来自工具并不持有的密钥。第二类是通过工具没有覆盖的途径读取的值,比如通过厂商驱动获取的 GPU 标识符,读回来仍是原值。第三类是物理值,它们始终留在硬件里。无论上层的 Windows 上报什么,硬盘仍然知道自己的序列号,网卡也仍然知道自己烧录的地址。声称能做到这些的工具,描述的是营销话术,而不是工作机制。
说明
为什么对不上的值会格外显眼?
一组彼此对不上的标识符,比原来那组更有辨识度。比如桌面芯片组上出现了笔记本主板的序列号,或者硬盘序列号的格式是那家厂商从来没用过的。一个根本不存在的主板型号,或者每读一次就变一次的值,也同样显眼。这些情况本身就各自构成一种特征,所以随机值并不等于安全值。这也是为什么工具能否选出合理可信的值,比它改动了多少个字段更重要。
漏掉一个标识符,会让其余的都白改吗?
如果当初记录的是八个值,现在其中七个读出来都不一样了,第八个仍然可能和旧记录对上。会不会对上,取决于厂商如何关联这些值,而这一点是不公开的,所以要假定最薄弱的那一环决定结果。这也是为什么在实际操作中,应该逐一验证所有能读取到的值,而不是相信一个汇总界面。
除了硬件,还有什么能识别出你?
有人买硬件层面的工具,指望它能处理这些,但它处理不了,其他任何本地工具也一样。
- 账号本身,以及平台针对它记录下的任何东西
- 绑定在该账号上的邮箱和手机号
- 购买游戏或充值平台余额时使用的付款方式
- 你的 IP 地址、运营商以及你玩游戏所用的网络
- 你的游戏行为:瞄准轨迹、操作时机、统计上的异常值、被举报的数量
- 好友关系网,以及你和谁一起组队排队
- 你在公开频道里透露的任何关于自己的信息
警告
应该自己动手修改这些值吗?
不应该。不要手动修改这些值,无论是在注册表里还是在主板固件里。手动修改可能让机器无法开机、丢失激活,还可能引发保修纠纷。它还可能让标识符组合前后矛盾,反而比原来更显眼。如果你想看看自己的机器上报了什么,验证指南里列出了只读命令。修改是工具的活,也只应该由专门为此开发的工具来做。
关于硬件标识符的常见问题
反作弊实际用的是哪个标识符?
这一点没有公开,各家厂商不同,而且会随时间变化。所有关于具体权重的说法都是社区推断,所以要针对整组标识符做打算,而不是只盯着某一个值。
换块硬盘能解决机器码封禁吗?
靠不住。如果记录下的那组值里包括主板、UUID、MAC 或 TPM 的值,换新硬盘只改了其中一项,其余的仍然对得上。
干净重装 Windows 会改变我的机器码吗?
它会改变操作系统层面的值,比如 MachineGuid、安装标识符和卷序列号,但不会碰固件里的任何东西。单靠重装本身,并不算更换了硬件身份。
TPM 会是个麻烦吗?
在不虚假宣传的前提下,它是最难处理的一项,因为它的密钥经过厂商认证,无法伪造。TPM 状态能做到哪一步,取决于你的主板和你用的工具,但任何声称能伪造远程证明的人都是在夸大其词。
如果我用 Wi-Fi,改 MAC 地址还有意义吗?
每块网卡,无论有线还是无线,都有自己的地址,而且任何一块都可以被读取。要检查所有网卡,而不是想当然地认为只有你正在用来联网的那块能被看到。
资料来源
除 EDID 序列号外,表中内容都是实测所得:团队在自己的机器上读取了这些值。没有任何厂商公开反作弊用的是其中哪几项。
- 01
继续阅读
仍然没有解决?在 Discord 提交工单
全部指南