前言
这是一种让虚拟机伪装成物理机的技术,通常被称为“硬件辅助虚拟化检测规避”(Hardware-Assisted Virtualization Detection Evasion)或“VM 检测规避”、“VM 反虚拟化”。这类技术常见于云服务商的营销场景,将虚拟机作为“物理机”销售以获取更高利润。不过,我们当前的需求并不在于商业推广,而是源于公司近期出台的一项令人费解的规定:所有接入零信任体系的终端必须是物理设备,即便是笔记本电脑或台式机也可以,但坚决不允许使用虚拟机。
说到这里,实在忍不住要吐槽一句:“只要能安全接入,终端类型真的有那么重要吗?”更何况,终端的安全性真的和它是不是虚拟机有必然联系吗?然而公司明确表示,会定期审计接入日志,一旦发现使用虚拟机接入零信任系统的账号,将直接永久封禁。这个看似多此一举的要求,在实际工作中给大家带来了不少困扰——在多人协作、任务繁重的环境下,谁能保证每台物理终端都只用于接入零信任这一项任务?
为了不影响工作进度,尽快接入零信任系统完成手头任务,我们不得不寻找一种能够有效规避虚机检测的技术方案,确保虚拟机在接入时不被识别为虚拟环境。
由于该技术在法律、系统安全性等方面存在风险,因此我们的实践仅用于个人学习参考,不能用于生产环境。
1 环境介绍
物理机:ZTE R5300 G4(x86_64架构)
操作系统:CentOS 8
虚拟化软件:VMware Workstation 17.6.4
虚机操作系统:Windows 11 Pro
2 常见的虚机检测方法
软件(如某些游戏、专业软件或安全产品)判断一个系统是否运行在虚拟机中,主要依赖于识别虚拟机环境特有的一些特征。这些特征包括:
1、硬件标识:虚拟机的BIOS/固件(SMBIOS/DMI信息)、主板型号、序列号等通常包含Hypervisor供应商的特定字符串(如"VMware, Inc."、"VMware Virtual Platform")。虚拟网卡的MAC地址也具有特定的前缀(如VMware的00:0C:29)。通常使用设备管理器、msinfo32、dxdiag等工具即可查看这些特征。
2、虚拟化指令与行为:CPU在执行某些特定指令(如CPUID)时,在虚拟机中的返回结果会暴露Hypervisor的存在。一些特权指令的行为在虚拟机中也与物理机不同。
3、文件系统与驱动痕迹:虚拟机工具(如VMware Tools)的安装会在操作系统内留下特定的驱动程序、服务和注册表项,这些都是明显的虚拟机特征。
3 常见的虚机检测规避方法
"De-virtualization"的核心就是系统地隐藏或修改虚拟机的特征,使其与物理机或我们指定的硬件类型保持一致。从技术层面看,一般有如下方法:
1、修改Hypervisor配置:如编辑VMware虚机的配置文件:*.vmx,添加限制VMware暴露信息的能力;
2、重写硬件信息:在配置文件中重写SMBIOS/DMI信息,并修改MAC地址。如可将虚拟机的制造商、产品型号、序列号等修改为模仿常见物理机(如Dell、HP)的信息。同时,将网卡的MAC地址改为非虚拟化厂商的随机地址。
3、清理客户机操作系统:卸载虚拟机增强工具(如VMware Tools),并清理相关的驱动和注册表痕迹。
4、硬件直通 (Passthrough):将物理硬件(如GPU、网卡)直接分配给虚拟机使用。此外,当前环境使用的ASPEED显卡通常是主板集成的BMC管理芯片的一部分,几乎从不支持直通。
【注意】在宿主机查看显卡配置:
lspci | grep -i vga
03:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
4 虚机检测规避带来的风险
在尝试任何虚机检测规避操作前,务必了解以下风险:
1、违反许可协议:修改配置以规避检测,可能违反了Hypervisor软件(如VMware EULA)以及试图运行的软件的使用条款,可能导致法律风险或技术支持失效。
2、系统不稳定:修改底层配置、卸载关键驱动可能直接导致虚拟机无法启动、性能下降或功能异常。
3、效果不确定:反虚拟机检测技术也在不断进化,即使应用了所有方法,专业的检测软件仍可能通过更底层的分析识别出虚拟机环境。因此无论采用何种方法规避检测,在操作系统中都能找到虚拟化的蛛丝马迹,例如在虚机Windows注册表中,彻底清理掉所有VMware的痕迹难度可想而知。
4、失去便利性:卸载虚拟机工具会牺牲剪切板共享、拖放文件、时间同步等便利功能。
5 虚机检测规避实践
5.1 虚机的创建
为便于修改SCSI控制器和虚拟磁盘类型,新建虚机时应选择定制(高级),而不要选择典型(推荐),如图5.1-1,后续操作步骤以截图顺序为准。

