1- 杨CC的评价

该文章为:如何绕过虚拟机检测?
主要讲解了绕过虚拟机检测的主流方式和主流的反检查技巧。

我的计算中没有vmware虚拟机,所以不再进行截图

2- 主流的虚拟机检测原理

2.1 硬件信息:

虚拟机拥有一些物理机没有的硬件信息,例如主板型号:VMware virtual Platform,其他硬件信息如:CPUID、硬盘序列号、主板序列号、网卡序列号等。

2.2 系统痕迹:

虚拟机工具(如VMware Tools、lVirtuaBox Guest Additions)的服务、进程或注册表项。同样会被某些软件进行检测。

2.3 底层指令:

某些虚拟机软件会修改底层指令,如:VMware修改了CPUID指令,使其返回虚拟机信息。 某些软件会检测这些底层指令的返回值,从而判断是否运行在虚拟机中。

2.4 环境差异:

如:内存映射方式、中断处理机制、网络MAC地址前缀(例如VMware的前缀地址为:00:0c:29)等。

3- Vmware虚拟机 主流反检测方式

3.1 VMware 主流反检测方式

3.1.1 修改虚拟机配置文件(核心)

关闭虚拟机后,找到.vmx配置文件(如:Windows10.vmx),用vsc或者记事本打开.

添加以下参数隐藏虚拟机信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 隐藏VMware硬件特征
smc.version = "0"
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
serialNumber.reflectHost = "TRUE"
bios.bootDeviceTimeout = "5000"
bios.forceSetupOnce = "FALSE"

# 禁用虚拟机特有指令和设备
monitor_control.virtual_rdtsc = "FALSE"
monitor_control.restrict_backdoor = "TRUE"
disable_acceleration = "FALSE"
mce.enable = "TRUE"
vcpu.hotadd = "FALSE"
usb.present = "FALSE" # 如需使用USB可改为TRUE,但可能增加检测风险

# 伪装硬盘和网络控制器
scsi0.virtualDev = "lsisas1068" # 模拟LSI SAS硬盘控制器(物理机常见)
ethernet0.virtualDev = "e1000e" # 模拟Intel千兆网卡
ethernet0.addressType = "generated"
ethernet0.generateAddressMask = "00:0C:29:00:00:00" # 修改MAC前缀(避开VMware特征,这里记得改,不要直接复制粘贴)

3.1.2 伪装BIOS和硬件信息

  • 修改bios信息
    在刚才的.vmx文件中添加以下参数:
1
2
3
4
bios.dmi.board.product = "Z690 AORUS PRO"  # 替换为常见物理主板型号
bios.dmi.system.manufacturer = "Gigabyte" # 主板厂商
bios.dmi.system.product = "XPS 15 9520" # 物理机常见型号(如戴尔、联想)
# 这里的主板型号、主板厂商、物理机型号,按照自己的如何绕过虚拟机检测?喜好更改就可以了。
  • 修改硬盘信息

    在VMware菜单栏中,选择 -「虚拟机设置 - 硬盘 - 高级」,,将 “虚拟设备节点” 改为SCSI,并勾选 “独立” 模式(减少快照痕迹)。

    一般改完vmx和这个设置后,多数软件基本上就检测不出来了,如果还会检测出来,可以继续往下看。

3.1.3 禁用虚拟机工具和服务(部分检测服务和工具的软件可以用这个方法,一般情况下不需要。)

  • 卸载VMware Tools

    控制面板 → 程序卸载 → 移除 “VMware Tools”(避免残留服务如VMwareService.exe)。

  • 禁用残留进程:

    若必须保留基础驱动,在服务管理器中禁用VMware USB Arbitration Service、VMware Workstation Server等服务。

3.1.4 隐藏注册表虚拟机标识

  • 修改注册表隐藏虚拟机标识

    按Win+R输入regedit,定位到以下路径,删除或修改含 “VMware”“Virtual” 的键值:

1
2
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI # 查找虚拟网卡/硬盘控制器

3.2 VMware虚拟机反检测技术(高阶-慎用-容易崩溃-小白勿用)

3.2.1 替换系统文件(驱动)中的虚拟机特征

  • 使用Resource Hacker(其他工具也可以),修改system32\drivers\下的驱动文件,替换掉’VMware’等高级操作,将虚拟机特征进行消除。

3.2.2 修改CPU指令集与寄存器

  • 修改CPUID指令返回值

    通过工具(kvm-hide)或者其他工具或者自定义内核模块,修改CPUID指令返回值,将虚拟机特征进行消除。例如:清除ECX寄存器中的hypervisor present位。

  • 实例:
    在启动参数中添加-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,kvm=off,模拟物理 CPU 特征。

3.2.3 隐藏虚拟化扩展指令

  • 禁用虚拟机对lntel或amd的虚拟化扩展指令的模拟
  • 在.vmx文件中添加以下参数:
1
monitor_control.disable_vmx = "TRUE"  # VMware

3.2.4 模拟物理内存布局

  • 关闭虚拟机的”内存气球”技术(可以有效避免内存分配暴露虚拟化特征),在.vmx文件中添加以下参数:
1
2
mem.ballooning.enabled = "FALSE"
sched.mem.pshare.enable = "FALSE"

3.2.5 缓存时序伪装

  • 使用工具(CacheTimingFaker)调整CPU缓存的访问延迟,使其与物理机接近,避免缓存访问延迟差异暴露虚拟化特征。

其实到这里,已经就差不多了,如果还想再进一步,可能会对物理机造成影响了,所以,建议不要使用,如果非要使用,请谨慎使用。

