当前位置: 首页 > news >正文

VMware 虚拟机反检测完整指南:3 步部署 VmwareHardenedLoader,让 VMProtect 3.2 查不出虚拟机

VMware 虚拟机反检测完整指南:3 步部署 VmwareHardenedLoader,让 VMProtect 3.2 查不出虚拟机

【免费下载链接】VmwareHardenedLoaderVmware Hardened VM detection mitigation loader (anti anti-vm)项目地址: https://gitcode.com/gh_mirrors/vm/VmwareHardenedLoader

VmwareHardenedLoader 是一个运行在 VMware Windows x64 客户机中的内核驱动:它实时修补系统固件表,抹掉 "VMware"、"Virtual"、"VMWARE" 这类可被识别的特征串,让 VMProtect 3.2、Safengine、Themida 的反虚拟机(anti-VM)校验直接失效。适合做逆向分析、软件测试、隔离实验,又不想被"虚拟机身份"出卖的开发者。

🗺️ 能力全景:一张表看清它挡掉哪些检测

检测面对方常见手段本项目对策
固件表RtlGetSystemFirmwareTable读 SMBIOS/ACPI 表,搜 "VMware" 字符串内核态挂钩固件查询处理器,查询返回前实时改写缓冲
CPUID读 hypervisor 位 / hypervisor 品牌串.vmxhypervisor.cpuid.v0 = "FALSE"隐藏
硬件指纹主板、机型、序列号、SMBIOS OEM 串全是 VMware 默认值.vmx*.reflectHost参数组反射宿主机真实信息
网络 MACMAC 前缀00:05:69/00:0C:29/00:1C:14/00:50:56属 VMware换 MAC,或.vmxethernet0.address
后门接口VMware backdoor、tools 版本/指针查询.vmxmonitor_control.*isolation.tools.*参数组
磁盘型号SCSI 系统盘 vendorID/productID 是默认值scsi0:0.productID/scsi0:0.vendorID覆盖

一个前提要说在前面:目前仅支持 Windows Vista ~ Win10 的 x64 客户机,没有 x86 构建,macOS/ARM 客户机不适用。

🚀 三步上手:编译、配 vmx、装驱动

第 1 步:宿主机编译驱动

环境要求 Visual Studio 2015/2017 + WDK 10:

git clone https://gitcode.com/gh_mirrors/vm/VmwareHardenedLoader

用 VS 打开根目录VmLoader.sln,选x64/Release生成。如果客户机没开测试签名,记得先给bin\vmloader.sys做 test-sign。驱动本体代码在VmLoader/main.cpp,反汇编相关的内核适配在VmLoader/cs_driver_mm.cVmLoader/kernel_stl.cpp

第 2 步:改 .vmx 配置与 MAC

把下面这些键值写进.vmx(关键项摘录,完整 19 行参数在项目根README.md里):

hypervisor.cpuid.v0 = "FALSE" board-id.reflectHost = "TRUE" hw.model.reflectHost = "TRUE" serialNumber.reflectHost = "TRUE" smbios.reflectHost = "TRUE" SMBIOS.noOEMStrings = "TRUE" ; isolation.tools.* 四项(getPtrLocation/setPtrLocation/setVersion/getVersion)全部 "TRUE" ; monitor_control.* 十项(disable_directexec ... restrict_backdoor)全部 "TRUE" ethernet0.address = "00:11:56:20:D2:E8"

如果系统盘是 scsi0 槽的 SCSI 虚拟磁盘,再补两行:

scsi0:0.productID = "Tencent SSD" scsi0:0.vendorID = "Tencent"

MAC 也可以在 VMware 图形界面里改:虚拟机设置 → 网络适配器 → NAT 高级 → MAC 地址,如图(img/4.png):

新 MAC 的前三个字节不能落在上表那四个 VMware OUI 前缀里,否则等于白改。

第 3 步:客户机里加载驱动

