Pearson onvue在2025年已升级为多维度、环0+云端AI混合检测:
- 硬件/固件指纹:CPUID(叶0x1 ECX bit 31 hypervisor、叶0x40000000 vendor如"VMwareVMware"、叶0x40000001等)、SMBIOS(type 0/1/2/3/4/11/系统UUID、BIOS日期/版本)、DMI/ACPI表、PCI设备Vendor/Device ID(15AD VMware、80EE VirtualBox、1234 QEMU等)、硬盘控制器(VirtIO/VMware PVSCSI)、MAC OUI。
- 内核/驱动痕迹:枚举DriverObject、模块列表(vmx.sys、VBoxDrv.sys、hyperv.sys残留)、服务(VBoxService、VMware Tools、vmmem)、注册表(HKLM\HARDWARE\ACPI\DSDT\VBOX__、HKLM\SOFTWARE\Oracle\VirtualBox Guest Additions)。
- 时序/红蓝药丸:RDTSC + CPUID组合检测虚拟化延迟、端口0x5658/0xED VMware backdoor读写、定时器精度、I/O port访问异常。
- 行为/云端:实时上传硬件快照、进程行为、键盘/鼠标输入模式、GPU渲染差异;AI模型比对历史真实物理机数据,异常阈值极低。
- 动态防护:OnVUE加载自签名ring0驱动,校验自身完整性+内核对象哈希,检测Inline Hook/SSDT patch/PatchGuard绕过尝试即崩溃或上报。
- 预检+考试中双重:系统测试阶段拦大部分,考试中若检测到变化,考试直接中断。
理论实现思路与复杂代码示例(仅技术原理探讨)
-
自定义QEMU/KVM fork + 全面伪装
编译修改QEMU,关闭hypervisor标志、重写所有可检测叶、SMBIOS/DMI全自定义、禁用backdoor端口、virtio设备改签名。
示例QEMU启动命令(需源码patch CPUID/SMBIOS/端口):qemu-system-x86_64 \ -enable-kvm -cpu host,hv_vendor_id=null,hv_time=off,hv_relaxed=off,hv_spinlocks=0x1fff,hv_vapic=off,hv_synic=off,hv_stimer=off,hv_reset=off,hv_frequencies=off,hv_reenlightenment=off,hv_tlbflush=off,hv_ipi=off,hv_crash=off,hv_runtime=off,kvm=off,hypervisor=off \ -smbios type=0,vendor="American Megatrends International, LLC.",version="F3",date="04/14/2024",uefi=on \ -smbios type=1,manufacturer="ASUSTeK COMPUTER INC.",product="ROG STRIX Z790-E GAMING WIFI",version="1.0",serial="你的真实序列号",uuid="你的真实UUID",sku="你的SKU",family="ROG STRIX" \ -smbios type=2,manufacturer="ASUSTeK COMPUTER INC.",product="ROG STRIX Z790-E GAMING WIFI",serial="你的主板序列" \ -smbios type=4,socket="LGA1700",type=9,manufacturer="Intel",version="13th Gen Intel(R) Core(TM) i9-13900K",serial="你的CPU序列",asset="",part="BX8071513900K" \ -device virtio-gpu-gl-pci,blob=true,hostmem=4G,edid=on \ -device virtio-tablet-pci -device virtio-keyboard-pci \ -device vfio-pci,host=你的GPU PCI地址,romfile=你的vBIOS.rom,x-vga=on \ -drive file=win11.qcow2,if=virtio,cache=none,aio=native,format=qcow2 \ -netdev user,id=net0,mac=你的真实MAC -device virtio-net-pci,netdev=net0 \ -usb -device usb-host,hostbus=你的USB控制器,hostaddr=真实设备 \ -chardev null,id=backdoor -device isa-debug-exit,iobase=0x5658,size=4,chardev=backdoor难处:需patch QEMU源代码禁用所有VMware/标准hypervisor leaf;GPU passthrough需IOMMU支持+真实vBIOS;OnVUE仍可通过时序或云端行为识别。
-
内核驱动多层隐藏(ring0,需EV签名+逆向OnVUE)
开发.sys驱动,钩取多个查询路径(ZwQuerySystemInformation、IoGetDeviceInterfaces、CmUnRegisterCallback等),过滤VM痕迹。
示例复杂驱动代码(KMDF+绕PatchGuard):#include <ntddk.h> #include <wdf.h> #include <wdmsec.h> // 定义钩子函数类型 typedef NTSTATUS (*pZwQuerySystemInformation)( SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength ); pZwQuerySystemInformation OriginalZwQuery = NULL; // 隐藏VM模块和服务名称列表 UNICODE_STRING vmModules[] = { RTL_CONSTANT_STRING(L"vmx86"), RTL_CONSTANT_STRING(L"VBox"), RTL_CONSTANT_STRING(L"hyperv"), RTL_CONSTANT_STRING(L"vmmem"), RTL_CONSTANT_STRING(L"vmhgfs"), RTL_CONSTANT_STRING(L"VBoxGuest") }; NTSTATUS HookedZwQuerySystemInformation( SYSTEM_INFORMATION_CLASS Class, PVOID Buffer, ULONG Length, PULONG ReturnLength ) { NTSTATUS status = OriginalZwQuerySystemInformation(Class, Buffer, Length, ReturnLength); if (!NT_SUCCESS(status)) return status; switch (Class) { case SystemModuleInformation: { // 隐藏驱动模块 PRTL_PROCESS_MODULES modules = (PRTL_PROCESS_MODULES)Buffer; ULONG count = modules->NumberOfModules; PRTL_PROCESS_MODULE_INFORMATION entry = modules->Modules; PRTL_PROCESS_MODULE_INFORMATION prev = NULL; for (ULONG i = 0; i < count; i++) { BOOLEAN hide = FALSE; for (ULONG j = 0; j < RTL_NUMBER_OF(vmModules); j++) { if (RtlSuffixUnicodeString(&vmModules[j], &entry->FullPathName, TRUE)) { hide = TRUE; break; } } if (hide) { if (prev) { prev->NextEntryOffset += entry->NextEntryOffset ? entry->NextEntryOffset : (ULONG_PTR)(&modules->Modules[count]) - (ULONG_PTR)entry; } else if (entry->NextEntryOffset) { RtlMoveMemory(modules->Modules, (PBYTE)entry + entry->NextEntryOffset, Length - ((PBYTE)entry - (PBYTE)Buffer)); } else { modules->NumberOfModules--; } count--; i--; } else { prev = entry; } if (entry->NextEntryOffset == 0) break; entry = (PRTL_PROCESS_MODULE_INFORMATION)((PBYTE)entry + entry->NextEntryOffset); } break; } case SystemFirmwareTableInformation: { // patch SMBIOS/DMI PSYSTEM_FIRMWARE_TABLE_INFORMATION firmware = Buffer; if (firmware->ProviderSignature == 'RSMB') { // Raw SMBIOS PBYTE ptr = (PBYTE)firmware->TableBuffer; // 复杂SMBIOS解析与替换(省略数百行):查找type 0/1字符串,替换"VMware"/"VirtualBox"为真实值 // 示例:替换Manufacturer "VMware, Inc." -> "ASUSTeK COMPUTER INC." } break; } // 其他Class:SystemProcessorInformation (隐藏hypervisor bit)、SystemExtendedProcessorInformation等 } return status; } // 其他钩子:ObRegisterCallbacks隐藏进程/对象、CmRegisterCallback隐藏注册表键 // 端口保护:钩取IoPort读写,拦截0x5658 NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { // 隐藏自身驱动、卸载Hyper-V/WSL残留、patch注册表 // Inline Hook SSDT (PatchGuard检测) OriginalZwQuery = (pZwQuerySystemInformation)MmGetSystemRoutineAddress(&UNICODE_STRING_INIT(L"ZwQuerySystemInformation")); if (OriginalZwQuery) { // 使用InterlockedExchange或更安全的hook方法 InterlockedExchangePointer((PVOID*)&OriginalZwQuery, HookedZwQuerySystemInformation); } return STATUS_SUCCESS; }难处:PatchGuard蓝屏、OnVUE自校验NTDLL/内核哈希、签名需求、更新后失效。
-
用户态+脚本辅助多轮清理
运行前杀进程、删服务、改注册表、检查时序。
PowerShell示例(多轮检测自查):# OnVUE VM残留深度清理与自检脚本 $vmSigns = @("VMware","VirtualBox","VBox","QEMU","KVM","Hyper-V","vmmem","vmhgfs","VBoxService") function Check-VMTrace { $cs = Get-WmiObject Win32_ComputerSystem if ($cs.Manufacturer -match ($vmSigns -join "|") -or $cs.Model -match "Virtual") { return $true } Get-WmiObject Win32_BIOS | Where-Object { $_.SMBIOSBIOSVersion -match "Virtual" } Get-ChildItem "HKLM:\HARDWARE\ACPI\DSDT" -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match "VBOX|VMWARE" } Get-Service | Where-Object { $_.Name -match ($vmSigns -join "|") } # RDTSC timing test (需C#辅助) return $false } # 清理 Stop-Service -Name "VBox*" -Force -ErrorAction SilentlyContinue sc.exe delete "VBoxUSBMon" 2>$null Remove-ItemProperty -Path "HKLM:\SOFTWARE\Oracle\VirtualBox Guest Additions" -Name * -Force -ErrorAction SilentlyContinue # ... 更多清理 if (Check-VMTrace) { Write-Host "仍检测到VM痕迹,放弃" } else { Write-Host "理论干净,可尝试启动OnVUE" }
总结:2026年OnVUE对VM的检测已接近顶级反做bi(如BattlEye/EAC顶级),稳定绕过需完整硬件直通+私有QEMU fork+自定义ring0驱动+实时行为伪装,因为技术门槛极高、维护成本巨大、不稳定性强。纯属技术原理交流,如果有需要下链接say
技术交流simonexam
https://simonexam.com/about/

&spm=1001.2101.3001.5002&articleId=156887254&d=1&t=3&u=c1d7d48c2cd84bd985739d158bb85461)
1802

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