图5.1-1、新建虚机向导

图5.1-2、硬件兼容性等级

图5.1-3、使用ISO安装介质

图5.1-4、设定虚机名称和磁盘文件路径

图5.1-5、部分加密/请妥善保存密码

图5.1-6、固件类型选择
【注意】由于BIOS默认已被禁用,固件类型在这里先选择UEFI,但不要启用安全引导。,我们只能在后续步骤中进行修改。

图5.1-7、根据实际情况进行资源分配

图5.1-8、根据实际情况进行资源分配

图5.1-9、网络连接方式选择默认的NAT即可

图5.1-10、SCSI控制器选择推荐的LSI Logic SAS
【注意】LSI Logic SAS为模拟真实的LSI SAS硬件控制器,具有较好的兼容性;而VMware Paravirtualized SCSI (PVSCSI)为VMware原生开发的虚拟化优化控制器,性能最佳,但必须安装VMware Tools(或Linux系统中的open-vm-tools)才能识别硬盘。因此选择LSI Logic SAS。

图5.1-11、虚拟磁盘类型这里选择SATA

图5.1-12、创建新的虚拟磁盘

图5.1-13、虚拟磁盘为独立文件

图5.1-14、虚拟磁盘镜像文件

图5.1-15、不要自动开机,应先配置硬件

图5.1-16、配置虚拟化引擎选项
【注意】编辑虚拟机设置,在硬件-处理器界面中勾选启用虚拟化引擎,注意不同宿主机看到的结果可能不同。

图5.1-17、根据实际情况关闭/打开3D图形加速选项

图5.1-18、删除TPM,否则无法后续切换到BIOS

图5.1-19、移除所有加密口令

图5.1-20、移除加密口令前需要进行身份验证

图5.1-21、在选项→高级→固件类型中选择BIOS固件类型
【注意】 在这一步骤中务必切换固件类型为BIOS,若选择BIOS模式为UEFI,BIOS版本将会带有VMware, Inc.字样,并且难以修改,如图图5.1-22。