以管理员身份运行install.bat,服务正常拉起即成功。先别急着装 VMware Tools——它自带的工具栈会把你前面做的伪装全部漏掉,远程桌面请走 mstsc / TeamViewer / AnyDesk / VNC。

🔍 原理透视:驱动到底改了什么

特征码 + 内核态反汇编,定位固件表管理器

Windows 查固件表统一走ExpFirmwareTable,但相关全局变量没有导出符号。DriverEntry的处理路径是:

  1. ZwQuerySystemInformation(SystemModuleInformation)枚举模块表,定位ntoskrnl基址;
  2. .PAGE段里搜固定特征41 B8 41 52 46 54mov r8d, 'TFRA'指令);
  3. 从该指令起逐条反汇编、沿分支最多跟踪 16 层,认出ExpFirmwareTableResourceExpFirmwareTableProviderListHead两个地址。

第 3 步用的就是项目自带的 capstone 反汇编引擎(capstone/目录,含完整的 x86 表与 MC 测试套件 的移植内核版),kernel_stl.cpp则提供内核环境下的部分 STL 容器支持。

在 ACPI / RSMB / FIRM 三条查询路径上挂钩

定位到FirmwareTableProviderList后,驱动遍历这张链表,按 Provider 签名找到三个节点,把各自的FirmwareTableHandler换成包装函数:

  • ACPI节点:查询成功后抹掉VMwareVirtual
  • RSMB/FIRM节点:抹掉VMwareVMWARE

包装函数先调原处理器拿到真实表缓冲,再做一次内存搜索,把命中字节整段覆盖成'7'。未处理时的固件表长这样(img/2.png),高亮的 "VMware SVGA II" 就是重写目标:

卸载即还原

DriverUnload会再次持有ExpFirmwareTableResource锁,遍历链表把三个处理器逐一换回原函数(main.cppDriverUnload),所以这套修改是运行时、可逆的——卸载驱动、重启客户机即可恢复原状,不碰任何磁盘文件。

✅ 效果验证:怎么确认它生效了

看检测方。跑一个开启 anti-vm 选项的 VMProtect 3.2 保护程序。没部署驱动时它会弹窗拒绝运行(img/1.png即部署前状态):

部署成功后同样的程序直接跑通,不再弹 "cannot run under a Virtual Machine"。

看驱动方。用 DbgView 抓内核调试输出,正常序列是:SystemFirmwareTableInformation calledrequesting FIRM, act 1, table 786432, ret=00000023(查询前的无权限占位)→ret=00000000(查询成功,拿到的是已清洗的表)。img/3.png展示的就是生效后的输出:

看特征方。用十六进制工具转储 SMBIOS/ACPI 表缓冲,原先的 "VMware" 字符串应全部变为77777777占位。

⚠️ 避坑清单:5 个最容易翻车的地方

  • 装完 VMware Tools 后又被告密→ 现象:全套配置做完仍被识别 → 原因:tools 自带 backdoor 与版本查询通道 → 处理:彻底不装 tools,远程一律走 mstsc / TeamViewer / AnyDesk / VNC。
  • install.bat 一执行服务就起不来→ 现象:启动服务报错 → 原因:vmloader.sys没 test-sign,或特征与该版本ntoskrnl不匹配 → 处理:先补签名;仍失败用 DbgView 抓内核输出,连同ntoskrnl.exe一起提 issue。
  • 换了 MAC 依然被识破→ 现象:网络侧检测照旧 → 原因:新 MAC 前缀仍落在四个 VMware OUI 段内 → 处理:重新生成随机 MAC,或直接在.vmx里写ethernet0.address
  • 32 位系统/虚拟机想复用→ 现象:找不到对应产物、编译无 x86 配置 → 原因:项目仅支持 Vista~Win10 x64 客户机 → 处理:换 x64 客户机,别无捷径。
  • 显卡信息仍能被查出来→ 现象:经 DXGI 接口问到虚拟显卡型号 → 原因:显卡驱动文件本身携带 VMware 信息,属已知 TODO → 处理:按 README 提示修改显卡驱动文件,或接受此残留。

