-
-
[原创]在个人 PC Windows 不套娃搭建恶意软件沙箱:CAPEv2 VMware Workstation 流畅运行完整实战
-
发表于: 2026-3-11 18:06 689
-
写在前面
想在本地搭个恶意软件沙箱?网上教程一堆,但大多是 Linux + KVM 的方案。
如果你和我一样,主力机是 Windows,又不想让windows套vmware套ubuntu套kvm套windows或买服务器,这篇文章就是给你写的。
核心痛点:
- CAPEv2 官方推荐 Linux + KVM,但 Windows 物理机无法直接运行 KVM
- 如果使用windows + KVM 如前言的多层套娃,又会导致内层系统卡顿不已
- VMware Workstation 在 Windows 上很成熟,但 CAPEv2 控制 VMware 需要跨系统通信
- 网上大部分教程都是理想环境(独立 Linux 服务器或直接物理机装 Ubuntu)或者直接上VMware ESXi(企业级),实际部署会遇到各种坑
本文方案:
- 物理机:Windows 11
- 虚拟化:VMware Workstation
- 沙箱系统:Ubuntu VM 运行 CAPEv2
- 分析机:Windows 10 VM
通过 SSH + bridge.bat 中转,让 Ubuntu VM 能控制 Windows 上的 VMware,实现完整的自动化分析流程。
架构设计
最终稳定架构
1 2 3 4 | 物理机 Windows 11 └─ VMware Workstation(运行在 ADMIN 桌面会话) ├─ Ubuntu VM(运行 CAPEv2) └─ Windows 分析机 VM(cape.vmx) |
通信流程
1 2 3 4 5 6 7 8 9 | Ubuntu → SSH → Windows ADMIN ↓ 写 command.txt ↓ 桌面 Session 中 bridge.bat 执行 vmrun ↓ 输出写入 result.txt ↓Ubuntu 读取 result.txt |
核心原则
- VMware 必须在 ADMIN 桌面 Session 运行
- SSH 也必须登录 ADMIN
- vmrun 必须在桌面 Session 执行(通过 bridge)
- Ubuntu VM、Windows VM、Windows 物理机彼此必须网络相互可达(ping 通即可)
为什么这么设计?
VMware Workstation 的 vmrun 命令必须在有桌面会话的环境下执行,否则会报错。而 SSH 默认是无桌面会话的,所以需要通过 bridge.bat 这个中转脚本,在桌面会话中执行 vmrun 命令。
VMware Workstation 的虚拟机采用会话绑定锁的方式,因此 SSH 、bridge、Windows VM 必须在同一个会话
部署步骤
一、Windows 物理机配置
1. 配置 SSH 免密登录
为什么要用 ADMIN 账户?
因为 VMware 需要管理员权限,使用普通账户会遇到权限问题。
Ubuntu 端生成 SSH 公钥:
1 | ssh-keygen -t ed25519 |
一路回车,不设置 passphrase(自动化必须留空)。
复制公钥内容:
1 | cat ~/.ssh/id_ed25519.pub |
Windows 端配置公钥:
⚠️ 重要: 因为 ADMIN 属于 Administrators 组,Windows OpenSSH 不会读取用户目录下的 authorized_keys,而是读取:
1 | C:\ProgramData\ssh\administrators_authorized_keys |
创建文件并粘贴公钥内容,然后设置权限:
1 2 3 | icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:ricacls C:\ProgramData\ssh\administrators_authorized_keys /grant:r "SYSTEM:(F)"icacls C:\ProgramData\ssh\administrators_authorized_keys /grant:r "Administrators:(F)" |
重启 SSH 服务:
1 | Restart-Service sshd |
测试免密登录:
1 | ssh admin@192.168.1.1 |
如果直接进入 shell,不再要求密码,说明成功。
2. 创建 bridge 执行器
在 C:\Users\ADMIN\Desktop\vmrun\ 创建 bridge.bat:
@echo off
setlocal enabledelayedexpansion
set "CMD_FILE=C:\Users\ADMIN\Desktop\vmrun\command.txt"
set "RES_FILE=C:\Users\ADMIN\Desktop\vmrun\result.txt"
:loop
if exist "%CMD_FILE%" (
del "%RES_FILE%" >nul 2>&1
for /f "usebackq delims=" %%A in ("%CMD_FILE%") do (
set "VM_CMD=%%A"
)
echo Running: !VM_CMD!
cmd /c "!VM_CMD!" > "%RES_FILE%" 2>&1
del "%CMD_FILE%"
)
timeout /t 1 >nul
goto loop
这个脚本做什么?
它会不断检查 command.txt 文件,如果存在就执行里面的命令,并把结果写入 result.txt。这样 Ubuntu 就可以通过 SSH 写入命令,然后读取结果。
3. 让 bridge 后台运行
创建 start_hidden.vbs:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c C:\Users\ADMIN\Desktop\vmrun\bridge.bat", 0, False
把这个文件放入启动文件夹(Win+R 输入 shell:startup),确保开机自动运行。
二、Ubuntu VM 配置
1. 创建 vmrun 中转脚本
在 /usr/local/bin/vmrun 创建脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/bashWINDOWS_HOST="192.168.1.1"WINDOWS_USER="admin"CMD="path/to/vmrun.exe"REAL_VMX="path/to/vmx"FULL="$CMD"for arg in "$@"; do if [[ "$arg" == *.vmx ]]; then FULL="$FULL \"$REAL_VMX\"" else FULL="$FULL \"$arg\"" fidonessh ${WINDOWS_USER}@${WINDOWS_HOST} "echo $FULL > C:\\Users\\ADMIN\\Desktop\\vmrun\\command.txt"sleep 2ssh ${WINDOWS_USER}@${WINDOWS_HOST} "type C:\\Users\\ADMIN\\Desktop\\vmrun\\result.txt" |
设置可执行权限:
1 | sudo chmod +x /usr/local/bin/vmrun |
测试链路:
1 2 3 | vmrun listvmrun start "path/to/vmx" noguivmrun stop "path/to/vmx" hard |
如果返回正常,说明 SSH、bridge、vmrun 都正常工作。
三、安装 CAPEv2
1. 安装系统依赖
1 2 3 | sudo apt updatesudo apt install -y git mongodb redis-server tcpdump \ libffi-dev libssl-dev build-essential p7zip-full |
启动 MongoDB:
1 2 | sudo systemctl enable mongodsudo systemctl start mongod |
2. 使用 Python 3.10(重要)
⚠️ 踩坑警告: Python 3.12 下 multiprocessing 行为不稳定,processing 线程不触发。建议使用 Python 3.10。
1 | sudo apt install python3.10 python3.10-venv python3.10-dev |
3. 克隆并配置 CAPEv2
1 2 3 4 5 6 | git clone https://github.com/kevoreilly/CAPEv2.gitcd CAPEv2python3.10 -m venv cape310source cape310/bin/activatepip install --upgrade pippip install -r requirements.txt |
四、配置 Windows 分析虚拟机
在 Windows 分析机 VM 中执行以下操作:
- 设置静态 IP(如 192.168.1.1)
- 关闭防火墙
- 安装 Python 3.10-3.14(必须 32 位)
- 复制
CAPEv2到分析机
运行 Agent:
1 | python agent/agent.py |
应显示监听端口:0.0.0.0:8000
设置开机自启:
建议使用计划任务,确保每次启动都自动运行 agent。
创建快照:
关机并创建名为 clean 的快照(名称必须与后续 Ubuntu 配置文件中的 snapshot 一致)。
五、配置 CAPE 核心
1. 修改 ResultServer IP
编辑 conf/cuckoo.conf:
[resultserver] ip = 192.168.1.2 port = 2042
这个 IP 是 Ubuntu VM 的 IP,分析机会通过这个 IP 回传数据。
2. 配置 VMware
编辑 conf/vmware.conf:
[vmware] mode = nogui path = /usr/local/bin/vmrun [win10] label = win10 platform = windows ip = 192.168.1.1 snapshot = clean vmx_path = /home/username/VMs/win10/win10.vmx
⚠️ 注意:
vmx_path必须是真实 Linux 路径,只要文件存在即可(用于欺骗 CAPE),需要自己手动创建snapshot必须提前在 VMware 中创建关机镜像ip必须是 Win10 的 ip 地址
3. 调整剩余空间要求
CAPE 默认要求剩余空间 50G,如果不够可以修改 conf/cuckoo.conf(推荐大一点):
freespace = 10240
根据实际磁盘空间调整该值(单位 MB)。
4. 启用 MongoDB reporting
编辑 conf/reporting.conf,确保启用:
[mongodb] enabled = yes
5. 修复 tcpdump 权限
1 2 3 4 | sudo groupadd pcapsudo usermod -a -G pcap $USERsudo chgrp pcap /usr/bin/tcpdumpsudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump |
重新登录生效。
6. 修复 VM 强制关闭逻辑
⚠️ 踩坑警告: 使用路径中转(dummy vmx),_is_running() 判断永远为 False,导致 VM 无法正常关闭。
解决方法: 修改 modules/machinery/vmware.py,去掉 _is_running() 判断,强制执行 vmrun stop <vmx> hard,忽略返回码。
六、配置 Web 界面
1. 删除 daphne(使用标准 WSGI)
1 | pip uninstall daphne |
编辑 web/web/settings.py,从 INSTALLED_APPS 中删除 "daphne"。
2. 固定 SQLite 数据库路径
在 web/web/settings.py 中设置:
1 2 3 4 5 6 | DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "siteauth.sqlite"), }} |
3. 配置静态文件
确保配置如下:
1 2 3 | STATIC_URL = "/static/"STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] |
4. 初始化数据库
1 2 3 | python web/manage.py migratepython web/manage.py createsuperuserpython web/manage.py collectstatic |
5. 启动 Web
1 | python web/manage.py runserver 0.0.0.0:8000 |
访问:http://UbuntuIP:8000

