如何验证伪装是否真正生效
伪装前后各读一次标识符,比对两份清单,而不是相信成功提示框。本文还说明部分伪装是什么样子,并提供只读的 Windows 命令。
简短回答
伪装前读取一次标识符,伪装后再读一次,然后比对两份清单,因为成功提示框不算证据。如果只有部分值变了,说明伪装不完整,而一个没变的序列号就可能足以把机器和它原来的身份关联起来。
本页内容9
为什么成功提示还不够?
机器码伪装工具的成功提示,只说明它自己的程序运行结束且没有报错,并不能说明你的机器现在向其他软件上报的是什么。两者可能不一致,因为驱动可能没加载成功,或者工具根本不覆盖那个字段。也可能某个服务已经缓存了旧值,或者一次重启让临时修改失效了。这四种情况都会弹出一个喜气洋洋的成功提示,而标识符纹丝未动。唯一算数的证据,是你自己在伪装前后、通过其他软件所用的同一途径读出来的值。
如何比对伪装前后的值
跑一遍只要五分钟,就能把猜测变成事实。在要伪装的那台机器上操作,使用以管理员身份运行的命令提示符,并关闭游戏和所有启动器。
- 干净开机,先不要运行任何其他程序
- 运行下面的只读命令,把输出保存到一个以采集时刻命名的文件里
- 按照机器码伪装工具的文档说明运行它,其他什么都不改
- 再次运行完全相同的命令,把输出保存到第二个文件里
- 逐行比对两个文件,确认哪些字段变了、哪些没变
- 检查变化后的值是否合理可信,而不是随机乱码。主板序列号应该符合该厂商自己的格式,硬盘序列号也应该符合那家厂商的风格
- 做完这些,才启动启动器和游戏
用于检查标识符的只读命令
下面的每条命令都只读取状态:没有一条会修改标识符、注册表配置单元或固件。把最后那行 fc 之前的所有内容保存为 inspect.cmd。伪装前运行一次,伪装后再运行一次,然后用那行 fc 比对两次输出。
REM Save a snapshot. Run the same block again after spoofing into after.txt
REM inspect.cmd > before.txt then inspect.cmd > after.txt
REM Motherboard
powershell -c "Get-CimInstance Win32_BaseBoard | Select-Object Manufacturer, Product, Version, SerialNumber"
REM System UUID and the OEM identifying number
powershell -c "Get-CimInstance Win32_ComputerSystemProduct | Select-Object Name, Vendor, UUID, IdentifyingNumber"
REM BIOS
powershell -c "Get-CimInstance Win32_BIOS | Select-Object Manufacturer, SMBIOSBIOSVersion, SerialNumber, ReleaseDate"
REM Physical disks and their serials
powershell -c "Get-CimInstance Win32_DiskDrive | Select-Object Index, Model, InterfaceType, SerialNumber"
REM Volume identifiers
powershell -c "Get-Volume | Select-Object DriveLetter, FileSystemLabel, UniqueId"
vol C:
REM MAC addresses for every adapter, not just the one you are using
getmac /v /fo list
powershell -c "Get-CimInstance Win32_NetworkAdapter -Filter 'PhysicalAdapter=true' | Select-Object Name, MACAddress"
REM TPM presence and manufacturer, read-only
powershell -c "Get-CimInstance -Namespace root\CIMV2\Security\MicrosoftTpm -ClassName Win32_Tpm | Select-Object ManufacturerIdTxt, ManufacturerVersion, SpecVersion, IsEnabled_InitialValue"
REM GPU, and the vendor UUID where the vendor tooling exposes one
powershell -c "Get-CimInstance Win32_VideoController | Select-Object Name, PNPDeviceID, DriverVersion"
nvidia-smi -L
REM The registry MachineGuid - a query, which only reads
reg query "HKLM\SOFTWARE\Microsoft\Cryptography" /v MachineGuid
REM Compare the two snapshots
fc before.txt after.txt比对结果说明了什么?
找到与你两个文件情况相符的那一行。部分伪装是最危险的情况,因为工具照样会报告成功。
| 比对结果 | 说明什么 | 怎么做 |
|---|---|---|
| 工具声称覆盖的每个标识符都变了,而且新值看起来合理可信 | 伪装按预期生效 | 继续完成你流程里剩下的步骤。保留这两个文件,下次作为参考 |
| 部分字段变了,其余字段与伪装前的文件完全相同 | 部分伪装。一个没变的序列号就可能足以匹配上之前那组值 | 什么都别启动。重新阅读工具文档中关于覆盖范围的说明,并就未覆盖的字段向它的客服反馈 |
| 什么都没变 | 工具没有生效:它需要管理员权限却没有提权、驱动加载失败,或者被什么东西拦截了 | 重启,在不启动任何其他程序的干净开机状态下再运行一次,然后重新验证 |
| 值变了,但重启后又恢复了 | 临时伪装,完全在按设计工作 | 每次使用都把开机、伪装、验证当作一套固定流程 |
| 值变了,但看起来不合理或自相矛盾 | 前后矛盾的标识符本身就是信号,而且比原来的值更有辨识度 | 使用工具自己生成的配置文件,而不是随意填写的值,并向它的客服询问这些字段应该是什么样子 |
| 同一条命令每次读取,值都不一样 | 有东西在每次调用时都生成一个新答案 | 停下来先问清楚,因为读取这些标识符的软件不会预期出现这种情况,而且这非常显眼 |
说明
哪些值应该保持不变?
验证针对的是工具声称覆盖的那些字段,而不是追求差异越多越好。你的 Windows 版本号、CPU 型号、GPU 型号和内存容量,都应该保持不变。一个工具如果上报的 CPU 型号和插槽里的实际芯片不一样,它制造的是矛盾,而不是改进。也不要指望 TPM 厂商那一行会变:读取它,是为了弄清楚 TPM 到底存不存在、有没有启用。
部分伪装是什么原因造成的?
部分伪装通常出于以下四个原因之一。第一,工具不覆盖那个标识符,也从来没声称过覆盖。第二,这个值是通过工具没有介入的途径读取的,GPU 标识符就经常如此。第三,某个服务在伪装之前就已启动,并缓存了旧值。第四,重启之后,临时修改悄无声息地失效了。这四种情况在伪装前后的比对中一目了然,在成功提示框里却完全看不出来。
启动任何程序之前要检查的事
- 伪装前的快照是在干净开机状态下、启动任何启动器之前采集的
- 伪装后的快照用的是完全相同的命令
- 工具声称覆盖的每个字段都显示了不同的值
- 新值看起来像真实硬件的值,而不是随机字符串
- 本该保持不变的东西都没变,比如 Windows 版本号、CPU 型号或内存容量
- 所有网卡都检查过,而不只是当前联网的那一块
- 你知道自己的伪装重启后是否保留,并且已经通过重启后再次读取数值验证过
- 两个文件都保存在下次能找到的地方
警告
比对结果干净,就能保证安全吗?
不能。干净的比对结果证明的是你的机器现在上报了不同的值。它不能证明没有残留的标识符,不能证明厂商无法通过别的途径把你关联起来,也不能证明封禁不会随之而来。它检查的是工具有没有做到它所说的事,而这是整件事里你唯一能自己确认的部分。正因为此后的一切都不在你的掌控之中,这项检查才值得做。
关于验证的常见问题
这些命令需要管理员权限吗?
大多数 CIM 查询以普通用户身份就能运行,而且所有命令都只读取。不过还是要在以管理员身份运行的命令提示符里执行,这样伪装前后的快照才是在完全相同的条件下采集的。
可以用 wmic 代替 Get-CimInstance 吗?
旧的 wmic 对应命令返回的字段相同,但 wmic 已被弃用,当前的 Windows 版本里已经没有了。请改用 CIM 命令,这样同一段命令才能一直用下去。
工具提示成功,但什么都没变。该信哪个?
信你的比对结果,因为提示框报告的是程序自己的返回值,而不是你的机器向其他软件上报的内容。重启,在干净开机状态下运行工具,并在启动任何东西之前重新验证。
每次使用都要验证吗?
如果你的伪装是临时的,每次使用都要验证,因为重启后它就会失效。如果是永久伪装,在应用之后验证一次,之后每次 Windows 更新或更换硬件后再验证一次。
有没有一条命令能直接显示我的机器码?
没有,因为根本不存在单一的机器码。你需要读取整组标识符,这也是为什么检查命令是一份列表,而不是一行。
资料来源
这些命令都是 Windows 标准命令,检查流程则是团队自己总结的。没有任何公开资料描述过部分伪装是什么样子。
继续阅读
仍然没有解决?在 Discord 提交工单
全部指南