🧩 进阶玩法

  • 扩特征清单RemoveSigs是纯内存搜索替换,往MyFIRMHandler/MyACPIHandler里追加自己的字符串即可覆盖更多变体;同理也可以再挂新的 Provider 签名节点。
  • 伪造"物理机指纹"*.reflectHost参数会让客户机反射宿主机真实的主板/序列号/SMBIOS,配合一台品牌机做宿主,得到的指纹与真机几乎无法区分。
  • 内核工程参考cs_driver_mm.c(内核态内存分配适配)+kernel_stl.cpp(STL 子集)是"在 Windows 内核里跑 C++ 反汇编器"的少见完整样例,值得细读。

结语

VmwareHardenedLoader 的体量不大,但把 VMware 反虚拟机检测里最硬的一层——固件表查询——用"定位、挂钩、清洗、可逆"四步完整拿下,且与 .vmx 侧参数形成内外配合。边界同样明确:只针对 VMware、只覆盖 Windows x64 客户机,显卡 DXGI 泄漏尚待处理。对逆向分析、隔离测试、兼容性验证这类场景,它是环境准备清单里值得加的一项。

【免费下载链接】VmwareHardenedLoaderVmware Hardened VM detection mitigation loader (anti anti-vm)项目地址: https://gitcode.com/gh_mirrors/vm/VmwareHardenedLoader

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4181312.html

相关文章:

  • PAIR:前缀感知内部奖励模型如何优化多轮对话Agent学习效率
  • AI智能体长程记忆管理:基于轻量评分器的选择性遗忘机制
  • CMWTAT_Digital_Edition 使用教程:3 步完成 Windows 数字权利激活
  • MiroFish 完整部署指南:从一条命令到第一次预测
  • 无人机反制核心技术解析:雷达探测与信号干扰的协同防御
  • FactorioLab:免费开源的工厂游戏资源计算器完整上手指南
  • 蚂蚁百灵开源模型实战:从Checkpoint加载到领域微调全解析
  • Boltz-2 生物分子相互作用与亲和力预测:从安装到首次预测的完整指南
  • JavaScript面试核心考点与高频题型解析
  • Page Assist:看网页时随时问本地AI
  • AI智能体规划任务中的层间动态机制与鲁棒性优化实践
  • java sheduler Java Scheduler?别闹!固定翼无人机集群,分布式MPC才是真大佬,30秒队形稳如狗
  • Unity 架构深度解析:从 GameObject 到 ECS 的演进之路
  • DreamHand:利用视频扩散模型先验解决第一人称3D手部运动恢复难题
  • AI4AI-Bench:大语言模型算法设计与递归自我改进能力评估
  • 阿里Qwen-Image-3.0-Pro图像模型:从核心能力到本地部署与API调用实践
  • 对话式信息流:从算法推送到用户探索的技术变革
  • TrollStore 完整安装指南:三步把 IPA 永久装进 iOS,附避坑清单
  • raylib 完整入门指南:从零构建 2D/3D 游戏应用的 4 个核心能力
  • 记忆树引导关键帧查询:高效3D视觉问答的智能调度新范式
  • 中国开源AI模型实战:从本地部署到生产集成的完整指南
  • 大模型训练全流程拆解:从数据、算力到算法优化的实战指南
  • Meta开源Muse Spark 1.2与OpenCode:免费本地AI编程助手实战指南
  • 如何把 kkFileView 接入 KingbaseES:一份国产化文件预览与数据库备份落地指南
  • 如何用 LocoMuJoCo 从零搭建机器人模仿学习环境:完整上手指南
  • 如何用COLMAP把一批照片变成三维模型:三维重建快速上手
  • AT32F421F8P7国产MCU开发实战:从环境搭建到外设测试全解析
  • Notepad--文本编辑器:从安装到批量替换的15分钟上手教程
  • Android车载开发必学:CAN协议解析与实战集成
  • SIP协议通话转接:从REFER/Re-INVITE原理到STM32嵌入式实战