图5.1-22、选择UEFI固件类型后BIOS版本为VMware, Inc.
5.2 修改vmx配置文件
【注意】
1、务必在虚拟机完全关闭的状态下编辑.vmx文件,修改保存后再启动虚拟机。
2、请确保vmx配置文件中所有KEY不要重复,否则将导致文件格式错误,可通过下述命令检查是否存在重复选项:
grep -vE '^#|^$' win11-25h2-pro-chs-x64-bios-v2.vmx | awk -F' = ' '{count[$1]++} END {for (i in count) print i, count[i]}'
5.2.1 增强虚拟机隐蔽性
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
【注意】
禁用VMware Tools通过getPtrLocation操作获取指针位置的功能,这可以限制宿主机对客户机内部状态的探测;禁用VMware Tools通过setPtrLocation操作设置指针位置的功能。这有助于阻止通过鼠标指针进行潜在的信息交互或检测;通过禁用setVersion阻止VMware Tools设置其版本信息,这可以增加外部程序通过工具版本来识别虚拟化环境的难度;通过getVersion阻止VMware Tools获取其版本信息,同样是增加识别虚拟机难度的常用反检测措施。
许多软件(包括一些游戏和恶意软件)会尝试检测自己是否运行在虚拟机中,如果检测到,可能会拒绝运行或采取限制措施。通过将上述参数(如 getPtrLocation,setVersion等)设置为"TRUE",可以减少虚拟机泄露给外部的“特征”,使其看起来更像一台真实的物理机,从而规避检测。
5.2.2 关闭拖放和剪贴板共享
isolation.tools.dnd.disable = "TRUE"
isolation.tools.copy.disable = "TRUE"
isolation.tools.paste.disable = "TRUE"
以上三个选项是 VMware 虚拟化环境中用于控制拖放功能、剪贴板共享功能的核心安全设置。它们决定了虚拟机(Guest OS)与宿主机(Host OS)之间,以及不同虚拟机之间能否通过复制(Ctrl+C)和粘贴(Ctrl+V)来传输文本等信息。
VMware 自 vSphere 4.1 版本起,默认禁止剪贴板共享,所有这些设置生效的前提是必须在虚拟机内部成功安装并运行最新版本的 VMware Tools或 open-vm-tools,剪贴板重定向功能是由 Tools 服务实现的。由于我们在进行虚机检测规避,不会部署VMware Tools,而通过远程桌面等工具实现剪贴板共享,因此上述三个选项设置为禁用。
5.2.3 其他安全性和隐蔽性增强选项
isolation.tools.diskWiper.disable = "TRUE"
isolation.tools.diskShrink.disable = "TRUE"
isolation.tools.hgfs.disable = "TRUE"
isolation.tools.trashFolderState.disable = "TRUE"
isolation.tools.ghi.launchmenu.change = "TRUE"
isolation.tools.ghi.autologon.disable = "TRUE"
【注意】
|
配置参数 |
用途与功能说明 |
安全考量与常见场景 |
|
isolation.tools.diskWiper.disable |
控制虚拟机内部是否可以使用磁盘清理功能。此功能用于擦除磁盘未使用空间以安全释放存储。 |
防止通过虚拟机内的工具对磁盘进行底层擦除操作,减少潜在的安全风险。 |
|
isolation.tools.diskShrink.disable |
控制虚拟机内部是否可以使用磁盘收缩功能。该功能允许虚拟机将未使用的磁盘空间返还给宿主机。 |
防止虚拟机内部操作尝试收缩虚拟磁盘,避免可能导致的性能开销或异常。 |
|
isolation.tools.hgfs.disable |
控制HGFS(主机-客户机文件系统)的启用状态,这是共享文件夹功能的底层技术支持。 |
切断虚拟机通过共享文件夹直接访问宿主机文件的通道,是重要的安全加固措施,也常用于规避虚拟机检测。 |
|
isolation.tools.trashFolderState.disable |
推测与虚拟机内部回收站(Trash)或临时文件的状态信息获取有关。 |
减少虚拟机向宿主机泄露其内部文件系统状态信息的可能性,增强隐私性。 |
|
isolation.tools.ghi.launchmenu.change |
控制是否允许通过VMware Guest Host Interaction (GHI)协议修改启动菜单。 |
防止虚拟机中的程序随意修改启动菜单,提升客户机操作系统的稳定性与安全性。 |
|
isolation.tools.ghi.autologon.disable |
控制是否允许通过 GHI 协议实现自动登录。 |
阻止通过虚拟机工具实现自动登录,避免凭据泄露风险,是关键的安全加固选项。 |
5.2.4 monitor_control.* 已被废弃的选项
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"
monitor_control.disable_directexec = "TRUE"
monitor_control.enable_tsc_offset = "TRUE"
monitor_control.vt32 = "FALSE"
monitor_control.enable_extended_core = "FALSE"
monitor_control.enable_paravirt = "FALSE"
monitor_control.enable_vmeopt = "FALSE"
monitor_control.*选项,其核心设计初衷是通过限制或改变虚拟机监控器(VMM)的某些行为,来增加软件检测虚拟机环境的难度。上述选项在VMware Workstation 17.6.4版本上已不可用,若配置这些选项会触发一些错误日志,但不影响虚机运行。日志如下:
vmx [msg.monitorcontrol.unrecognized.config.name] The configuration file "/data/labs/vms/win11-25h2-pro-chs-x64-bios-tmpl/win11-25h2-pro-chs-x64-bios-tmpl.vmx" contains an unrecognized monitor control: "monitor_control.disable_directexec"
5.2.5 限制后门通信
monitor_control.restrict_backdoor = "TRUE"
【注意】这是一项关键配置!通过限制或禁用虚拟机监控器(VMM)与客户机操作系统之间的某些后门通信通道,使得虚拟机更不容易被检测出来。建议设置!
5.2.6 关闭伪性能计数器
monitor_control.pseudo_perfctr = "FALSE"
【注意】该选项控制是否启用伪性能计数器。设置为"FALSE"时,Guest操作系统(如Linux)可以直接访问物理CPU的真实性能监控单元(PMU)硬件计数器,从而获得更精确的性能分析数据(如CPU周期、指令退役数等)。该设置体现了性能开销与监控精度的权衡,启用伪计数器(设为 "TRUE")会引入一些模拟开销,但可能在某些旧硬件或需要高兼容性的场景下更稳定。除非有明确兼容性需求,否则建议保持为 "FALSE"以获取更真实的性能数据。
5.2.7 关闭VMkernel采样分析器
monitor_control.log_vmsample = "FALSE"
【注意】 该选项控制VMware VMkernel采样分析器是否对当前虚拟机进行采样。设置为 "FALSE"时,VMware ESXi主机的性能采样分析器会排除当前虚拟机,避免其运行因采样而产生轻微开销,有助于提升性能敏感型工作负载的稳定性和一致性。
5.2.8 危险选项RDTSC
# 禁用RDTSC虚拟化
monitor_control.virtual_rdtsc = "false"
【注意】关闭RDTSC(Read Time Stamp Counter)时间戳计数器虚拟化后将导致Windows 11引导失败,如图5.2-1卡在转圈画面。

