如何在 Windows、macOS 和 Linux 上查找 HWID
使用当前适用的 Windows、macOS 和 Linux 命令查看 SMBIOS UUID、MachineGuid、硬件序列号等标识符,并理解每个值究竟标识什么。
HWID Checker · 2026年8月10日 · 2 分钟阅读
如果游戏、软件厂商或 IT 管理员要求你提供 HWID(硬件 ID),先确认对方需要哪个字段和什么格式。不存在每台电脑都保存的通用 HWID。这个词可能指 SMBIOS UUID、物理硬盘序列号、Windows 安装标识符,也可能指某个产品使用多个值生成的专用设备指纹。
因此,一条命令即使返回了真实数据,也未必是对方需要的标识符。如果固件或虚拟化平台没有提供有效值,查询结果还可能是空白、全零或通用占位符。
隐私提示: UUID、序列号和安装 ID 都可能属于敏感信息。如果对方只需要一个字段,不要公开完整报告。
Windows:优先使用 PowerShell CIM
在受支持的 Windows 10 和 Windows 11 系统上,应使用 PowerShell CIM cmdlet 查询公开固件和设备信息的 WMI 类。以下命令都是只读操作,通常不需要管理员权限。
# SMBIOS 系统 UUID
Get-CimInstance Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
# BIOS 序列号
Get-CimInstance Win32_BIOS | Select-Object -ExpandProperty SerialNumber
# 主板序列号
Get-CimInstance Win32_BaseBoard | Select-Object -ExpandProperty SerialNumber
# 物理硬盘型号和序列号
Get-CimInstance Win32_DiskDrive | Select-Object Model, SerialNumber
Win32_ComputerSystemProduct 返回的 UUID 来自 SMBIOS 的 System Information 结构。它的设计用途是标识一台机器,但数据质量取决于设备厂商或虚拟化平台。全零 UUID、重复的参考值,以及 Default string、To Be Filled By O.E.M. 等文本都是占位符,不能作为可靠的唯一标识。
WMIC 去哪里了?
旧教程经常使用:
wmic csproduct get uuid
微软已经弃用 wmic.exe 命令行工具,当前的 Windows 11 安装可能不再包含它。消失的是 WMIC 工具,不是 WMI 管理基础设施;Get-CimInstance 通过受支持的 PowerShell 接口查询同一套数据。只有在维护本来就带有 WMIC 的旧系统时才应继续使用它,不必为了旧教程重新安装。
MachineGuid 标识的是系统安装,而不是硬件
Windows 将 MachineGuid 存储在这里:
reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid
也可以用 PowerShell 读取同一个值:
Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Cryptography" -Name MachineGuid
MachineGuid 标识一套 Windows 安装。部分应用会将它用作许可或设备识别的一个输入,另一些应用完全不用它。它不是主板序列号,也不能证明当前系统运行在某一台特定的实体电脑上。重新安装、系统镜像、克隆和某些恢复流程可能会更换或复制这个值。
设备管理器显示的是 PnP 硬件 ID
在设备管理器中打开某个设备的属性,进入详细信息并选择硬件 ID,会看到类似 PCI\VEN_8086&DEV_... 的值。这些是 Plug and Play 标识字符串,主要用于为设备匹配驱动程序包。
它们通常描述设备型号、厂商、子系统和修订版本,同型号设备可能共享完全相同的值。不要把 PnP 硬件 ID 与设备序列号、设备实例 ID 或整机 HWID 混为一谈。
macOS 标识符
最不容易产生歧义的起点是查看完整硬件报告:
system_profiler SPHardwareDataType
以下命令不依赖 system_profiler 的界面语言,可以直接读取平台 UUID 和 Mac 序列号:
ioreg -rd1 -c IOPlatformExpertDevice | awk -F'= ' '/IOPlatformUUID/{gsub(/"/,"",$2); print $2}'
ioreg -rd1 -c IOPlatformExpertDevice | awk -F'= ' '/IOPlatformSerialNumber/{gsub(/"/,"",$2); print $2}'
查询网络地址前,先确认硬件端口对应哪个接口名:
networksetup -listallhardwareports
ifconfig en0 | awk '/ether/{print $2}'
将 en0 替换为需要查询的接口。当前显示的地址不一定是出厂 MAC:Wi-Fi 隐私地址、虚拟网卡和硬件更换都会改变软件看到的值。
Linux 标识符
Linux 同时提供安装级标识和固件级标识:
# 操作系统安装或主机环境 ID,不是硬件序列号
cat /etc/machine-id
# SMBIOS 系统 UUID,通常需要 root 权限
sudo dmidecode -s system-uuid
# 物理块设备以及它们公开的序列号
lsblk --nodeps -o NAME,MODEL,SERIAL
# 网络接口及其当前链路层地址
ip link show
/etc/machine-id 通常在安装或首次启动时生成。更换硬件不一定改变它,错误克隆系统镜像却可能让多台机器拥有相同的值。systemd 文档将原始 machine-id 视为机密信息;应用应该派生自身专用的标识符,而不是将原始值发送给不可信服务。
dmidecode 读取固件表。在容器中可能无法使用;在虚拟机中,它通常返回虚拟机的 UUID,而不是宿主服务器的物理身份。
虚拟机、云桌面与瘦客户端盒子
桌面上放着一台实体盒子,并不代表 Windows 就直接运行在这台盒子里。学校和办公室经常使用瘦客户端或迷你主机,连接到运行在其他服务器上的 VDI 或云桌面。
如果看到 QEMU HARDDISK、Red Hat VirtIO、VMware 设备或 Hyper-V 虚拟网卡,说明操作系统看到的是虚拟硬件。在这种环境中:
- SMBIOS UUID 可能由虚拟机管理程序分配、从模板复制,或者全为零;
- 硬盘序列号属于虚拟磁盘,不是服务器物理 SSD 的序列号;
- MAC 地址属于虚拟网卡,重建虚拟机时可能变化;
- 主板、机箱和内存序列号可能为空或是通用值;
- 报告标识的是当前客户机环境,不一定是桌面上的终端盒子。
这不表示查询失败,而是操作系统被允许看到的信息本来就有限。
Windows 便携报告与项目专用哈希
如果想把 Windows 能读取的值集中到一份本地报告中,可以下载 Windows 版 HWID Checker。这是无需安装的 x64 便携工具,支持:
hwid-checker.exe -save
hwid-checker.exe -json
hwid-checker.exe -no-hash
工具只读取系统在本地公开的数据,并且只有使用 -save 时才写入文件。空结果会被省略,但当前版本仍可能显示通用固件占位符或全零 UUID。hashed hwid sha256 是本项目根据采集到的非空字段生成的摘要。它不是 EXE 文件的 SHA-256 校验值,不是通用 HWID,也不保证与某款游戏、反作弊系统或许可厂商使用的标识符一致。
调查变化时应比较原始字段,而不能只看最终哈希。安装 ID、网卡、虚拟设备以及查询结果的排列顺序都可能改变。
你真正需要的是哪个值?
| 对方要求的值 | 它标识什么 | 重要限制 |
|---|---|---|
| SMBIOS UUID | 固件或虚拟机的系统记录 | 可能为空、通用、重复或由虚拟机管理程序分配 |
| BIOS/主板序列号 | OEM 固件记录 | 零售主板和虚拟机经常返回占位符 |
| 物理硬盘序列号 | 操作系统可见的存储设备 | 虚拟磁盘和 USB 桥接器可能返回合成值或空值 |
| MachineGuid | 一套 Windows 安装 | 重新安装或克隆镜像时可能改变或重复 |
/etc/machine-id | Linux 安装或主机环境 | 原始值具有敏感性,不是物理硬件序列号 |
| MAC 地址 | 当前呈现给系统的网络接口 | 可能因隐私设置、虚拟化或更换网卡而变化 |
| PnP 硬件 ID | 用于匹配驱动的设备系列 | 同型号设备通常会共享 |
| 厂商 HWID | 某个产品定义的设备指纹 | 只有该厂商知道使用哪些输入和变化规则 |
别人要求提供 HWID 时,应索要示例格式或使用该产品给出的官方命令。另一个值即使看起来很唯一,也不会因此变得兼容。
给软件开发者的设计建议
生产级许可系统不应简单拼接几个序列号,然后将结果视为永久身份。它需要确定性的排序和规范化、过滤已知占位符、明确处理缺失字段,并为合理的硬件更换、克隆镜像、隐私控制和虚拟机制定规则。
SHA-256 可以避免在普通输出中直接暴露原始字符串,但不能让不稳定或重复的输入变得稳定、唯一。更可靠的做法是使用应用专用的注册 ID,保护服务端账户状态,并且只将硬件证据作为一个风险信号。详见软件许可如何使用 HWID。
检查格式,但不要夸大结果的证明力
在线 HWID Checker可以识别常见格式、标记全零占位符,并将某个值与用户提供的列表进行比较。处理完全在浏览器中完成,不会上传输入数据。
通过格式检查只表示字符串在结构上看起来合理。它不能证明该值来自真实硬件、属于某台特定电脑,也不能证明第三方服务会接受它。
主要技术资料
- Microsoft:Win32_ComputerSystemProduct 及其 UUID 属性
- Microsoft:Device identification strings
- Apple:查找 Mac 的机型名称和序列号
- systemd:machine-id