正常启动顺序
每次运行需要启动三个终端,都不要用管理员权限启动:
终端 1 - CAPE 核心:
1 2 | source cape310/bin/activatepython cuckoo.py |
终端 2 - Process 进程:
1 2 | source cape310/bin/activatepython utils/process.py auto -p 1 |
终端 3 - Web 界面:
1 2 | source cape310/bin/activatepython web/manage.py runserver 0.0.0.0:8000 |
Windows 上的 agent 由开机自启启动。
验证链路
提交样本
1 | python cuckoo.py submit sample.exe |
或在前端提交样本分析即可
正常流程
- VM 启动
- 恢复 snapshot
- agent 通信
- 分析完成
- Web 显示报告

踩坑总结
1. Python 3.12 的 multiprocessing 问题
现象: processing 线程不触发,任务一直卡在队列中。
解决: 使用 Python 3.10。
2. vmrun 必须在桌面 Session 执行
现象: SSH 执行 vmrun 报错。
解决: 通过 bridge.bat 在桌面 Session 中执行。
3. _is_running() 判断问题
现象: VM 无法正常关闭,machine 状态一直被占用。
解决: 修改 vmware.py,强制执行 vmrun stop 并忽略返回码。
系统要求
Ubuntu VM 推荐配置:
- 内存:≥ 4GB(否则 Process 可能无法启动)
- 存储:≥ 50GB
Windows 分析机推荐配置:
- 内存:≥ 2GB
- 存储:≥ 20GB
效果
部署成功后,你可以:
- 通过 Web 界面提交样本
- 自动启动分析机、恢复快照
- 监控样本行为(进程、网络、文件操作等)
- 生成详细的分析报告
- 运行自定义脚本、yara
写在最后
这套方案的核心价值在于:
- 解决了 VMware Workstation + Windows 物理机的架构问题 —— 通过 SSH + bridge.bat 中转,让 Ubuntu VM 能控制 Windows 上的 VMware
- 踩坑记录很实用 —— 都是笔者血泪教训
- 架构清晰 —— 一眼就能看懂整体结构和通信流程
相关资源:
- CAPEv2 官方仓库:f76K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6C8k6i4k6G2M7X3g2A6L8r3I4&6i4K6u0r3b7@1q4b7c8i4j5J5
- VMware Workstation:0abK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2$3L8i4N6S2M7X3g2Q4x3X3g2U0L8$3#2Q4x3V1k6H3M7X3!0V1N6h3y4@1M7#2)9J5c8Y4N6G2M7X3E0K6N6r3q4@1K9h3!0F1i4K6u0V1M7s2u0G2i4K6u0W2K9s2c8E0L8l9`.`.
- 我的仓库:f81K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0K9i4g2F1j5i4y4#2