图5.2-1、关闭RDTSC导致虚机无法引导
【注意】RDTSC是x86 CPU的高精度计时指令,Windows 内核和许多应用程序(如多媒体、游戏、加密等)依赖它进行时间计算和同步。虚拟化环境中,默认会虚拟化 RDTSC 指令(monitor_control.virtual_rdtsc="true"),使虚拟机获得稳定的时间源。当禁用RDTSC后,虚拟机直接读取宿主机 CPU 的物理 TSC,但可能因以下原因失败:
1)宿主机TSC不稳定性:多核 CPU 的 TSC 可能不同步,或宿主机 CPU 频率动态调整(如节能模式)导致 TSC 跳跃。
2)兼容性问题:某些 Windows 版本(如 Win10/Win11)对非虚拟化 TSC 的兼容性较差,尤其在启动阶段需要精确计时。Windows 启动时依赖 TSC 初始化硬件抽象层(HAL)、调度器和驱动程序。若 TSC 不可靠,系统会卡在初始化阶段(如转圈画面)。
这里建议删除该选项以保持默认值。
5.2.9 主机硬件信息透传
# 硬件信息反射选项
bios.reflectHost = "TRUE"
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"
uuid.action = "keep"
smbios.use12ASCIIChars = "TRUE"
|
配置选项 |
作用 |
|
bios.reflectHost = "TRUE" |
虚拟机的 BIOS 信息(如版本、日期)与主机保持一致。 |
|
board-id.reflectHost = "TRUE" |
虚拟机的主板标识符与主机保持一致。 |
|
hw.model.reflectHost = "TRUE" |
虚拟机的硬件型号信息与主机保持一致。 |
|
smbios.reflectHost = "TRUE" |
虚拟机的 SMBIOS(系统管理 BIOS)信息与主机保持一致。 |
|
uuid.action = "keep" |
指示虚拟机在启动时保留其唯一的 UUID,不因移动或复制而生成新的 UUID。 |
|
smbios.use12ASCIIChars = "TRUE" |
对 SMBIOS 序列号使用 12 个 ASCII 字符的限制。 |
【注意】以上选项配置的优势在于:通过将虚拟机的BIOS、主板、型号等硬件信息设置得与一台常见的真实物理电脑完全相同,可以使虚拟机在系统中“隐藏”起来,让软件更难检测出它运行在虚拟化环境中。当通过复制 .vmx和 .vmdk文件来克隆虚拟机时,每个虚拟机需要一个唯一的标识符(UUID)。如果两个虚拟机具有相同的 UUID(尤其是相同的 MAC地址),可能会导致网络冲突等问题。设置 uuid.action = "keep"可以明确告知 VMware 在克隆或移动虚拟机后应如何处置 UUID,从而避免此类问题。
5.2.10 键鼠选项
# 禁用 VMware 特定的指针设备
mouse.vusb.enable = "FALSE"
mouse.vusb.useBasicMouse = "TRUE"
# 使用标准 PS/2 鼠标
mouse.virtualDev = "ps2"
# 修改USB控制器信息
usb.generic.allowHID = "FALSE"
# 强制使用标准输入设备
keyboard.virtualDev = "ps2"
keyboard.allowSetValue = "FALSE"
# 禁用 VMware 特定的输入设备功能
isolation.device.edit.disable = "TRUE"
isolation.device.connectable.disable = "TRUE"
5.2.11 禁用虚拟机通信接口设备
若不禁用此选项,在Windows虚拟机的设备管理器中将看到名为VMware VMCI Bus Device的设备。
# 完全禁用 VMCI 功能
vmci0.present = "FALSE"
vmci0.enable = "FALSE"
# 禁用 VMCI 相关设备
vmci0.id = "-1"
vmci0.device = "FALSE"
# 防止 VMCI 自动重新启用
vmci0.autodetect = "FALSE"
vmci0.allowLegacy = "FALSE"
【注意】VMCI代表虚拟机通信接口(Virtual Machine Communication Interface),它是一种在虚拟化环境中实现高效数据交换的机制。与传统网络通信不同,VMCI允许虚拟机与宿主机或其他虚拟机之间直接进行内存访问,避免了传统网络协议栈的开销,从而显著降低了通信延迟并提高了数据传输效率。
VMCI的高性能特性使其在多种场景中非常有用:
虚拟桌面基础设施(VDI):提升虚拟桌面的响应速度和用户体验。
服务器虚拟化与云计算平台:在需要频繁进行虚拟机间数据交换的云环境中,VMCI能有效提升整体性能。
高性能计算(HPC):适用于运行在虚拟化环境中的并行计算应用,需要低延迟、高带宽的通信。
分布式应用:便于在同一宿主机上的多个虚拟机之间构建高效的分布式系统。
5.2.12 无效的虚拟磁盘选项
若使用虚拟磁盘类型为SATA,虚机设备管理器中显示为:VMware Virtual SATA Hard Drive,若磁盘类型为NVMe磁盘,则显示为:VMware Virtual NVMe Disk。调整下述SATA控制器的选项,没有任何效果,应修改vmware-vmx二进制文件中的常量字符串,进行文字替换,请参考5.3节。
# 以下选项均无效
scsi0.virtualDev = "lsisas1068"
scsi0.present = "TRUE"
# 使用 SATA 控制器
sata0.present = "TRUE"
sata0.virtualDev = "ahci"
# 禁用 NVMe 控制器
nvme0.present = "FALSE"
nvme0.virtualDev = "FALSE"
# 设置磁盘总线类型
# sata0:0.present = "TRUE"
# sata0:0.fileName = "win11-25h2-pro-chs-x64-tmpl-cl1.vmdk"
sata0:0.deviceType = "disk"
# 强制伪装 SATA 控制器信息
sata0:0.product = "Samsung SSD 860 EVO"
sata0:0.vendor = "Samsung"
sata0:0.serialNumber = "S3Z8NB0K837293"
# 禁用 VMware 磁盘标识
disk.enableUUID = "FALSE"
disk.EnableSSD = "TRUE"
# 修改光驱产品名称
sata0:1.productName = "DELL DVD+/-RW Drive"
5.2.13 vmx新增配置项清单
根据5.2.1-5.2.12所述的配置项进行汇总整理如下:
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
isolation.tools.dnd.disable = "TRUE"
isolation.tools.copy.disable = "TRUE"
isolation.tools.paste.disable = "TRUE"
isolation.tools.diskWiper.disable = "TRUE"
isolation.tools.diskShrink.disable = "TRUE"
isolation.tools.hgfs.disable = "TRUE"
isolation.tools.trashFolderState.disable = "TRUE"
isolation.tools.ghi.launchmenu.change = "TRUE"
isolation.tools.ghi.autologon.disable = "TRUE"
monitor_control.restrict_backdoor = "TRUE"
monitor_control.pseudo_perfctr = "FALSE"
monitor_control.log_vmsample = "FALSE"
bios.reflectHost = "TRUE"
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"
uuid.action = "keep"
smbios.use12ASCIIChars = "TRUE"
mouse.vusb.enable = "FALSE"
mouse.vusb.useBasicMouse = "TRUE"
mouse.virtualDev = "ps2"
usb.generic.allowHID = "FALSE"
keyboard.virtualDev = "ps2"
keyboard.allowSetValue = "FALSE"
isolation.device.edit.disable = "TRUE"
isolation.device.connectable.disable = "TRUE"
vmci0.present = "FALSE"
vmci0.enable = "FALSE"
vmci0.id = "-1"
vmci0.device = "FALSE"
vmci0.autodetect = "FALSE"
vmci0.allowLegacy = "FALSE"
# 自定义BIOS在5.4节中具体阐述
bios440.fileName = "BIOS.440.ROM"
# 补充两个选项
disk.enableUUID = "FALSE"
disk.EnableSSD = "TRUE"
【注意】 disk.enableUUID和 disk.EnableSSD这两个参数分别用于控制磁盘的唯一标识符和固态硬盘仿真特性。将这两个参数结合使用,目的是让虚拟机的磁盘特征更接近一台普通的、使用SSD的物理计算机,同时抹去一项VMware虚拟机的常见标识(固定UUID)。
5.3 修改磁盘驱动器名称
磁盘驱动器名称是写死在/usr/lib/vmware/bin/vmware-vmx中的,在替换前有必要介绍一下该文件。
vmware-vmx是VMware虚拟化软件在Linux系统中的核心执行文件,可理解为虚拟机监视器或虚拟化引擎的心脏。这个二进制程序承担着创建和管理虚拟机运行时环境的关键职责,具体包括:
1、虚拟机实例管理:每当您启动一个虚拟机时,vmware-vmx进程便会启动。它负责解析虚拟机的配置文件(通常是以.vmx为后缀的文件),并根据配置为虚拟机分配计算资源(如CPU和内存),并管理其整个生命周期。
2、硬件资源虚拟化:该程序通过VMware的虚拟化层,对物理硬件资源进行抽象和封装。它模拟包括虚拟CPU、内存、硬盘控制器、网络适配器在内的各种硬件设备,使得客户操作系统能够像在真实物理机上一样运行。
3、设备仿真与I/O操作:它处理虚拟机所有的输入输出请求,例如磁盘读写、网络通信等。
4、加载虚拟BIOS:在虚拟机启动时,vmware-vmx会负责加载虚拟BIOS文件来初始化虚拟硬件,完成启动流程。
在Linux上可按照下述流程进行替换,比Windows要便捷。
# 备份二进制文件vmware-vmx
cp /usr/lib/vmware/bin/vmware-vmx /usr/lib/vmware/bin/vmware-vmx.bk.ori
# 在二进制文件vmware-vmx中检索有关SATA虚拟磁盘驱动器的字符串
grep "VMware Virtual SATA Hard Drive" /usr/lib/vmware/bin/vmware-vmx
匹配到二进制文件 /usr/lib/vmware/bin/vmware-vmx
# 执行二进制替换
sed -i -b 's#VMware Virtual SATA Hard Drive#Samsung 860 QVO SSD Hard Drive#g' /usr/lib/vmware/bin/vmware-vmx
# 验证是否替换成功
grep 'Samsung 860 QVO SSD Hard Drive' /usr/lib/vmware/bin/vmware-vmx
匹配到二进制文件 /usr/lib/vmware/bin/vmware-vmx
【注意】确保替换后的字符串长度不能超过原字符串,多余的部分需要用空格(十六进制为20)填充,否则会破坏文件结构!
5.4 自定义BIOS
从https://theretroweb.com/drivers/208下载BIOS Editor工具,并安装。以管理员模式打开Phoenix BIOS Editor,编辑宿主机上的/usr/lib/vmware/roms/BIOS.440.ROM,按Ctrl+D打开DMI字符串窗口,将VMware主板和系统制造商信息调换为DELL。

