您现在的位置是:烟消火灭网 > 休闲

vm虚拟机防检测代码

烟消火灭网2026-10-17 07:48:03【休闲】6人已围观

简介```html vm虚拟机防检测代码 VMware默认配置下,虚拟机里的CPUID指令会直接返回"VMwareVMware"这个字符串。任何懂行的人写三行汇编就能把你认出来。改掉它,是防检

```html vm虚拟机防检测代码

VMware默认配置下,虚拟虚拟机里的机防检测CPUID指令会直接返回"VMwareVMware"这个字符串。任何懂行的代码人写三行汇编就能把你认出来。改掉它,虚拟是机防检测防检测的第一步。

我最早接触这块是代码在一个游戏反作弊项目上。对方用cpuid指令的虚拟hypervisor位判断是否在虚拟机里跑,我们当时用VMware Workstation 15,机防检测默认就是代码裸奔。后来翻VMware的虚拟文档发现,.vmx文件里藏着一堆能改的机防检测配置项。

CPUID伪装

打开虚拟机的代码.vmx文件,加这几行:

cpuid.1.ecx = "----:----:----:----:----:----:----:----" cpuid.40000000.ebx = "0000:0000:0000:0000" cpuid.40000000.ecx = "0000:0000:0000:0000" cpuid.40000000.edx = "0000:0000:0000:0000" 

40000000这个叶子是虚拟hypervisor的厂商ID,VMware默认填的机防检测是"VMwareVMware"。全改成0之后,代码CPUID层面就查不到hypervisor的痕迹了。但光改这个不够——有些检测会看cpuid.1.ecx的第31位,那是hypervisor present标志。VMware默认会置1。想彻底藏住,得用工具在运行时改,.vmx里直接写有时候不生效。

我试过一个更粗暴的办法:用UEFI shell里的wrmsr命令在启动阶段清掉相关MSR。但兼容性太差,只适合特定场景。

MAC地址和硬件指纹

VMware的网卡MAC地址前缀是00:0C:29、00:1C:14、00:50:56这几段。检测方扫一眼就知道是虚拟机。改法很简单,.vmx里写:

ethernet0.address = "00:1A:2B:3C:4D:5E" ethernet0.addressType = "static" 

但注意,改成静态之后,VMware Tools可能会在每次启动时覆盖回去。你得把Tools的网卡同步功能关掉,或者干脆不装Tools。

硬盘序列号也是重灾区。VMware默认的虚拟硬盘型号是"VMware Virtual S",这个字符串直接暴露身份。我通常在.vmx里加:

scsi0:0.productID = "ST1000DM003" scsi0:0.vendor = "Seagate" scsi0:0.revision = "CC43" 

这样在系统里用wmic diskdrive get model查出来就是一块希捷硬盘。不过SMART信息还是假的,高级检测能看出来。

注册表和驱动层面

Windows注册表里有一堆VMware的痕迹。HKLM\SYSTEM\CurrentControlSet\Services\下面能看到vmci、vmhgfs、vmmemctl这些服务。删掉服务项还不够,驱动文件还在System32\drivers\里躺着。

我一般用sc delete把服务删干净,然后手动删驱动文件。有个坑:vmmouse.sys删了之后鼠标会飘,得换成标准PS/2驱动。具体做法是在设备管理器里把"VMware Pointing Device"卸载,勾选删除驱动,然后扫描硬件改动,让它装成普通鼠标。

还有HKLM\HARDWARE\DESCRIPTION\System\BIOS下面的SystemManufacturer和SystemProductName,默认是"VMware, Inc."和"VMware Virtual Platform"。直接改成"American Megatrends Inc."和"System Product Name"就行。

时间检测和反调试

有些反作弊会测rdtsc指令的耗时。虚拟机里因为要陷入hypervisor,耗时会比物理机高一个数量级。VMware有个配置项能缓解:

monitor_control.virtual_rdtsc = "FALSE" 

关掉RDTSC虚拟化之后,时间戳计数器的读取会直接用物理CPU的,延迟降下来。但副作用是虚拟机迁移的时候时间会跳变,单机用无所谓。

另外rdtscp指令在部分VMware版本里会触发异常。如果你跑的程序用了这个指令,得在.vmx里加:

cpuid.80000001.ecx = "----:----:----:----:----:----:----:--1-" 

把RDTSCP的支持位打开。

实际效果

我拿Pafish这个开源检测工具测过。默认VMware跑Pafish,满屏红字。按上面改完,只剩两三项过不了,主要是时序检测和内存特征。对付一般游戏反作弊够用了,但遇到EAC、BattlEye这种级别的,还是得配合硬件层方案。

最后说一句:这些手段本质上是提高检测成本,不是绝对隐身。反作弊厂商也在更新特征库,今天能过的配置明天可能就进黑名单了。

```

很赞哦!(9447)