VMware 虚拟机“去虚拟化”实战:检测原理、隐藏手段与成品镜像使用全解析
先回答一个很多人纠结的问题:VMware 虚拟机不是装好就能用吗,为什么要做“去虚拟化”?
你在用虚拟机跑某些对硬件指纹要求很严的软件时,大概率会碰到两种情况:要么软件直接弹出“检测到虚拟机环境,拒绝运行”,要么运行后卡顿、蓝屏、无法分配硬件资源。这不是 VMware 的问题,而是因为虚拟机在 BIOS、CPU 指令集、设备驱动、注册表等多层都会暴露“虚拟化特征”。所谓“去虚拟化”,本质就是把这一层层特征改掉或隐藏,让客户机系统看起来更像一台物理机。
这篇文章不从“改改配置文件就能骗过所有软件”这种夸张说法出发,而是把 VMware 虚拟机的虚拟化检测原理、常见暴露点、去虚拟化的通用操作流程,以及怎么验证效果讲清楚。文章后半部分会给出一个可以直接导入启动的成品虚拟机镜像方案,并解释为什么“打开即用”的成品镜像是双刃剑。
如果你是做软件兼容性测试、系统调试、内核驱动开发,或者单纯想搞明白虚拟机特征检测的原理,这篇文章值得收藏。
1. 这篇文章真正要解决的问题
1.1 虚拟机能跑,但软件不让跑
很多开发者在 VMware Workstation Pro 里装好 Windows 10 或 Windows Server,日常调试、编译、测试跑得正欢。但某天要安装某个安全软件、某个带 DRM 保护的客户端、某个硬加密工具,系统直接提示:
- “检测到当前运行环境为虚拟机,程序退出。”
- “客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”
- “无法在更新服务器上找到组件。请联系 VMware 技术支持或您的系统管理员。”
这时候第一反应是去 BIOS 里开虚拟化,或者重装 VMware Tools,但问题依旧。
原因很简单:这些软件不一定通过“是不是虚拟机”这一个维度来判断,而是组合检测 CPUID 指令返回结果、系统固件表(SMBIOS/ACPI)、设备型号字符串、磁盘控制器名称、网卡 MAC 厂商、注册表项、驱动痕迹等多个特征点。任何一个特征比对命中,就会触发拦截。
1.2 去虚拟化到底是什么
去虚拟化的技术方向有两类:
- 第一类:修改虚拟机配置和系统内部特征,让它尽量不像虚拟机。包括修改 .vmx 配置、替换 SMBIOS 信息、修改注册表、删除或替换虚拟化相关的驱动痕迹、修改设备管理器中的显示名称。这类操作不需要改动 VMware 底层程序,风险相对可控。
- 第二类:修改 VMware 自身或使用外部补丁,让 VMM(虚拟机监视器)对客户机隐藏虚拟化指令。比如修改 vmware-vmx.exe 的二进制,或者在宿主机层拦截 CPUID 调用。这类操作依赖具体版本,对 VMware 后续更新不友好,而且可能触碰软件许可条款。
本文重点写第一类,也就是“系统层去虚拟化”,因为它在当前版本 VMware Workstation 17 下可复现、可验证、可回滚,同时也会对成品镜像方案做分析。
1.3 读完这篇文章你能得到什么
- 了解虚拟机被检测到的原理,不再盲试。
- 掌握一套不用替换 VMware 主程序的去虚拟化操作流程。
- 知道怎么验证隐藏效果,以及哪些环节最容易失败。
- 学会判别网上下载的“去虚拟化成品”镜像可用性和风险。
2. 虚拟机被识别的底层原因
2.1 虚拟机软件的“特征”无法完全隐藏
虚拟机软件本质上是一个用户态进程(VMware Workstation)加一个内核态驱动,它要模拟 CPU、内存、设备控制器,就必须让客户机操作系统读到这些模拟设备的属性。Windows 这类对硬件敏感的操作系统,会通过 ACPI、SMBIOS、WMI 等标准接口查询硬件信息。只要 VMware 没有刻意伪装,查询结果里就会出现 VMware 的厂商字符串和设备型号。
常见的暴露点:
| 检测对象 | 常见特征 | 说明 |
|---|---|---|
| SMBIOS 系统信息 | 制造商 System Manufacturer 显示 VMware, Inc. | 通过wmic bios get manufacturer可见 |
| SMBIOS 产品型号 | Product Name 显示 VMware Virtual Platform | 通过wmic computersystem get model可见 |
| CPUID 指令返回 | Hypervisor 厂商字符串显示 “VMwareVMware” | 需要工具读取,例如 CPU-Z、Securable |
| 设备管理器 | VMware SVGA 3D、VMware Virtual disk SCSI Disk Device | 设备名称带 VMware 前缀 |
| 网卡 | Intel PRO/1000 MT 或者 VMXNET3,有时 MAC 前缀为 00:0C:29 | OUI 属于 VMware |
| 磁盘控制器 | VMware Virtual NVMe / LSI Logic SAS | 设备描述带 VMware |
| BIOS 字符串 | VMware BIOS | 用 msinfo32 可看到 BIOS 版本里有 VMware |
| 注册表 | HARDWARE\DESCRIPTION\System\SystemBiosVersion 含 VMWARE | 注册表里有 VMware 关键字 |
如果只是日常使用,这些特征无所谓。但在反作弊、安全软件、某些金融客户端场景下,这些字符串就是“虚拟机身份证”,直接命中。
2.2 为什么不能只改一个地方
很多教程只让你改注册表或者修改.vmx文件中的SMBIOS.reflectHost,但改完之后还是被检测。
原因在于检测程序会交叉验证。
比如安全软件先读 SMBIOS 制造商,发现是VMware, Inc.,直接拦截。它可能还会通过 WMI 查Win32_BIOS、Win32_ComputerSystem、Win32_BaseBoard,任何一个地方返回 VMware,都能判断。所以去虚拟化必须做系统性替换,而不是改单个点。
另一个关键点是CPUID 指令检测。这是目前最硬核的检测方式,因为它发生在 CPU 指令层面,Windows 注册表和 SMBIOS 修改无法影响它。比如 CPUID leaf 0x40000000,虚拟机管理程序会在 EBX、ECX、EDX 中返回自己的厂商 ID。VMware 返回的是VMwareVMware,Hyper-V 返回的是Microsoft Hv,KVM 返回KVMKVM。
软件只要调用 CPUID,解析出这几个寄存器的值,就能确认“当前系统运行在虚拟机里”,而且还能精确识别虚拟机厂商。想要隐藏这一层,必须修改虚拟机配置或在宿主机侧做拦截。
2.3 Hyper-V 与 VMware 的叠加问题
还有一个经常被忽略的问题:Windows 10/11 宿主机默认开启基于虚拟化的安全(VBS)、内核隔离、内存完整性之后,Hyper-V 会接管 CPU 的虚拟化指令。此时 VMware Workstation 作为 Hyper-V 的子虚拟机运行,客户机系统里看到的 CPUID 返回可能是Microsoft Hv,而不是 VMware,这同样会被安全软件识别为“虚拟机环境”。
热词里提到的“wsl2 无法启动,因为此计算机上未启用虚拟化”“vmware workstation 26h1 不支持 intel vt-x”,都跟这个叠加状态有关系。所以做去虚拟化之前,必须先确认宿主机 Hyper-V 是否关闭,否则你在客户机里改了 SMBIOS 和注册表,CPUID 这一层还是会暴露。
清楚了原理,再做操作就不会盲目了。
3. 环境准备与前置条件
3.1 软件版本
以目前主流的 VMware Workstation Pro 17 系列为例。如果你的 VMware 是 16 或更早版本,菜单和配置文件位置类似,但某些高级参数可能不支持,建议统一使用 17 系列。
去虚拟化与 VMware Tools 的版本关系不大,但如果你删掉了 VMware Tools,网络和显卡驱动会受影响,因此操作时不要卸载 Tools,除非你明确知道后果。
3.2 客户机系统
本文示例使用 Windows 10 Pro 或 Windows Server 2022。Windows 11 也可以,但 Windows 11 对 TPM、Secure Boot 的要求更高,在 VMware 里开启这些组件后,检测特征会更多。第一次做去虚拟化时,不建议直接用 Windows 11 当小白鼠。
3.3 确认宿主机 Hyper-V 状态
打开 PowerShell(管理员)执行:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All如果 State 是 Enabled,需要先关闭:
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All或者通过控制面板 - 启用或关闭 Windows 功能,取消勾选 Hyper-V、虚拟机平台、Windows 虚拟机监控程序平台,然后重启。
需要强调:关闭 Hyper-V 会影响到 WSL2 和 Docker Desktop(如果依赖 WSL2),所以生产环境不要随手关。本文的操作基于“宿主机不启用 Hyper-V”的前置条件。
3.4 准备检测工具
- CPU-Z:查看 CPUID 信息。
- Securable:查看硬件虚拟化状态和 Hypervisor 厂商。
- AIDA64:查看 SMBIOS/DMI 信息。
- 7-Zip:解压工具。
- 一个快照:进入客户机系统后,先创建快照,方便回滚。
4. 去虚拟化核心流程拆解
4.1 整体思路
去虚拟化要同时处理四个维度:
- VMware 配置层:修改
.vmx文件,让虚拟机的 SMBIOS 字段从宿主机读取,或者填写自定义值。 - 客户机系统层:修改注册表中的 BIOS 描述、系统制造商、产品名称。
- 设备层:隐藏或替换 VMware 磁盘、显卡、网卡、声卡的设备描述。
- 固件层:处理 ACPI 表信息和 DSDT 中的 OEM ID。
注意:这四个维度不是互相独立,很多注册表项会在每次启动时被 PnP 管理器重新写入,所以只改注册表重启后就失效。必须配合.vmx配置和系统策略一起改。
4.2 步骤一:修改 .vmx 配置
关闭虚拟机(不是挂起),然后用记事本打开虚拟机的.vmx文件。在文件末尾追加以下配置:
monitor_control.restrict_backdoor = "TRUE" monitor_control.disable_directexec = "TRUE" monitor_control.disable_chksimd = "TRUE" monitor_control.disable_ntreloc = "TRUE" monitor_control.disable_selfmod = "TRUE" monitor_control.disable_reloc = "TRUE" monitor_control.disable_btinout = "TRUE" monitor_control.disable_btmemspace = "TRUE" monitor_control.disable_btpriv = "TRUE" monitor_control.disable_btseg = "TRUE" smbios.reflectHost = "TRUE" smbios.noVMReflect = "TRUE" hypervisor.cpuid.v0 = "FALSE" board-id.reflectHost = "TRUE" hw.model.reflectHost = "TRUE" serialNumber.reflectHost = "TRUE" ether0.addressType = "generated"这些参数的含义:
smbios.reflectHost = "TRUE":让虚拟机的 SMBIOS 信息反射宿主机 BIOS 信息。smbios.noVMReflect = "TRUE":禁止在 SMBIOS 中写入 VMware 特定字段。hypervisor.cpuid.v0 = "FALSE":客户机 CPUID 中不暴露 Hypervisor 位。monitor_control.restrict_backdoor = "TRUE":限制 VMware 后门 I/O 端口,这是对 VMware 后门检测的第一道防护。
修改之后,保存并启动虚拟机。如果虚拟机无法启动或蓝屏,说明你的 VM 版本或 CPU 型号不支持部分参数,可以逐条注释掉来排查。
4.3 步骤二:修改客户机注册表
进入客户机系统,打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System在右侧找到SystemBiosVersion,双击修改,把里面的VMWARE字样改成自定义内容,比如DELL - 20190725。
同时检查:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS这里通常有BaseBoardManufacturer、BaseBoardProduct、SystemManufacturer、SystemProductName。默认情况下 VMware 会在启动时写入自己的名称。建议统一改成一组完整的品牌机信息。但需要注意:注册表项在每次启动时会被 Windows 根据 ACPI/SMBIOS 动态刷新,如果.vmx配置没有生效,这里改了也会恢复原状。
4.4 步骤三:处理设备管理器中的 VMware 设备
打开设备管理器,查看是否有以下设备:
- VMware SVGA 3D
- VMware Virtual disk SCSI Disk Device
- VMware Pointing Device
- VMware VMCI Host Device
设备驱动相关的字符串不完全由注册表控制。对于VMware SVGA 3D这类显卡,如果你想完全隐藏,在 VMware 里无法真正改变它的 PCI 设备 ID,因为它是 VMware 虚拟显卡硬件。一个折中方案是:
- 在虚拟机设置中把显卡改为“标准 VGA”
- 卸载 VMware SVGA 驱动,使用 Windows 自带的基本显示适配器
对于磁盘控制器和网卡型号字符串,可以通过更换虚拟设备子类型来改变:
| 默认类型 | 替换类型 | 设备名称变化 |
|---|---|---|
| NVMe (VMware Virtual NVMe) | SATA (LSI Logic / Intel SATA) | 显示为 Intel SATA 控制器 |
| VMXNET3 | E1000e | 显示为 Intel PRO/1000 网卡 |
| VMware Virtual disk | SCSI 或 SATA | 显示为 ATA 或 SCSI 通用设备 |
这里需要说明:更换设备类型的前提是客户机系统安装了对应驱动。如果驱动缺失,启动会蓝屏,一定要提前准备好替换方案和快照。
4.5 步骤四:清理残留痕迹
VMware Tools 会写入很多服务、驱动、注册表项。如果软件检测 VMware Tools 的驱动服务名(比如vmhgfs、vmxnet、vmci),即使设备名称改了也会暴露。
处理方式有两种:
- 保留 VMware Tools,但禁用相关服务,设置启动类型为“手动”。
- 不使用 VMware Tools,改用 virtio 或半虚拟化驱动替代,网络、剪贴板等额外功能放弃。
从工程实践看,大部分“去虚拟化之后仍然被检测”的案例,都卡在 VMware Tools 残留驱动这一层。建议做去虚拟化验证时,先不安装 Tools,等确认检测通过后再考虑要不要装回来。
4.6 步骤五:处理 CPUID 层
如果你改完 SMBIOS 和设备后,CPU-Z 仍然显示 Hypervisor 厂商为 VMware,说明 CPUID 层还没隐藏。
在.vmx中已经加入了hypervisor.cpuid.v0 = "FALSE",但还需要确认虚拟机的 CPU 配置是“自动”还是“手动指定”。打开虚拟机设置 - 处理器,查看是否有“虚拟化 Intel VT-x/AMD-V”选项。
更彻底的方式是给虚拟机加入 CPU 掩码参数:
cpuid.1.ecx = "----:----:----:----:----:----:----:---0" cpuid.80000001.ecx = "----:----:----:----:----:----:----:----"这段配置把 CPUID 中表示“当前运行在管理程序下”的特征位清零。实际效果取决于 CPU 型号和 VMware 版本,不一定所有机器都能成功。如果你用的是 Intel 12 代以上 CPU,主频和核心调度变化较大,需要更多耐心测试。
5. 完整示例与代码实现
5.1 示例一:编写去虚拟化检查脚本(批处理)
为了避免手动查找多个注册表项,可以在客户机里执行下面的批处理脚本,快速检查当前系统残留的 VMware 特征:
@echo off echo ======================================== echo VMware Character Checker echo ======================================== echo. echo [1] SMBIOS Manufacturer wmic computersystem get manufacturer echo. echo [2] SMBIOS Product Name wmic computersystem get model echo. echo [3] BIOS Vendor wmic bios get manufacturer echo. echo [4] BIOS Version wmic bios get smbiosbiosversion echo. echo [5] SystemBiosVersion Registry reg query "HKLM\HARDWARE\DESCRIPTION\System" /v SystemBiosVersion echo. echo [6] Disk Controller wmic path win32_pnpsigneddriver where "DeviceName like '%VMware%'" get DeviceName echo. echo [7] Process with VMware tasklist | findstr /i "vmware" echo. echo [8] Service with VMware sc query | findstr /i "vmware" echo. echo ======================================== echo Check Finished. pause运行结果示例:
[1] SMBIOS Manufacturer VMware, Inc. [2] SMBIOS Product Name VMware Virtual Platform [4] BIOS Version VMW71.00V.0.B27.1907011614只要出现VMware字样,说明该特征点还没隐藏。这个脚本是关键验证工具。
5.2 示例二:注册表批量替换脚本
把注册表中常见的 VMware 标识替换为自定义字符串。把下面的内容保存为hide_vmware.reg:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System] "SystemBiosVersion"=hex:44,45,4c,4c,00,2d,20,41,30,30,00 "VideoBiosVersion"=hex:44,45,4c,4c,00,2d,20,56,31,2e,30,00 [HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS] "BaseBoardManufacturer"="Dell Inc." "BaseBoardProduct"="0Y2MRG" "SystemManufacturer"="Dell Inc." "SystemProductName"="Precision Tower 5820" "SystemFamily"="Precision" "SystemVersion"="1.0.0" "SystemSKU"="SKU-1000"注意:注册表中的 HEX 值是 ASCII 的十六进制编码,Dell - A00需要手动转成 hex 而不是直接写 ASCII。上述示例中44,45,4c,4c对应的是DELL。
导入方式:
regedit /s hide_vmware.reg导入后立即用检查脚本确认。
5.3 示例三:PowerShell 修改 SMBIOS 反射状态
如果你手头有多台 VMware 虚拟机,不想一台台手动编辑.vmx,可以用 PowerShell 批量处理:
$vmxPath = "D:\VMs\Win10Test\Win10Test.vmx" $content = Get-Content $vmxPath $entries = @{ "smbios.reflectHost" = "TRUE" "smbios.noVMReflect" = "TRUE" "hypervisor.cpuid.v0" = "FALSE" "monitor_control.restrict_backdoor" = "TRUE" "board-id.reflectHost" = "TRUE" "hw.model.reflectHost" = "TRUE" "serialNumber.reflectHost" = "TRUE" } foreach ($key in $entries.Keys) { $line = "$key = `"$($entries[$key])`"" $matched = $content | Where-Object { $_ -match "^$key\s*=" } if ($matched) { $content = $content -replace "^$key\s*=.*", $line } else { $content += $line } } Set-Content $vmxPath $content Write-Host "VMX updated."这个脚本会查找已存在的配置项并替换,如果不存在就追加到文件末尾。适合需要同时处理多个虚拟机镜像的工程场景。
6. 运行结果与效果验证
6.1 验证步骤
启动修改后的虚拟机,逐项执行:
- 运行检查脚本,查看
wmic输出中是否还有 VMware 字样。 - 下载 CPU-Z,切换到最后一项 “About”,查看是否有 “VMware” 的 Hypervisor 厂商识别。
- 运行 Securable,查看
Hypervisor一栏,正常的物理机应显示 “Not detected” 或 “Green”。 - 用 AIDA64 查看 “Computer -> DMI”,检查 System Manufacturer、Product Name 是否已被替换。
预期结果:
[1] SMBIOS Manufacturer Dell Inc. [2] SMBIOS Product Name Precision Tower 5820 [3] BIOS Vendor Dell Inc. [4] BIOS Version Dell - A00 [5] SystemBiosVersion Registry DELL - A00 [6] Disk Controller (无 VMware 相关设备)6.2 如果失败,按什么顺序排查
| 失败现象 | 可能原因 | 下一步处理 |
|---|---|---|
| 注册表改了,重启又恢复 | .vmx中smbios.reflectHost未生效 | 检查虚拟机是否完全关机,并确认配置项没有拼写错误 |
| CPU-Z 仍识别 VMware | CPUID 层未隐藏 | 确认hypervisor.cpuid.v0 = FALSE已写入,并检查是否有其他工具叠加 |
| 设备管理器仍有 VMware 设备 | 设备名称来自驱动字符串,不是注册表 | 更换虚拟设备类型,或者卸载对应驱动 |
| 客户机启动直接蓝屏 | 更换了磁盘控制器或 SATA 类型,驱动缺失 | 从快照回滚,重新在 IDE 模式下启动,装好驱动后再切换 |
7. 常见问题与排查思路
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 启动虚拟机后一直转圈,进不了桌面 | 修改 SMBIOS 后系统固件信息异常 | 关闭虚拟机,删除.vmx中自定义 SMBIOS 配置,重新启动 | 在.vmx中只保留reflectHost,不使用自定义字符串 |
| VMware 提示“客户机操作系统已禁用 CPU” | CPU 掩码参数配置错误 | 检查cpuid参数是否与当前 CPU 不兼容 | 去掉高级 CPU 掩码,保留hypervisor.cpuid.v0 |
| 安装 VMware Tools 后又被检测 | Tools 驱动残留多处特征 | 使用检查脚本扫描驱动和服务 | 禁用 Tools 的服务和驱动,或暂时卸载 Tools |
修改.vmx后 VMware 无法打开虚拟机 | 配置参数写错或版本不支持 | 查看 vmware.log 日志,定位不识别参数 | 逐条注释,缩小问题范围 |
| 安全软件依然报虚拟机 | 检测点不只系统层,包含进程名和窗口类名 | 检查任务管理器是否有 vmware 相关进程 | 无法通过系统配置完全隐藏,需要换方案 |
8. 最佳实践与工程建议
8.1 先快照,再操作
去虚拟化过程中最容易出问题的环节是修改磁盘控制器类型和 SMBIOS。在客户机系统正常状态时,先创建一个“干净系统+已装驱动”的虚拟机快照。之后无论怎么改,都可以在几分钟内回滚。
8.2 不要在生产环境直接操作
如果你这台虚拟机负责编译发布、对接 CI/CD、承载数据库,不要直接做去虚拟化。先克隆一个副本,在副本上验证完整流程,再决定是否应用到生产虚拟机。
8.3 合法使用边界
去虚拟化技术本身是中性的,但你要清楚它的使用场景。如果你是为了绕过某软件的授权限制、反作弊检测或安全策略,这可能会违反软件服务条款,甚至触犯法律。请只在以下场景使用:自己开发软件时的兼容性测试、安全研究中的恶意软件分析、驱动开发和调试、系统内核实验。文章所有配置只是为了说明原理和提供技术参考,使用者应当自行确认操作合法性。
8.4 成品镜像“打开即用”的分析
再看标题中的“附去虚拟化成品,打开即用”。这种成品镜像通常是指已经完成 SMBIOS 替换、注册表修改、系统精简、驱动替换的虚拟机镜像,导入 VMware 后可以直接启动。
它的优点是省去大量配置时间,适合验证“去虚拟化后系统是否能正常跑起来”。但缺点是:
- 安全性未知:成品镜像来自第三方,可能内置后门、木马、僵尸网络矿工程序。你不知道制作者在系统里放了什么。
- 适用性有限:成品镜像通常基于特定虚拟机版本、特定硬件配置制作。换一台宿主机、换一个 VMware 版本,可能直接蓝屏或配置失效。
- 无法定制:你在项目里需要的软件环境很可能和镜像不一致,还是要重装和调整,反而浪费时间。
我的建议是:可以把成品镜像当作“参考基准”或“临时验证工具”,但不要直接拿来做日常开发。更稳妥的做法是用它作为模板,导出一份干净的 Sysprep 镜像,再在自己的 VMware 版本上重新定制。
8.5 持续验证与版本兼容
去虚拟化不是一次配置就永久有效。VMware 升级、客户机系统更新、驱动更新都可能覆盖掉你修改的注册表和驱动配置。建议给每个虚拟机做 3 个备份点:
- 刚装完系统的干净状态。
- 刚做完去虚拟化配置的可用状态。
- 安装完业务软件的最终状态。
每次升级 VMware 或给客户机打补丁后,重新跑一遍检查脚本。
9. 总结与后续学习方向
这篇文章讲清楚了一件很多人没搞明白的事:VMware 虚拟机被识别,不是一个单独的注册表值导致的,而是 SMBIOS、CPUID、设备驱动、VMware Tools 多个特征层叠加的结果。去虚拟化操作要基于检测原理做系统性配置,而不是套用一个万能补丁。
文中的核心思路是:先通过检查脚本定位虚拟化特征点,再通过.vmx配置和客户机注册表修改去除特征,最后用 CPU-Z、AIDA64、批处理脚本交叉验证。如果你只是需要跑通一个不支持虚拟机的软件,这套流程大概率够用;如果你面对的是强检测软件,那么还需要研究更深层的 VMM 隐藏方案,并对“成品镜像”的信任问题保持警惕。
技术上值得继续深挖的方向包括:CPUID 指令的位级操作、AMT 和 Intel TXT 的检测原理、Windows 内核中NtQuerySystemInformation暴露的系统固件表,以及其它虚拟化平台(VirtualBox、Hyper-V、KVM)的隐藏差异。认识这些原理之后,你会发现“去虚拟化”不是某个工具的魔法,而是对操作系统和虚拟化技术交叉理解的结果。
建议收藏这篇文章,在动手前先跑一遍检查脚本,确认哪些特征点需要处理,再按照配置清单逐步执行。遇到问题不要慌,对照常见问题和排查表处理,相信你会比网上绝大多数教程少走很多弯路。