图5.4-1、在Phoenix BIOS Editor中修改BIOS文件
修改完成后,按Ctrl+U开始Build新的BIOS ROM,并保存到宿主机上与当前虚机vmx配置文件相同目录下。
在vmx文件中添加自定义ROM:
bios440.fileName = "BIOS.440.ROM"
【注意】DMI(Desktop Management Interface,桌面管理接口)就像是主机硬件的“标准化身份证”,存储了关于主机的制造商、产品型号、序列号等一系列重要的硬件身份信息并提供一个标准化的方式来收集和访问系统信息。它的核心组成部分是一个被称为 MIFD(Management Information Format Database)的数据库,这个数据库通常存储在 BIOS 中一个约 4KB 大小的区域里。
5.5 Win11安装过程
在做好了5.1-5.4的充分准备后,我们可以开始Windows 11虚机的安装。建议在安装程序的最初阶段就关闭TPM和Secure Boot检测,可在出现下述界面时按下Shift+F10唤出命令行。

图5.5-1、进入Window 11安装向导
在命令行中执行二条命令绕过TPM 2.0芯片检查(可信平台模块)和UEFI的安全启动检查:
REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassTPMCheck /t REG_DWORD /d 1
REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassSecureBootCheck /t REG_DWORD /d 1
【注意】此操作是一种变通方法,不符合微软为Windows 11设定的官方硬件合规性要求。微软设置这些要求是为了保障系统的安全性和体验。通过此方法安装的系统,其运行环境未达到微软为Windows 11设计的安全基准(如缺少TPM 2.0 的硬件级安全支持)。然而,在像VMware Workstation这样的虚拟化环境中,由于宿主机的硬件资源由虚拟机监控程序(Hypervisor)统一管理,并且通常与物理硬件隔离,使用此方法安装和运行 Windows 11通常被认为是可接受且常见的做法,但仅用于测试、开发或学习目的。
此外,也可以绕过最低4GB内存、最低64GB存储和较新的兼容CPU校验:
REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassRAMCheck /t REG_DWORD /d 1
REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassStorageCheck /t REG_DWORD /d 1
REG ADD HKLM\SYSTEM\Setup\LabConfig /v BypassCPUCheck /t REG_DWORD /d 1
在联网配置阶段,可以使用oobe\BypassNRO跳过网络检查。
其他步骤不再赘述。
5.6 验证
在成功安装Windows 11后,执行dxdiag验证正常,显示部分只有Microsoft Remote Display Adapter,暂时未发现问题。