那么我们继续往下看.

3.2.6 使用物理机的真实BIOS固件,替换虚拟机BIOS固件

  • VMware,需要提取物理机的BIOS固件(例如:wu_li_ji_BIOS.bin),替换虚拟机BIOS固件,在.vmx文件中添加以下参数:
1
bios440.filename = "wu_li_ji_BIOS.bin"
  • QEMU启动时制定固件路径
1
qemu-system-x86_64 -bios /path/to/wu_li_ji_BIOS.bin.bin # 最后需要输入你的路径

3.2.7 修改UEFI固件

  • 使用UEFITool编辑虚拟机的 UEFI 固件,删除含 “VMware”“VirtualBox” 等包含虚拟机的标识字段。

3.2.8 使用物理磁盘

将物理机的磁盘分区表(MBR/GPT)直接复制到虚拟机,或使用dd命令制作物理磁盘的镜像文件作为虚拟机硬盘,避免虚拟磁盘的特征签名(如 VMware 的.vmdk格式头信息)。

3.2.9 模拟磁盘IO延迟

通过工具(如tc或disk-delay)给虚拟机磁盘添加随机 IO 延迟,模拟物理硬盘的机械延迟(部分检测会通过 IO 速度判断是否为虚拟机)。

使用NTP服务器伪装时间

  • 禁用虚拟机的 “高精度时钟同步”,改为通过 NTP 与物理机同步,可以在VMware设置进行修改.

  • 或者在:vmx文件中添加以下参数(不建议用这种方式):

1
tools.syncTime = "FALSE"
  • 并在虚拟机内手动同步物理机时间(避免时钟频率差异被检测)。

3.2.10 模拟物理机中断反应

  • 在内核模块中,修改中断处理的时间戳和优先级,时其与物理机接近,避免中断处理时间差异暴露虚拟化特征。

3.3 其他VMware虚拟机反检测技术

  • 定制化虚拟机内核

    编译修改版 QEMU/VMware 内核:
    去除源码中所有虚拟化相关的标识字符串(如 “QEMU”“VMware”),并修改底层函数(如kvm_run)的行为特征,使其更接近物理机内核调用。
    使用轻量级虚拟化方案:
    相比 VMware/VirtualBox,KVM+QEMU更易定制,可通过libvirt配置隐藏虚拟化痕迹,或直接使用Firecracker等微虚拟化工具(适合简单系统)。

  • 反调试与检测工具对抗

    Hook 检测 API:
    在虚拟机内使用x64dbg或Frida hook 目标软件的检测函数(如获取主板信息的GetSystemInfo、枚举设备的SetupDiEnumDeviceInfo),返回伪造的物理机数据。
    内存特征擦除:
    使用工具(如MemScrubber)定期清理内存中残留的虚拟化相关字符串(如 “vmxnet3”“vboxguest”),避免被内存扫描检测到。

3.3.1 网络指纹深度伪装

  • 修改 TCP/IP 栈特征:

    调整虚拟机的 TCP 窗口大小、TTL 值、MSS(最大分段大小),使其与物理机一致(可通过iptables或netsh配置)。

  • 使用物理网卡:

    通过 PCIe 直通(如 VMware 的 “PCI Device Passthrough”)将物理机网卡直接分配给虚拟机,避免虚拟网卡的 MAC 前缀和驱动特征

3.3.2 隐藏外设和总线

  • 禁用虚拟 USB 控制器

    在虚拟机设置中移除 USB 控制器(避免 “VMware USB Controller” 被检测),如需使用外设,通过网络共享(如 SMB)而非直接挂载。

  • 隐藏 PCI 总线虚拟化痕迹

    在设备管理器中卸载所有 “VMware PCI” 设备,并用物理机的 PCI 设备列表替换虚拟机的HKLM\SYSTEM\CurrentControlSet\Enum\PCI注册表项。

4- VirtualBox虚拟机反检测技术

4.1 VirtualBox 反检测配置

4.1.1 修改vm配置(核心)

  • 关闭虚拟机后,找到.vbox文件(如:Windows10.vbox),用vsc或者记事本打开.
  • 添加以下参数隐藏虚拟机信息:
1
2
3
4
<ExtraDataItem name="VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" value="Lenovo"/>
<ExtraDataItem name="VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" value="ThinkPad X1 Carbon"/>
<ExtraDataItem name="VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct" value="20U90000US"/>
<ExtraDataItem name="VBoxInternal/TM/TSC/Enabled" value="0"/> # 禁用时间戳计数器差异

4.1.2 隐藏VirtualBox驱动

  • 在设备管理器中卸载 “VirtualBox Graphics Adapter”“VirtualBox Network Adapter”,替换为物理机常用驱动(如 Intel 显卡驱动)。

4.1.3 其他隐藏方式与vmware类似,这里就不再赘述了,有兴趣的可以自己查看上方的vmware虚拟机反检测技术.

其他隐藏方式与vmware类似,这里就不再赘述了,有兴趣的可以自己查看上方的vmware虚拟机反检测技术.


5- 结束语

  • 如果需要详细的virtualBox虚拟机反检测文章,请添加交流群进行反馈.
  • 需要技术文章,记得将ycc77.com 添加到书签栏哦~
  • 需要资源,记得将ycc77.cn 添加到书签栏哦~
  • QQ交流群:660264846
  • B站: 疯狂的杨CC
  • 抖音: 疯狂的杨CC
  • 快手: 疯狂的杨CC
  • 公众号:SGY安全
  • 91: 疯狂的杨CC
  • p站: 疯狂的杨CC