图5.6-1、DirectX诊断工具中硬件信息

图5.6-2、DirectX诊断工具中硬件信息
使用msinfo32验证,发现显示适配器类型为:V M ware, Inc. VBE support 2.0, (标准显示卡类型) 兼容,存在疏漏,如图5.6-3所示。


图5.6-3、显示适配器类型泄露出硬件厂商
经过验证,修改vmx配置文件中svga.*没有任何效果,而应修改注册表中类似如图5.6-3所示的键值,该键值会出现多次。

图5.6-4、人工修改注册表解决
设备管理器验证:DVD驱动器为NECVMWar VMware SATA CD01,需要更新。


图5.6-5、设备管理其中光驱设备泄露硬件信息
补充修复:但可能需要重装系统才能生效。
sed -i -b 's#VMware, Inc.#SynTek, Inc.#g' /usr/lib/vmware/bin/vmware-vmx
sed -i -b 's#NECVMWar#LiteBurn#g' /usr/lib/vmware/bin/vmware-vmx
6 总结
综上所述,虚机检测规避大致采用:图形界面配置虚机、修改vmx配置文件、修补vmware-vmx二进制程序、修改BIOS ROM文件、修改注册表等方式,流程较繁琐。需要指出的是,修改VMX配置文件相对安全,而修补二进制程序、修改BIOS ROM和系统注册表等属于高风险操作,可能导致虚拟机无法启动或系统崩溃,仅建议高级用户在测试环境中尝试。
1万+

被折叠的 条评论
为什么被折叠?



