写作背景:本文整理自 2026 年 4 月对一款名为 “CloakBox / ANTIDETECT 5 FREE Education Edition” 的公开软件做的纯静态反汇编 + 隔离虚拟机动态验证。前后两个阶段耗时数日,产出 19 份子报告、~200 KB 分析材料、12 个 Python 反汇编脚本。本文是想把过程本身讲明白,而不只是简单给出结论。
在绝大多数司法辖区,对合法获取的软件进行逆向工程,用于安全研究、漏洞分析、实现互操作或教学目的,属于版权法合理使用条款所保护的行为。本文讨论严格限于此范围,不提供 CloakBox 二进制文件,不讨论其具体使用场景,不涉及对产品用途的任何价值判断。所引用的公司名称、证书指纹、URL、UUID,均已存在于 CloakBox 公开发行的二进制字符串表中,并已被 VirusTotal、Vektor 官网、Patreon 页面、社区论坛等公开来源记录,不构成对任何隐私信息的披露。
第一部分:CloakBox 是什么
30 秒介绍
CloakBox 是一款专注于”反虚拟机识别”的 VirtualBox 衍生发行版。
它的产品定位是:让虚拟机在面对那些会主动识别”自己是否跑在虚拟机里”的第三方软件时,技术上表现得与一台真实物理机更接近。
这是一个技术品类,叫做 “Anti-VM-Detection VM” 或 “Anti-Detect Virtualization” 。近几年这个品类在国际市场上有多家商业化产品(如 ByteVM、Nstbrowser、各类广告联盟营销工作室用的专用 VM 等),CloakBox 是其中的一款。
技术三段论
用非工程师也能读懂的方式拆解 CloakBox 做的三件事:
- 1. 虚拟化引擎:底层是 Oracle VirtualBox 7.2.4——这是一款全球几千万用户的开源虚拟机软件。CloakBox 基于它的源码(GPL v3 开源)在自己的代码分支上继续开发。
- 2. 反 VM 识别层:在虚拟机进入 Guest 操作系统之前,CloakBox 做了一系列字段替换——CPU 特征字符串、主板 BIOS 厂商、ACPI 表的 OEM ID、DMI 系统唯一 ID 等。这些字段如果保持 VirtualBox 默认值,很容易被识别为”虚拟机”;CloakBox 把它们替换成真实硬件厂商的值(比如 MSI 主板、Intel CPU、AMI BIOS)。
- 3. 授权与 UI:CloakBox 通过一家叫
keygen.sh的商业授权 SaaS 做 license 验证;它的右键菜单(Qt 框架实现)提供了一组反检测功能的配置开关。
产品与归属
- • 开发方:Vektor T13 Technologies B.V.,一个荷兰鹿特丹注册的合法商业实体,另有关联的乌克兰 LLC 实体。
- • 商业模式:FREE 版免费、Premium 版通过 Patreon 订阅付费
- • 内部产品代号:Antidetect5(从 PDB 路径与 MSI 产品名里可见)
- • 产品形态:一个 65 MB 的 Windows 安装包(NSIS + 内嵌 MSI)
- • 依赖的第三方技术:Oracle VirtualBox(基础虚拟化)、Juice Labs Juicify(GPU 栈代理)、Qt 6(UI 框架)、libcurl + OpenSSL(TLS 栈)、keygen.sh(授权 SaaS)
这类技术的常见应用场景
“反虚拟机识别”不是 CloakBox 独有的概念。从业界视角看,这一技术品类在以下场景均有成熟商用产品:
| 场景 | 代表产品 / 用途 |
|---|---|
| 反机器人 / 反爬检测规避 | 广告联盟、电商爬虫、自动化营销工作室使用的反识别浏览器(Multilogin、AdsPower 等) |
| 浏览器指纹隔离(多账号运营) | 社媒矩阵管理、电商多店运营(Nstbrowser、ByteVM 等) |
| 在线考试监考系统(proctoring)规避 | 这是反检测虚拟化行业里公开性最强、也最争议的一类应用——涉及 Pearson VUE OnVUE、ProctorU 等监考系统的绕过 |
| 恶意软件沙箱对抗(红队研究) | 渗透测试、Red Team 技术测试,让 payload 在 VM 里能跑出真实物理机行为 |
| 隐私研究 / OSINT 作业隔离 | 研究员在隔离环境里接触可疑网页 / 样本,同时避免研究环境被目标识别 |
CloakBox 在这个品类里的具体位置:从它捆绑的工具集(OBS 虚拟摄像头、FakeGPS daemon、假 Realtek 声卡驱动、DoD STIG 组策略、Pearson-OnVUE 专用启动脚本)看,它的典型部署场景偏向在线监考系统规避。但同样这些技术组件(虚拟摄像头 / 假 GPS / 图形栈代理)在隐私研究和红队渗透测试领域也是常用的。
对使用者的安全考量
仅从软件本身对使用者计算机的技术影响角度评估:
1. CloakBox 不会做的事
基于完整的静态反汇编 + 动态 Frida 插桩验证:
- • 不读取浏览器密码、Cookie、自动填充字段(静态扫描无
LocalState/Cookies/Login Data等 Chrome/Edge 敏感文件路径字符串,也无对应 API 导入) - • 不截屏、不录键盘(无
GetKeyboardState/GetAsyncKeyState长期钩子;无屏幕截取 API 的常驻使用) - • 不访问加密货币钱包 / 文档(无
wallet.dat/.docx/.pdf的文件扫描行为) - • 不做 Process Injection 到其他进程(无
WriteProcessMemory/CreateRemoteThread新增导入) - • 不碰 SSDT / IDT / PatchGuard(内核层零新增钩子)
- • 不安装 rootkit 式持久化(无 MBR 改写、无 UEFI bootkit、无 WMI Event Subscription 持久化)
等价说法:CloakBox 不是恶意软件(malware)、不是远控(RAT)、不是 infostealer、不是勒索软件。
2. CloakBox 会做的事(使用者需要知情)
这些是使用者必须明确了解的技术行为:
1. 内核驱动开机自启
- •
AtdtSup.sys以 “System-start” 方式注册服务(Windows 引导阶段加载,早于用户登录) - • 驱动签名有效(Vektor EV + 已过期的 WHQL),但这意味着系统启动后就有一个 ring-0 组件
- • 卸载 CloakBox 后该驱动文件不会自动删除——要手动检查
C:\Windows\System32\drivers\AtdtSup.sys是否被清理
2. 启动期”打卡”式授权心跳
- • 每次启动
VirtualBox.exe,无论用户是否激活了 license,都会向api.keygen.sh发一次 HTTPS POST(使用硬编码的 trial key) - • 这意味着 Vektor 后台能看到每一次启动的时间戳 + 源 IP
- • 这是合法商业 DRM 机制(类似 Adobe、JetBrains),不是恶意 C2;但 EULA 没有显式告知用户这一行为
- • 企业网络监控层面:公司 SOC 若部署 SSL 拦截代理也无法解密这段流量(CloakBox 用了内嵌 Mozilla CA bundle)
3. HWID 密钥写入用户 SSH 目录
- • 调用
ssh-keygen.exe -m PEM -t rsa -b 4096生成 4096-bit RSA 密钥对 - • 路径:
%USERPROFILE%\.ssh\id_rsa/.ssh\id_rsa.pub - • 这与用户自己用 Git/SSH 登录时使用的标准目录冲突——如果用户本身已有 SSH 工作密钥,可能被覆盖(目前未看到明确的覆盖保护逻辑)
- • 从工程规范角度看,这不是好的做法(商业软件应该用自己独立的目录存 HWID 密钥)
4. UI 菜单触发的主机级修改
- • CloakBox 的 “Fuck Menu” 里 22 个 action 一旦点击,会执行预编译在
VirtualBox.exe里的 cmd 模板 - • 这些模板会修改**主机(非虚拟机)**的:
- • Windows Firewall 规则
- • HOSTS 文件
- • 浏览器快捷方式(Edge 加
--enable-unsafe-webgpu等参数) - • 开机启动项(如安装 OpenVPN 后追加 Startup 快捷方式)
- • Windows 组策略(应用 57 条 DoD STIG)
- • 这些修改没有自动 undo——需要用户手动回滚
- • 只要不点这些菜单,CloakBox 本身不会触发这些修改
3. 需要注意的企业环境问题
如果你是在企业电脑上运行:
- • 内嵌 Mozilla CA bundle 的单向 TLS 信任链意味着企业的 SSL 拦截代理无法解密这条
api.keygen.sh流量——这在某些合规环境下可能违反企业”所有出站 HTTPS 必须可被 SOC 检查”的 policy - • 若用户点了
AntiOSBrowserHardened等 action,宿主机的浏览器行为会被永久修改——企业的端点合规基线可能被破坏 - • 即使未主动点 action,CloakBox 的存在本身(AtdtSup.sys + Vektor T13 EV 签名)会触发部分 EDR/Sysmon 规则告警
总结:给个人用户的技术判断
| 问题 | 答案 |
|---|---|
| CloakBox 会偷我的数据吗? | 不会(无 infostealer 组件) |
| CloakBox 会变成远控 / 挖矿 / 勒索吗? | 不会(无相关能力) |
| CloakBox 会留持久化后门吗? | 有受控的持久化(内核驱动 + 激活心跳),但技术上可识别、可清理 |
| CloakBox 会影响我的日常网络 / 浏览器吗? | 除非用户主动点 Fuck Menu 的 action,否则不影响;点了之后会有永久修改 |
| 装 CloakBox 等于装了病毒吗? | 不等于——但它属于 “Anti-Detect 品类商业软件”,部分 EDR / Defender 会标为 PUA |
| 卸载干净需要什么? | 控制面板卸载 + 手动检查 AtdtSup.sys + 手动回滚任何点过的 Fuck Menu 修改 |
一句话判断:对个人电脑低至中风险,可清理;对企业电脑不建议装,会破坏合规基线并触发安全告警。
第二部分:作者是如何一步步挖到真相的
接下来的内容逐步进入技术深水区。非工程师读者可以跳到第三部分”技术指纹总结”。
0. 序曲:一个看似平常的安装包
故事开始于一个普通的 .exe 文件:
文件名:CloakBox.exe
大小:65 MB
签名:Vektor T13 Technologies B.V., Rotterdam, Netherlands
Windows 资源管理器显示它是 "VirtualBox-7.2.4-r167084-Win"——一个看起来平平无奇的 Oracle VirtualBox 安装包。
但是 Oracle 公开发布的 VirtualBox 7.2.4 的内部 build 号是 r170995,不是 r167084。r167084 是一个从未出现在 Oracle 公开 CDN 上的内部 build。这意味着:
CloakBox 不是简单地把一个 Oracle 原版 VirtualBox 改个重新编译,它是基于 Oracle 的源码(Oracle VirtualBox 的核心是 GPL v3 开源的)在某个时间点 fork 出来的一个分支。它内部的构建树早已和 Oracle 主线分叉。
这个观察定下了整个分析的第一个基调:我们面对的不是一个”重打包”的二进制,而是一个源码级的 fork。这意味着 Vektor 的构建工具链需要维护自己的 Makefile.kmk、自己的签名工具链、自己的 GPL 合规分支。工程复杂度远超”重打包”级别。
1. 第一回合:签名链的五个身份
拆开安装包之后我们做了第一件事,对每一个可执行文件检查数字签名。这是审计外来软件的起手式,能在 5 分钟内告诉你”这东西的作者究竟是谁”。
结果发现 CloakBox 的文件集合里一共有 5 个不同的签名身份:
| 签名身份 | 注册地 | 签哪些文件 |
|---|---|---|
| Vektor T13 Technologies B.V. | 荷兰鹿特丹(EV 证书) | CloakBox.exe、VirtualBox.exe、UICommon.dll、AtdtSup.sys、VBoxCertUtil.exe、OBSDriver.dll、Realtek 驱动等(主体) |
| VEKTOR T13 TECHNOLOGIES LLC | 乌克兰哈尔科夫(邮箱 vektort13@protonmail.ch) | FakeGPS/bcmgnssd.dll |
| Tyshchenko Volodymyr Volodymyrovych | 乌克兰基辅(个人证书,邮箱 vovan44ik1@gmail.com) | 在 PDB 路径里出现 |
| Ryan Smith | 美国拉斯维加斯(个人证书) | A5Toolkit-amd64.exe、WebRTCMonitor.msi |
| curl-for-win Code Signing Authority | 开源项目(Daniel Stenberg) | 附带的 curl.exe |
这是五个独立的法律实体。它们之间的关系从证书签名块和 PDB 路径可以做合理推断:
- • 两个 Vektor T13 实体(荷兰 BV + 乌克兰 LLC)几乎可以认定是同一组织的双法律主体架构。BV 负责欧盟市场合规,LLC 承担部分需要不同证书路径的代码(早期没有 BV 的 EV 证书时会用 LLC 证书签)
- • Tyshchenko 的 PDB 路径
C:\Devel\Antidetect5\Personal\VirtualBox\...暴露了他就是 Vektor 的核心开发者(昵称 “Vovan” 是俄语 “Владимир” 的通用爱称) - • Ryan Smith 是独立第三方,A5Toolkit 是Vektor 打包分发但非自研的第三方产品
技术启示:当一个”VirtualBox 改版”里出现跨国、跨个体、跨商业主体的签名组合时,它的供应链故事必然多层。后续 ISO 拆包(见第 6 节)印证了这一点——整张 406 MB 的”Guest Additions ISO”里至少有 6 家不同实体的二进制。
2. 第二回合:六个问题框架
第一阶段(表面审计)做到一半时,整个项目的分析方向被重新定义为 6 个逻辑递进的问题:
Q1 它是干什么的?(产品定位)
Q2 大概是怎么实现的?(架构)
Q3 具体是怎么实现的?(代码细节)
Q4 技术特征与行业分类是什么?
Q5 具体技术行为的清单
Q6 技术检测与卸载
这 6 个问题后来成了整个分析项目的骨架。每一步的深度都建立在前一步的基础上。
关键技术发现之一:新增 API 导入数为零
逐一对比 CloakBox 和 Oracle 原版 VirtualBox 7.2.4 的 PE 导入表,一个反直觉的结论浮现:
CloakBox 的内核驱动 AtdtSup.sys 相比 Oracle 的 VBoxSup.sys,导入 API 数量 = 112 vs 112,零新增。
这强烈暗示:Vektor 没有给内核驱动加任何新的 Windows API 依赖。换句话说,他们只是把 Oracle 的代码拿来改了文件名、改了设备名、改了 PDB 路径、加了些伪装字符串,而没有在内核层引入新的系统调用依赖。
这个观察对后续判断至关重要,也就可以推出 CloakBox 对于这部分并没有对原版 Virtualbox 进行更改。如果 Vektor 加了新的内核能力,他们必须引入新的 Windows API 导入,而这里没有。
Q1-Q6 的阶段性结论
Q1-Q3 阶段给出的初步技术分类:
D1 外部网络外联 — 初版判定:无
D2 用户数据读取 — 无
D3 持久化系统组件 — 部分(内核驱动 System-start 自启)
D4 核心系统组件修改 — 无
D5 反主机级监控能力 — 部分(TLS 走内嵌 CA、Sysmon overlay)
这是初版技术分类,后面它会被动态分析部分推翻。 这也是这个故事真正有意思的地方,阶段性结论和最终真相之间的差距。
Phase 2 六问的产出是 18 KB 的 Q1 报告 + 19 KB 的 Q2 架构报告 + 6 份 Q3 子报告(合计 80 KB)+ 两份 Q6 报告(防御 + 移除,合计 28 KB)+ 一个 600 行的 PowerShell 清理脚本(cleanup_verify.ps1,含 DryRun / Apply / VerifyOnly 三种模式)。
表面上项目到这里就结束了。
但有一个观察一直没被展开:
CloakBox 的 VirtualBox.exe 和 VBoxHeadless.exe 的
.rsrc段熵是 7.96。对比 Oracle 原版的 3.02,这段数据值得单独一章分析。
这个悬念打开了整个故事真正的核心章节。
3. 第三回合:消失的加密 blob
3.1 异常值不合理
Q3 阶段的观察:CloakBox 的 VirtualBox.exe 和 VBoxHeadless.exe 的 .rsrc 段信息熵 = 7.96。
对于不做二进制分析的朋友:.rsrc 是 Windows PE 文件的”资源段”,通常装图标、对话框、字符串表、版本信息。这些应该是明文,信息熵通常在 2.0 – 4.0 之间。
熵 7.96 意味着”接近完全随机的字节流”,也就是说正常的数据结构不会这样。要么是加密后的数据,要么是压缩后的数据。
Oracle 原版同名文件的 .rsrc 段熵只有 3.02(标准图标 + 字符串表)。
当时的假设很自然:
CloakBox 是否在
.rsrc段里藏了什么加密数据?license key?硬编码的 URL?一段加密的二进制?
我们启动了一个 “Phase 2.1” 专项:
- 1. 提取出这段高熵 blob
- 2. 找出加密算法(XOR? RC4? AES? 自定义?)
- 3. 找出密钥在哪里
- 4. 解密,看看里面是什么
3.2 提取
.rsrc 段的资源树:
Type=ID_3 (RT_ICON) ID=ID_1 Size = 140,104 ← 这个可疑
Type=ID_14 (RT_GROUP_ICON) ID=ID_1 Size = 20
Type=ID_16 (RT_VERSION) ID=ID_1 Size = 856
Type=ID_24 (RT_MANIFEST) ID=ID_1 Size = 465
140 KB 的 RT_ICON(图标资源)? 正常的 Windows 图标最多几十 KB。
Phase 2.1 的完整计划:8 步,预计 2-4 小时。
3.3 证伪:一个非常有价值的阴性结果
提取 blob → dump 成文件 → 一看前 8 个字节:
89 50 4E 47 0D 0A 1A 0A
这是 PNG 图像的 magic bytes:
89 = 非 ASCII(避免误判为文本)
50 4E 47 = ASCII "PNG"
0D 0A 1A 0A = CRLF + Ctrl+Z + LF,跨平台换行一致性标记
它就是一张 PNG 图片。
继续解析 PNG IHDR 头:
Width = 256
Height = 256
Bit depth = 8
Color type = 6 (RGBA)
一张 256×256 RGBA 的 PNG 图像,Windows 10/11 高分辨率图标集的最大尺寸。
它之所以熵 7.96,是因为 PNG 的 IDAT chunk 本来就是用 zlib/DEFLATE 压缩过的。压缩数据接近随机是数学规律,不是加密。
假设完全错误。这个 blob 不是”伪装成图标的加密 payload”,它就是图标。
Oracle 用的是传统 ICO 多尺寸 BMP 集合(熵低),而 CloakBox 用了单张 256×256 PNG(熵高)。差别在于编码格式,不在于”是否加密”。
这是第一个”阴性结果”的价值,但它消除了一个本来会消耗大量后续资源的错误方向。
但同样的 PE 里还有另一个异常值浮出水面:
CloakBox 的 VBoxRT.dll 比 Oracle 原版大 233 KB。多出来一个 RCDATA 资源(ID=111),它是什么?
4. 第四回合:CA bundle 的尾巴藏着更大的秘密
4.1 提取与识别
同样的流程:提取、看 magic bytes。结果是明文可读的:
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Пн апр 21 20:46:07 2025 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt).
是一份 Mozilla 的根证书 bundle,里面有 150 张证书的完整 PEM 格式,任何做 TLS 客户端的软件都需要这样一份东西。
但有个异常,这份 bundle 的日期字符串是俄语 locale:
Пн = Понедельник (俄语"星期一"缩写)
апр = апрель (俄语"四月"缩写)
所以 "Пн апр 21 20:46:07 2025 GMT" = "Mon Apr 21 20:46:07 2025 GMT"
curl 项目官方(curl.se)发布的 cacert.pem 日期字符串总是英文的。俄语 locale 只可能来自本地重新生成。也就是说,这份 bundle 不是从 curl.se 直接下载的,而是在一台 locale = ru_RU 的机器上用 mk-ca-bundle.pl 脚本重新生成的。
这成为 Vektor 的第三条归因证据(前两条是 PDB 路径的 “Antidetect5” 和 Tyshchenko 的乌克兰签名)。
4.2 关键对比
我们把 CloakBox 的 VBoxRT.dll 和 Oracle 原版 VBoxRT.dll 做了完整资源对比:
| 资源 | Oracle VBoxRT.dll | CloakBox VBoxRT.dll |
|---|---|---|
| VERSION | ✅ 有 | ✅ 有 |
| MANIFEST | ✅ 有 | ✅ 有 |
| RCDATA/111 (CA bundle) | ❌ 不存在 | ✅ 233 KB,150 张证书 |
Oracle 根本没有这个资源,这是 CloakBox 新加的。
接着一个全二进制 grep:Oracle VBoxRT.dll 的整个 7.57 MB 里,-----BEGIN CERTIFICATE----- 出现次数 = 0;CloakBox 的对应文件里,出现 150 次,全部集中在这个新增资源里。
4.3 技术问题:为什么要内嵌 CA bundle?
Oracle 自己的 VBoxRT.dll 没有 CA bundle。Oracle 的 VBox 在需要 TLS 的时候(比如检查更新、下载 Guest Additions),默认使用 Windows 系统的证书库(通过 CertOpenSystemStoreW)。
那 CloakBox 为什么要在 DLL 里硬编码一份自己的 CA bundle?
从 TLS 工程角度看,内嵌 CA bundle 意味着客户端不信任本机的 Windows 系统证书库,只信任它自己打包的那一套。这是一种**”密钥锁定”式的 TLS 信任配置**(在商业软件里并不罕见,某些离线桌面应用、某些 IoT 设备都会用)。
具体到 CloakBox 的语境。这意味着任何在企业网络里部署了 SSL 拦截代理(BlueCoat、Zscaler 等,靠在 Windows 证书库里装企业根证书实现 MITM)的环境下,CloakBox 的这条 TLS 流量不会被代理的 MITM 解密,因为代理的企业根证书不在 Mozilla bundle 里。
4.4 能力 ≠ 行为
“CloakBox 内嵌了一份 CA bundle” 只是一种能力。要证明它是被实际使用的,而不是一段死代码残留,需要在反汇编层面找到对这个资源的引用。
目标:在 CloakBox 的 .text 段里找到 FindResourceA(hMod, MAKEINTRESOURCE(111), RT_RCDATA) 的调用点。
4.5 静态 IAT 反扫描
用 pefile 解析导入表,找到 4 个 Windows 资源加载 API 的 IAT slot 地址:
FindResourceA: VA = 0x18047c138
LoadResource: VA = 0x18047c120
LockResource: VA = 0x18047c128
SizeofResource: VA = 0x18047c130
然后扫 .text 段里所有 call qword ptr [rip+disp] 指令(字节模式 FF 15 xx xx xx xx)——只要目标 VA 等于上面 4 个 IAT slot 之一,就是一个调用点。
结果:每个 API 在整个 DLL 里只被调用了 1 次。而且 4 个调用点聚集在 42 字节的窗口内:
0x1801c721c call FindResourceA
0x1801c722b call LoadResource
0x1801c723a call SizeofResource
0x1801c7245 call LockResource
就在 FindResourceA 前 15 个字节:
0x1801c720d mov edx, 0x6F ; 0x6F = 111
111 被作为第二参数(lpName)传给 FindResourceA。那第三参数(lpType,资源类型)呢?紧接着:
0x1801c7218 lea r8d, [rdx - 0x65] ; 0x6F - 0x65 = 0x0A = 10 = RT_RCDATA
通过一个减法把 RT_RCDATA 常量算出来(可能是编译器优化,少写一条 mov)。
完整调用:FindResourceA(hMod, MAKEINTRESOURCE(111), RT_RCDATA)。
这就是加载 CA bundle 的位置。Oracle 原版的整个 VBoxRT.dll 根本没有 FindResourceA 这个导入——这是 CloakBox 新增的。
4.6 反汇编调用它的函数
反汇编 0x1801c7000 开始的函数FindResourceA 调用所在的函数。
前几十行在准备 HTTP 调用:
- • 获取一个字符串指针 → 构造 UUID 格式化
- • 设置
all_proxy环境变量 - • 设置 HTTP 头:
Content-Type: application/vnd.api+json、Accept: application/vnd.api+json
然后是一串 lea rdx/r8, [rip + disp],rip-相对的字符串引用。把每个 disp 计算出来,在 .rdata 段查对应的字符串:
0x1801c70c6 lea r8, "https://api.keygen.sh/v1/accounts/%s/licenses/actions/validate-key"
0x1801c70db lea rax, "f564ba37-00df-4c0e-8528-82c7b5213abc"
0x1801c70e5 lea r8, "{ \"meta\": { \"key\": \"%s\", \"scope\": { \"policy\": \"%s\", \"product\": \"685d3797-7a93-47e0-8f6d-069014980a08\"} } }"
0x1801c713e lea rdx, "all_proxy"
0x1801c71bb lea r8, "application/vnd.api+json"
0x1801c71cd lea rdx, "Content-Type"
这不是 TLS 验证函数,而是一个完整的 HTTP 客户端函数,它的目标是 api.keygen.sh。
到这里我们意识到:CloakBox 有硬编码的 license 校验机制。这是 Phase 2 时 D1″零外部网络外联”的表述需要被修正的地方。它确实对外发 HTTPS 请求,目标是合法的商业软件授权验证。
4.7 完整还原这个函数的伪代码
把反汇编完整分析下来之后,函数的结构:
// VBoxRT.dll 0x1801c7000 — keygen_http_client
int keygen_http_client(license_key, *out_error, *out_name, *out_expiry)
{
// 1. 初始化 HTTP 客户端(基于 libcurl)
http = RTHttpCreate();
// 2. 读 all_proxy 环境变量 → 设置 HTTP 代理
const char *proxy = getenv("all_proxy");
if (proxy) RTHttpSetProxyByUrl(http, proxy);
// 3. 加载内嵌的 Mozilla CA bundle
HRSRC hResource = FindResourceA(GetModuleHandleA("VBoxRT.dll"),
MAKEINTRESOURCE(111),
RT_RCDATA);
HGLOBAL hLoad = LoadResource(hMod, hResource);
DWORD size = SizeofResource(hMod, hResource);
void *bundle = LockResource(hLoad);
// 4. 把 bundle 设置为这个 HTTP 客户端的 CA 信任库
// 关键:这是"替换"而非"追加",不用 Windows 系统证书库
curl_easy_setopt(http, CURLOPT_CAINFO_BLOB, bundle);
// 5. 设置 HTTP 头
RTHttpSetHeaders(http, "Content-Type: application/vnd.api+json\r\n"
"Accept: application/vnd.api+json\r\n");
// 6. 构造 URL 和 body(JSON:API 规范)
// [静态分析时对 Account / Policy UUID 的具体归属做了推测,
// 后续动态分析修正了这一映射——见下节]
// 7. 发起 POST
RTHttpPostBinary(http, url, body, strlen(body), &response);
// 8. 解析 JSON 响应:meta.valid, meta.constant, data.attributes.name/expiry
RTJsonParseFromString(response, &root);
RTJsonValueQueryBooleanByName(root, "valid", &is_valid);
RTJsonValueQueryStringByName (root, "constant", &error_str);
return is_valid ? 0 : -9;
}
4.8 追溯调用者:CheckSerial
keygen_http_client 在整个 VBoxRT.dll 里只有一个调用者,位于地址 0x1801c7441,它所属的函数导出名是:
VBoxRT.dll 导出表:CheckSerial
就是它。Phase 2 Q3.5 报告里标记”值得关注但未深挖”的 CheckSerial 函数,其本质是 license 验证器。
CheckSerial 的代码结构:
- • 从调用者传入的缓冲区读 license key
- • 用
RTCString::strip()去空白 - • 调用
keygen_http_client发请求 - • 用 VBox 自家的
RTJson*系列函数解析响应 - • 提取
meta.valid、meta.constant(如"VALID"/"EXPIRED"/"NO_MACHINE")、data.attributes.name、data.attributes.expiry - • 返回给调用者
license 机制的代码底层至此完整浮现。
5. 第五回合:UI 层:Qt 元对象里的 “Fuck Menu”
5.1 UICommon.dll 的导入表
UICommon.dll 是 VBox 的 Qt UI 核心模块(与 Oracle 原版同名)。它从 VBoxRT.dll 导入了 23 个函数。引人注目的一个:
UICommon.dll 从 VBoxRT.dll 导入:
RTHttpCreate
RTHttpAddHeader
...(21 个 HTTP / Crypto 相关)
CheckSerial ← Oracle 原版 VBoxRT.dll 不导出
UI 层直接调用 CheckSerial,这说明这是用户在 UI 里输入 license key 后触发的验证路径。
5.2 UI 层的 CheckSerial 调用者
IAT 反扫描定位到 UICommon.dll 的 0x1800ba1b0 内部函数(非导出)。它的行为:
int UICommon_validate_license(license_key_qstring,
*out_error, *out_name, *out_expiry)
{
// 1. 从 Qt ExtraData 读一个配置 URL
QUrl proxy_url = read_from_qt_extradata("ProxyConfigUrl");
if (proxy_url.isValid()) {
// 2. 把 URL 塞到 all_proxy 环境变量
RTEnvSetEx("all_proxy", proxy_url.toUtf8().constData());
}
// 3. 读 Qt ExtraData 里的另一个 key:本地 license 缓存目录
QDir cache_dir = QDir(read_from_qt_extradata("LicenseDir"));
QString cache_file = cache_dir.absoluteFilePath("license.vbox-antidetect");
// ↑ 本地 license 缓存文件名
// 4. 转换 QString license_key → wchar_t*,调用 CheckSerial
int rc = VBoxRT::CheckSerial(license_key.unicode(),
&error, &name, &expiry);
// 5. 返回结果给上层 UI slot
if (rc < 0) {
show_error("UNKNOWN (%1)" % error);
}
return rc;
}
本地 license 缓存的文件名是 license.vbox-antidetect,这个命名再次呼应 Vektor 的 “Antidetect5” 内部产品代号。
5.3 Qt moc 枚举里的菜单
追 UICommon_validate_license 的调用者时,遇到一个问题。它没有静态调用者,它通过 Qt 的 signal/slot 机制(运行时动态绑定)被调用。
换条路径:扫 UICommon.dll 的所有 Qt 元对象枚举符号。UICommon.dll 导出 6684 个符号(典型的 Qt C++ 模板爆炸)。相关的两个枚举:
enum RuntimeMenuDevicesActionType_* // Oracle 标准设备菜单
enum RuntimeMenuFuckActionType_* // ⭐ CloakBox 新增的菜单
技术注:RuntimeMenuFuckActionType_* 是 Qt 元对象编译器(moc)生成的真实代码类名,由 Vektor 的源码在 .h 头文件中定义,不是我们的编辑用语。这是客观的代码事实。
22 个 action 枚举值:
_AntiOSActivateWindows (Windows 激活模拟 — slmgr 系列命令)
_AntiOSBrowserHardened (Edge / Chrome / Firefox 浏览器配置修改)
_GeolocationSettings (打开独立 GeolocationSettingsWindow 窗口)
_AntiOSAkamaiPumper (HOSTS 文件污染)
_AntiOSVPNHopTunerMinus1..10 (VPN TTL 调整)
_AntiOSVPNHopTunerMinusD (动态 VPN hop 调整)
_AntiOSIPv6Allow
_AntiOSIPv6Block (禁 IPv6 过渡协议 proto 41 / 43)
_AntiOSStrictFirewallOn
_AntiOSStrictFirewallOff (~20 条 netsh 规则)
_AntiOSTCPFingerprint1 ("TCP M1D Fingerprint spoof v.2")
_AntiOSTCPFingerprint2 ("TCP M1D1 Fingerprint spoof v.2.1")
... 及几个 sentinel 值
这 22 个 action 是 Premium 版解锁后的主菜单,FREE 版下大部分是灰色 setEnabled(false) 状态。
5.4 配套发现:9 个归因 URL
扫 UICommon.dll 的字符串表时还发现一组硬编码的 URL:
https://antidetect.online ← Vektor 主站
https://antidetect.wiki ← 文档站
https://detect.expert ← 姐妹站 + HWID 接收端点
https://t.me/antidetect ← Telegram 频道
https://www.patreon.com/vektort13 ← Patreon 订阅付费页
https://www.youtube.com/vektort13 ← YouTube 频道
https://update.virtualbox.org/query.php ← Oracle 继承(默认禁用)
https://download.virtualbox.org/virtualbox/ ← Oracle 继承
这些 URL 从归因角度补全了 Vektor T13 的商业运营拼图:Patreon 做订阅收费、YouTube + Telegram 做内容分发、antidetect.online/wiki/expert 是品牌矩阵、keygen.sh 做 DRM。这是一个完整商业化运营的产品供应商,不是地下工具或零星个人项目。
6. 第六回合:ISO 拆包:406 MB 的工具集
前面一直没深挖的是 CloakBox 内嵌的一张 “Guest Additions ISO”DriverUpdaterCD.iso。406 MB,约是 Oracle 原版 Guest Additions ISO(~100 MB)的 4 倍。
6.1 内容清单(按技术类别归类)
挂载后按作用类别分组:
A. 虚拟硬件驱动(给 Guest VM 安装的)
- •
OBSDriver/OBSDriver.sys— 虚拟摄像头驱动(Vektor 签)。基于 OBS Virtual Camera 的二次封装,通过 DirectShow 接口注入任意视频流 - •
FakeGPS/bcmgnssd.exe— 模拟 Broadcom GNSS 驱动(乌克兰 LLC 签)。实现 Windows Location Services 所期待的 GPS 数据接口 - •
Realtek/realtek.sys+realtekp.exe— 模拟 Realtek 声卡驱动(Vektor 签)。让 Guest VM 的设备管理器里显示一个声卡条目
B. GPU 栈代理(第三方商业产品)
- •
JuiceClient.zip(32 MB 压缩,160+ 文件) — Juice Labs Juicify,来自juicelabs.co的合法商业产品,原本用于云游戏 / 远程 GPU 渲染- • 5 个 shim DLL:
Juiced3d11.dll、Juiced3d12.dll、Juicedxgi.dll、Juiceopengl32.dll、Juicevulkan-1.dll - •
juicenvml.dll— 实现 NVIDIA NVML API 的替换层,允许返回任意 GPU 型号 / 驱动版本 - • 附带 PyTorch + YOLO/ResNet 模型文件(具体用途静态分析未完全确认)
- • 5 个 shim DLL:
- •
A5Toolkit.exe+A5Toolkit-amd64.exe+A5Toolkit-x86.exe— 第三方工具套件(Ryan Smith 签)
C. 网络代理 / 隧道(双用途合法工具)
- •
OpenVPN-2.5.6-I601-amd64.msi— 官方 OpenVPN - •
Proxifier/ProxifierSetup.exe— 商业 SOCKS 代理客户端(土耳其 İNİTEX Software 签) - •
tun2socks/*— 透明 TUN/TAP 流量路由(开源) - •
Throne/*(80 MB) — Matsuri / sing-box 的开源 GUI 代理客户端 - •
Wub/Wub.exe— Sordum 的 Windows Update 阻断器 - •
WebRTCMonitor.msi— WebRTC 泄漏阻断(Ryan Smith 签) - •
simplewall-3.8.2-setup.exe— 开源 WFP 前端防火墙 - •
ip-auditor-installer-1.2.11.exe(80 MB) — 第三方 IP / browser fingerprint 自检工具
D. 系统配置基线
- •
WinHard/Files/GPOs/DoD/— 57 条美国国防部 DoD STIG 组策略——Microsoft Office、IE、Edge、Chrome、Firefox、Adobe Acrobat 等的公开安全配置基线。这是美国 DISA 公开发布的政策模板 - •
WinHard/Files/Sysmon/Sysmon.exe— Microsoft Sysinternals Sysmon - •
WinHard/Files/LGPO/LGPO.exe— Microsoft 官方组策略工具 - •
akamai.txt— 715 行0.0.0.0 <domain>的 HOSTS 条目清单,覆盖 Akamai CDN 子域、广告服务器、多个”反欺诈检测 API”的域名
E. 字体库
- •
Fonts/F1 .. F5合计大约 30 个字体(Helvetica / Arial / SegoeUI / Tahoma / msjh / meiryo / SIMSUN / NotoSans / DejaVuSans …)。用于给 Guest VM 装”标准办公电脑字体集”,规避浏览器字体枚举指纹
F. 证书管理
- •
cert/VBoxCertUtil.exe+ 5 张 Vektor 自签根证书。实现可以把 Vektor 根证书装入 Guest VM 的信任库(让 Vektor 签名的 Guest 侧驱动可以加载)
G. Oracle 标准 Extension Pack
- •
Installer/Oracle_VirtualBox_Extension_Pack-7.2.4.vbox-extpack— Oracle 官方扩展包(revision 170995,未修改,Oracle 签名完好)
6.2 技术观察
这张 ISO 不是标准意义上的 Guest Additions,它是一套主题为”反 VM 识别 + 硬件指纹重映射”的工具集成包:涵盖虚拟硬件驱动(FakeGPS / FakeRealtek / OBSDriver)、GPU 代理栈(Juice Labs)、企业合规基线(DoD STIG GPO + Sysmon)、网络出口控制(OpenVPN / Proxifier / tun2socks)、隐私保护(WebRTCMonitor)、字体库(反指纹)等。
从技术工程角度看,这是一个完整度较高的反检测工具链,多层覆盖(硬件层 / 内核层 / 用户态 / 浏览器层 / 网络层)。
7. 第七回合:动态验证登场
静态分析到这里其实已经够写一篇审计报告了。但我们还有未闭合的问题:
- 1. CloakBox 真的在启动时就发 keygen.sh 心跳吗?或者只在用户点”激活”时才发?
- 2.
license.vbox-antidetect这个缓存文件到底落在哪个目录? - 3.
all_proxy环境变量默认是空的吗? - 4. Oracle
update.virtualbox.org默认被禁用了吗? - 5. 离线时 CloakBox 什么反应?
- 6. JuiceClient / Throne / A5Toolkit 运行时具体干啥?
这些需要动态行为观察,而静态分析的 host 不能跑 CloakBox(host-safe 原则)。
7.1 交接到另一个分析环境
静态分析完成后,整个项目被交接到另一个完全隔离的分析环境(独立的 Windows 11 VM,与静态分析机器之间 airgap)。移交材料包括:
- • 一份详细的 SOP:6 个目标问题(Q-D1 ~ Q-D6)+ 6 个分析场景(Scene A-F)
- • 一份 PowerShell 辅助脚本(一键采集 12 组数据:进程 / 注册表 / 防火墙规则 / 网络连接 / 文件系统 diff 等)
- • 明确不装 Fiddler / mitmproxy,因为 CloakBox 用了内嵌 Mozilla CA bundle 任何 MITM 都会被拒绝。
动态分析环节的产出是一组证据文件:pktmon 抓包、Frida hook 日志、注册表差异 dump、文件系统快照前后对比。
7.2 pktmon + Frida 的双重证据
动态分析环境使用 Windows 自带的 pktmon 抓包(Wireshark 在隔离 VM 上没装),并使用 Frida 钩取 RTHttpPerform 函数。
pktmon 结果(大约 5 分钟窗口,58,288 个包):
- • 12 次 DNS A-query
api.keygen.sh - • CNAME 链:
api.keygen.sh→behavioural-mandrill-rnma91gjivqr3isoab4hacmq.herokudns.com→ AWS Global Accelerator 4 个 IP(35.71.131.46 / 13.248.241.119 / 13.248.144.105 / 3.33.148.61) - • TCP 流到
35.71.131.46:443:6 次 SYN,完整 TLS 握手
Frida 钩到的完整 POST body:
URL: https://api.keygen.sh/v1/accounts/29755df0-2dab-4f4e-8ecb-6ff176fc1238/licenses/actions/validate-key
Method: POST (RTHTTPMETHOD_POST = 3)
Headers:
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
Body (175 字节):
{
"meta": {
"key": "495F36-BEB779-2119F3-EA6C02-DC0260-V3",
"scope": {
"policy": "f564ba37-00df-4c0e-8528-82c7b5213abc",
"product": "685d3797-7a93-47e0-8f6d-069014980a08"
}
}
}
7.3 两个技术观察
① license 校验在启动时触发
CloakBox 在每次 VirtualBox.exe 启动时都会自动发一次 keygen.sh POST,即使用户从未输入过任何 license key。body 里的 "495F36-BEB779-2119F3-EA6C02-DC0260-V3" 是硬编码在 VBoxRT.dll 里的 trial/default key。
从技术实现角度看,这是一种 “启动期授权状态刷新” 模式,常见于需要”进入产品主界面前就确定 entitlement 状态”的软件(因为决定哪些 Premium UI 元素 setEnabled(true))。类似机制在 Adobe Creative Cloud、JetBrains IDE、许多商业软件都有。
② 静态推测的 UUID 归属需要修正
静态分析时,我们在反汇编里看到 lea rax, "f564ba37-..." 紧跟着 URL 模板里的 %s,推测 Account UUID = f564ba37-...,Policy UUID = 29755df0-...。
Frida 实捕到的真实 POST 显示:
- • URL 路径里的
%s(Account UUID)填的是29755df0-... - • JSON body 的
scope.policy填的才是f564ba37-...
静态推测的顺序反了,原因是反汇编里那两个 UUID 字符串的 lea 指令出现顺序和它们在运行时请求里出现位置不对称。
这是静态分析的典型盲点之一。纯静态只能降低可能性空间,确切的运行时字段绑定需要动态验证。
7.4 其他 Q-D 问题的答案
Q-D2 license.vbox-antidetect 文件位置在哪里?动态分析环境扫了所有候选路径(%APPDATA%、%LOCALAPPDATA%、%USERPROFILE%\.VirtualBox 等),在未激活的 VM 上它不存在。这个文件只在首次成功激活后才落盘。最可能的路径是 %USERPROFILE%\.VirtualBox\license.vbox-antidetect(和 VirtualBox.xml 同目录),需要一次成功激活才能确认。
Q-D3 all_proxy 默认值是什么? 确认为空,Windows 注册表的 HKCU\Environment 和 HKLM\...\Session Manager\Environment 都没有 all_proxy / ALL_PROXY / HTTP_PROXY / HTTPS_PROXY。
Q-D4 update.virtualbox.org 是否被禁用? 确认禁用。首次启动写的 VirtualBox.xml 里有:
<Updates enabled="false">
<Host enabled="false" channel="1" checkFreqSec="86400"
repoUrl="https://update.virtualbox.org" checkCount="0"/>
</Updates>
双层禁用 + checkCount="0" 确认从未触发过 Oracle 版本查询。URL 字符串仍保留在 UICommon.dll(供用户手动触发),但不自动运行。
Q-D5 离线行为:从 UICommon.dll 的错误字符串看:
"Online license check failed, reason: %1.
All Antidetect features will be unavailable."
离线时:Antidetect 功能(22 个 Fuck menu action)全部锁定,但基础 VirtualBox 功能仍可用(创建 VM、启动 VM、挂 ISO 全正常)。这是graceful degradation 模式(优雅降级),不是回退到默认 key。
Q-D6 Juice / Throne / A5 / ip-auditor 已在第 6 节分析。
7.5 第三个静态分析误差(AtdtSup.sys )的归因
静态分析初期,对 AtdtSup.sys 的某些保护逻辑(特别是 ObRegisterCallbacks “evil handle” filtering)表述得过于偏向”Vektor 加的 anti-EDR 能力”。
深入对比 Oracle VirtualBox 的开源代码(src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp)后发现那段 handle 保护逻辑其实是 Oracle 原版 supdrvNtProtectVerifyProcess 其功能是给 Hyper-V 和 VMMR0 用的原生保护,不是 Vektor 加的。
内核层面 Vektor 真正改的只有:
- • 文件名(VBoxSup.sys → AtdtSup.sys)
- • 服务名(VBoxDrv → AtdtSup)
- • PDB 文件名(VBoxSup.pdb → AtdtSup.pdb,但 PDB 路径仍留
C:\Devel\Antidetect5\Personal\...) - • 嵌入的伪 NVIDIA 字符串
- • 签名(Vektor + WHQL 代替 Oracle)
导入 API 数量、IOCTL 代码、kernel hook 模式零变化。
从反编译的结果看来,这只是文件名改了而已,并没有改变内部逻辑。
第三部分:CloakBox 完整功能清单与技术实现详解
前面第二部分是叙事化的分析过程,这一部分是结构化的功能参考。如果你想快速查阅 “CloakBox 具体做了哪些事 / 每件事怎么实现”,可以直接从这里开始读。
本部分按 “4 层架构 × 全部功能模块” 组织,每个功能给出:它是什么(What)→ 它具体做什么(Do)→ 怎么实现的(How)。对于特定用途的功能(如摄像头 / GPS 伪造),只做技术实现描述,不讨论具体使用场景。
10. CloakBox 完整功能矩阵(鸟瞰)
按执行阶段划分的 4 层架构:
┌─────────────────────────────────────────────────────────────────────┐
│ L1 Host-side VM 配置层(VM 创建前,在宿主机执行) │
│ 由 Run-Outside-VM.ps1 + VBoxManage 命令实现 │
│ 作用对象:即将被启动的 .vbox 配置 │
├─────────────────────────────────────────────────────────────────────┤
│ L2 Hypervisor 层(VM 运行时,VMM 内部) │
│ 100% 使用 Oracle 原生机制,Vektor 未加自定义逻辑 │
├─────────────────────────────────────────────────────────────────────┤
│ L3 Guest OS 硬化层(VM 启动后,在 Guest 内执行) │
│ 由 Run-Inside-VM.ps1 + DriverUpdaterCD.iso 里的驱动和工具实现 │
├─────────────────────────────────────────────────────────────────────┤
│ L4 Host-side 侵入性操作层(Qt UI "Fuck Menu" 触发) │
│ 由嵌入 VirtualBox.exe .rdata 的 cmd/PowerShell 模板实现 │
└─────────────────────────────────────────────────────────────────────┘
具体功能分布:
| 层 | 功能模块 | 实现手段 | 作用目标 |
|---|---|---|---|
| L1 | CPU 仿冒 (6 profile) | VBoxManage modifyvm --cpuid-set |
虚拟机 guest CPUID 指令返回值 |
| L1 | SMBIOS / DMI 仿冒 (52 字段) | VBoxManage setextradata VBoxInternal/Devices/pcbios/0/Config/Dmi* |
虚拟 BIOS 向 guest 汇报的 DMI 表 |
| L1 | ACPI OEM ID 改写 | setextradata .../acpi/0/Config/AcpiOemId |
guest 读 ACPI FADT 表 |
| L1 | MAC OUI 替换 | UI 手动选 + VBoxManage modifyvm --macaddress |
虚拟网卡 MAC 前 3 字节 |
| L2 | TSC 计数器 | Oracle 原生 TSCTiedToExecution + RealTSCOffset |
RDTSC 指令返回值平滑 |
| L2 | CPUID 指令拦截 | Oracle VMM 的 CPUID vmexit handler | guest 的 CPUID 返回 L1 配置的值 |
| L3 | 注册表 BIOS 字段刷新 | Set-ItemProperty 到 HKLM\HARDWARE\DESCRIPTION\System\BIOS |
WMI Win32_BIOS / PowerShell Get-ComputerInfo 的返回 |
| L3 | 假 GPU 描述注入 | 写 HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-...}\0000 |
设备管理器 / DXGI 的 adapter description |
| L3 | PCI 设备 FriendlyName 清洗 | 扫 HKLM\SYSTEM\CurrentControlSet\Enum\PCI 下 VEN_80EE 改名 |
设备管理器显示(不改 Vendor ID 字节) |
| L3 | 假声卡驱动注册 | pnputil /add-driver realtek.inf /install |
Guest 设备管理器出现 “Realtek HD Audio” |
| L3 | 假 GPS 驱动注册 | pnputil 注册 bcmgnssd.inf(签名:Vektor LLC) |
Windows Location Services 有数据可读 |
| L3 | 虚拟摄像头驱动注册 | pnputil 注册 OBSDriver.inf |
DirectShow 设备枚举出现 “OBS Virtual Camera” |
| L3 | 字体库批量安装 | 拷贝 F1-F5 字体到 C:\Windows\Fonts + 注册 |
EnumFontFamiliesEx 返回的字体集扩充 |
| L3 | DoD STIG GPO 导入 | LGPO.exe /g <GPO_Backup> |
组策略 tattoo 到注册表 |
| L3 | Sysmon 安装与配置 | Sysmon64.exe -i <config.xml> |
生成 “像企业托管终端”的事件日志 |
| L3 | Windows Update 阻断 | Wub.exe 关闭 wuauserv 服务 + 改注册表 |
防止 Windows 更新覆盖反检测配置 |
| L4 | HOSTS 文件追加 | type akamai.txt >> %windir%\system32\drivers\etc\hosts |
715 行域名 null-routing |
| L4 | Windows Firewall 规则 | netsh advfirewall firewall add rule ... ~20 条 |
宿主机出站流量控制 |
| L4 | Windows 激活伪造 | slmgr.vbs /ckms /ipk <key> /ato 系列 |
宿主机显示”已激活” |
| L4 | 浏览器配置修改 | PS 脚本遍历 .lnk 快捷方式 + Firefox user.js + Chrome policies |
Edge/Chrome/Firefox 的启动参数和策略 |
| L4 | 安装 OpenVPN 并开机自启 | msiexec /i OpenVPN-*.msi /passive + 在 Startup 文件夹放 .lnk |
宿主机每次登录自动连 VPN |
| L4 | Chrome 扩展强装 | reg add HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist |
下次 Chrome 启动自动装指定扩展 |
| L4 | IPv6 过渡协议阻断 | netsh advfirewall 封 proto 41/43/44 |
防止 IPv6 泄漏真实 IPv4 |
| L4 | DNS-QUIC 强制降级 | netsh 封 UDP 80/443 |
HTTP/3 降级到 HTTP/2,TLS 流量可见 |
| L4 | TCP 指纹改写 | netsh int tcp set global ... + 内核驱动辅助 |
宿主机所有出站 TCP 流量指纹 |
| 授权 | keygen.sh license 校验 | CheckSerial → libcurl + 内嵌 CA → api.keygen.sh |
Premium 功能 entitlement |
| 授权 | HWID 绑定 | ssh-keygen -m PEM -t rsa -b 4096 → 公钥发 detect.expert |
机器指纹持久化 |
| 授权 | 启动心跳 | 每次 VirtualBox.exe 启动触发一次 CheckSerial |
即使用户未激活也”打卡” |
一共 ~30 个独立的技术功能模块。下面逐层展开实现细节。
11. L1 Host-side VM 配置层(反硬件指纹)
这一层的核心机制是 Oracle VirtualBox 自带的 VBoxManage modifyvm 和 VBoxManage setextradata 命令。Vektor 没有扩展 VBox 的底层,他们只是把一套”真实硬件 profile 的数据”喂给 Oracle 的现成机制。
这是 CloakBox 在技术实现上最低技术含量也是最有效的部分。对于 90% 的非专业 VM 检测代码(靠读 SMBIOS / CPUID 的),这套机制已经足够。
11.1 CPU 仿冒(6 个 profile)
What:让 guest OS 在执行 cpuid 指令时,看到一个真实桌面 CPU 的返回值,而不是 VirtualBox 默认的半透明状态。
Do:
- • 替换 CPUID leaf 0 的 vendor string(”GenuineIntel” / “AuthenticAMD”)
- • 替换 leaf 1 的 family/model/stepping + feature bits
- • 替换 leaf 0x80000002-4 的 CPU brand string(”Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz” 这种)
How:从 Run-Outside-VM.ps1 里摘一段真实代码(这是 Vektor 公开发布的 PowerShell,不涉及反向工程):
# Intel Core i7-6700K profile
VBoxManage modifyvm <VM> --cpuid-set 00000000 00000016 756E6547 6C65746E 49656E69
# Leaf 0 EAX(N) EBX ("Genu") ECX("ineI") EDX("ntel")
VBoxManage modifyvm <VM> --cpuid-set 00000001 000506E3 00100800 7FFAFBFF BFEBFBFF
# Leaf 1 EAX(FMS) EBX ECX EDX
VBoxManage modifyvm <VM> --cpuid-set 80000002 65746E49 2952286C 726F4320 4D542865
VBoxManage modifyvm <VM> --cpuid-set 80000003 37692029 3030372D 5043204B 40205055
VBoxManage modifyvm <VM> --cpuid-set 80000004 30302E34 007A4847 00000000 00000000
# ↑ ASCII 编码的 "Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz"
Oracle VMM 内部把这些配置注入到 VMX/SVM 的 CPUID vmexit handler。每次 guest 执行 cpuid 指令时,hypervisor 拦截并返回配置的值。Vektor 没改 hypervisor 代码,只改了配置。
内置的 6 个 profile:
- • i7-6700K(LGA1151, Skylake)
- • i7-7700K(LGA1151, Kaby Lake)
- • i7-9700K(LGA1151, Coffee Lake)
- • i9-9900K(LGA1151)
- • i7-3960X(LGA2011, Sandy Bridge-E)
- • Ryzen 7 1800X(AM4, Zen 1)
缺陷:
- • 不处理 CPUID leaf
0x40000000(hypervisor vendor string,VirtualBox 默认返回 “VBoxVBoxVBox”),这让稍高级的 VM 检测代码能直接读到 Oracle 字样 - • 不做 RDTSC 指令时间戳平滑,高灵敏度的时间窗检测仍可识别
11.2 SMBIOS / DMI 仿冒(52 字段)
What:让 guest OS 通过 WMI 或 DMI 查询时看到真实主板、BIOS、机箱、处理器的信息。
Do:覆盖 SMBIOS 的 6 大结构体(Type 0 BIOS / Type 1 System / Type 2 Baseboard / Type 3 Chassis / Type 4 Processor / Type 11 OEM Strings)的全部可查询字段。
How:
# MSI PRO B650-P WIFI MS-7D78 profile(AM5 主板)
# BIOS 信息
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor "American Megatrends Inc."
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion "1.B0"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate "03/28/2024"
# 主板信息
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBoardVendor "MSI"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct "PRO B650-P WIFI (MS-7D78)"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBoardVersion "1.0"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial "To be filled by O.E.M."
# 系统信息
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor "Micro-Star International Co., Ltd."
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct "MS-7D78"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid "deadbeef-dead-beef-dead-beefdeadbeef"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial "Default string"
# 机箱信息
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor "Default string"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiChassisType "3" # Desktop
# 处理器信息(与 CPU profile 联动)
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer "Intel Corporation"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion "Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiProcSocket "LGA1151"
VBoxManage setextradata <VM> VBoxInternal/Devices/pcbios/0/Config/DmiProcFamily "0xCD"
# ACPI OEM 标识(这两个字段 PC OEM 厂商都用 ALASKA/AMI)
VBoxManage setextradata <VM> VBoxInternal/Devices/acpi/0/Config/AcpiOemId "ALASKA"
VBoxManage setextradata <VM> VBoxInternal/Devices/acpi/0/Config/AcpiCreatorId "AMI"
# ... 另 35 个字段
Oracle VMM 启动 guest 时,把这些值填进 SMBIOS 表的相应结构体里,guest 用标准 SMBIOS API(GetSystemFirmwareTable)查询时就看到真实硬件配置。
两个预置 profile:
- • MSI PRO B650-P WIFI MS-7D78(AM5 + 7950X3D 方向)
- • ASUS ROG STRIX B650E-F GAMING WIFI(同 AM5 平台,Asus 口味)
最大技术缺陷是DmiSystemUuid 被硬编码为 deadbeef-dead-beef-dead-beefdeadbeef。这意味着所有 CloakBox 用户的这个字段都相同。任何 VM 检测系统只要把这个 UUID 加到黑名单,可以做到一网打尽。
11.3 MAC OUI 替换
What:让 guest 的虚拟网卡 MAC 地址前 3 字节(OUI,Organizationally Unique Identifier)显示为真实网络设备厂商,而不是 VirtualBox 默认的 08:00:27。
Do:VBoxManage modifyvm <VM> --macaddress1 <随机 MAC>
How:Run-Outside-VM.ps1 的 UI 让用户从 5 个真实 OUI 里选一个,然后随机后 3 字节:
107B44 = ASUSTeK
A8A159 = ASRock
448500 = Intel
D46E0E = TP-LINK
841B5E = Netgear
Guest 侧还有兜底机制:Run-Inside-VM.ps1::Set-NetAdapter -MacAddress 在 Guest OS 内也能改(覆盖注册表 NetworkAddress 键),以防 L1 的 modifyvm 因为某种原因失败。
12. L2 — Hypervisor 层(零修改)
What:Vektor 的 hypervisor 层代码(VMMR0.r0、AtdtDDR0.r0)100% 使用 Oracle 原版源码,除了改名没有任何逻辑修改。
如何证明:
- • 逐一对比 CloakBox 和 Oracle 的内核驱动 IMPORT 表:112 vs 112 API,零新增
- • 反汇编
supdrvNtProtectVerifyProcess(AtdtSup 里的一个 “evil handle filter” 函数) 对应 Oraclesrc/VBox/HostDrivers/Support/win/SUPDrv-win.cpp,代码完全一致。 - • PDB 路径泄露
C:\Devel\Antidetect5\Personal\VirtualBox\src\VBox\HostDrivers\Support\win\SUPDrv-win.cpp,Vektor 的源码目录结构和 Oracle 上游逐字符一致。
这意味着 CloakBox 的 hypervisor 安全边界完全等同于 Oracle VirtualBox 7.2.4。没有新增攻击面,也没有新增防御能力。
13. L3 — Guest OS 硬化层(虚拟机内伪装)
当 VM 开机、Guest Windows 启动后,Run-Inside-VM.ps1 脚本(由用户在 VM 内手动运行)会执行一系列 Guest 侧的伪装。
13.1 注册表 BIOS 字段刷新
Why needed:即使 L1 的 SMBIOS 伪造做得完美,Guest Windows 在安装阶段会把 BIOS 字段缓存到注册表。如果用户是从一个”原本是 VirtualBox”的 Guest 改造过来的,这些缓存仍会暴露 VirtualBox 痕迹。
Do:
# 改 BIOS 描述缓存
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "BIOSVendor" -Value "American Megatrends Inc."
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "BIOSVersion" -Value "1.B0"
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "SystemManufacturer" -Value "Micro-Star International Co., Ltd."
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "SystemProductName" -Value "MS-7D78"
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "BaseBoardManufacturer" -Value "MSI"
Set-ItemProperty "HKLM:\HARDWARE\DESCRIPTION\System\BIOS" -Name "BaseBoardProduct" -Value "PRO B650-P WIFI (MS-7D78)"
# 改系统信息
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation" -Name "BIOSVendor" -Value "AMI"
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation" -Name "SystemManufacturer" -Value "Micro-Star International Co., Ltd."
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation" -Name "SystemProductName" -Value "MS-7D78"
13.2 假 GPU 设备描述
What:让 Guest Windows 的设备管理器、DXGI 查询、WMI Win32_VideoController 显示一个真实 GPU(NVIDIA RTX 4090 / 3080 / GTX 1660 Super 三选一)。
Do:扫注册表里所有 display class 驱动,覆盖其描述字符串:
# 假装 RTX 4090
$gpuProfile = @{
DriverDesc = "NVIDIA GeForce RTX 4090"
ProviderName = "NVIDIA"
"HardwareInformation.AdapterString" = "NVIDIA GeForce RTX 4090"
"HardwareInformation.ChipType" = "NVIDIA GeForce RTX 4090"
Manufacturer = "NVIDIA"
}
$classKey = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000"
foreach ($k in $gpuProfile.Keys) { Set-ItemProperty -Path $classKey -Name $k -Value $gpuProfile[$k] }
# 扫所有 PCI 显卡子项把名字也改掉
Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Enum\PCI" -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.PSChildName -match "VEN_80EE") { # VirtualBox vendor ID
Set-ItemProperty $_.PSPath -Name "DeviceDesc" -Value "NVIDIA GeForce RTX 4090" -ErrorAction SilentlyContinue
Set-ItemProperty $_.PSPath -Name "FriendlyName" -Value "NVIDIA GeForce RTX 4090" -ErrorAction SilentlyContinue
}
}
重要提示:这只改注册表里的显示字段。真正的 DXGI_ADAPTER_DESC 返回值要靠 L3.7 的 Juice Labs 图形 shim 才能完整伪造。
13.3 PCI 设备 FriendlyName 清洗
扫 HKLM\SYSTEM\CurrentControlSet\Enum\PCI 下所有以已知 VM vendor 开头的子键(VEN_80EE = VBox, VEN_15AD = VMware, VEN_1234 = QEMU),把 FriendlyName 全部改成 “Standard PCI Device”。
技术缺陷:这只改 Windows 注册表层的显示名,检测工具只要直接读 PCI config space(通过 SetupAPI 或 DeviceIoControl 下发 IOCTL_BUS_QUERY_DEVICE_ID)就能读到真实的 VEN_80EE 字节,CloakBox 完全没覆盖这一层。
13.4 外设驱动批量安装
通过 pnputil 把 DriverUpdaterCD.iso 里的几个驱动装进 Guest:
假 Realtek 声卡:
pnputil /add-driver "V:\etc\Realtek\realtek.inf" /install
# 签名:Vektor T13 Technologies B.V.
# 作用:Guest 设备管理器出现 "Realtek High Definition Audio"
# 检测方意义:规避"VM 通常没有真实声卡"的启发式判断
假 GPS Broadcom GNSS:
pnputil /add-driver "V:\etc\FakeGPS\bcmgnssd\bcmgnssd.inf" /install
# 签名:VEKTOR T13 TECHNOLOGIES LLC (Kharkiv, UA)
# 作用:注册一个 NDIS miniport 或 WDF driver,实现 Broadcom GNSS 芯片的接口
# 技术实现:Windows Location Services 通过标准 GPS 接口查询当前坐标,driver 返回可配置值
# 检测方意义:让任何使用 Windows Location API 的软件看到"有 GPS 硬件"
虚拟摄像头 OBSDriver:
pnputil /add-driver "V:\etc\OBSDriver\OBSDriver.inf" /install
# 签名:Vektor T13 Technologies B.V.
# 内部实质:基于开源 OBS Virtual Camera 的二次封装
# 工作原理:
# 1. 注册 DirectShow filter
# 2. 实现 IPin / IMediaSource 接口
# 3. 从指定文件(AVI / MP4 / 图像序列)读取帧
# 4. 作为普通 webcam 暴露给 DirectShow 客户端
# 任何通过 DirectShow / Media Foundation 枚举摄像头的软件都会看到它
# 常见的用法场景:远程会议、视频录制软件、监控软件的视频输入替代
13.5 字体库扩充
What:给 Guest 装 30+ 真实办公环境常见字体(Helvetica / Arial / SegoeUI / Tahoma / msjh / meiryo / SIMSUN / NotoSans / DejaVuSans 等)。
Why:浏览器可以通过 CSS + JavaScript 枚举系统字体集(document.fonts.check() / CSS 盲测 + Canvas 测量宽度)。一个裸 VM 只有 Windows 默认字体,字体集指纹非常独特。装了标准办公字体集后,虚拟机检测软件看了字体指纹就会觉得是正常的 Windows 用户。
Do:拷贝 .ttf / .otf 文件到 C:\Windows\Fonts,然后注册:
Get-ChildItem "V:\etc\Fonts\F1\*.ttf" | ForEach-Object {
Copy-Item $_.FullName "C:\Windows\Fonts\"
$fontName = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" `
-Name "$fontName (TrueType)" -Value $_.Name
}
13.6 DoD STIG 组策略应用
What:应用美国国防部 (DISA) 公开发布的 57 条安全配置基线 GPO,覆盖 Office 2013/2016/2019、Adobe Acrobat、IE11、Chromium Edge、Chrome、Firefox、OneDrive、Windows Defender、Windows Firewall 等。
Do:用 Microsoft 官方工具 LGPO.exe:
& "V:\etc\WinHard\Files\LGPO\LGPO.exe" /g "V:\etc\WinHard\Files\GPOs\DoD\"
Why:让 Guest Windows 呈现出”企业托管终端”的技术特征。各种软件的配置被组策略锁定、Office 默认拒绝宏、IE 设为 11、Chrome 的 MachinePolicy 注册表里有大量键值,检测方的启发式判断”这台机器看起来像私人家用机”会被扰动。
注意:DoD STIG GPO 本身是微软和 DISA 合作公开发布的政策模板,任何企业都可以合法使用。这里涉及的不是非法 GPO,而是把企业合规模板用于”伪装企业环境”。
13.7 GPU 图形栈全栈替换(Juice Labs Juicify)
What:拦截 Guest 内所有 D3D11/D3D12/DXGI/OpenGL/Vulkan 的图形 API 调用,返回可配置的 GPU 元数据。
实现:5 个 shim DLL,以 DLL hijacking / SetDllDirectory 方式加载到需要伪装的进程里:
| Shim DLL | 拦截的 API 表面 |
|---|---|
Juiced3d11.dll |
Direct3D 11: D3D11CreateDevice、IDXGIAdapter::GetDesc、IDXGIDevice::GetAdapter |
Juiced3d12.dll |
Direct3D 12: D3D12CreateDevice、IDXGIFactory::EnumAdapters |
Juicedxgi.dll |
DXGI: 设备枚举、显示输出枚举、GetDesc3、GetLuid |
Juiceopengl32.dll |
OpenGL: glGetString(GL_RENDERER/GL_VENDOR/GL_VERSION) |
Juicevulkan-1.dll |
Vulkan: vkEnumeratePhysicalDevices、vkGetPhysicalDeviceProperties |
juicenvml.dll |
NVIDIA NVML: nvmlDeviceGetName、nvmlDeviceGetDriverVersion(让看起来”装了 NVIDIA 驱动”) |
How:
- 1. 拦截方式:shim DLL 导出与原始 DLL 同名同签名的函数
- 2. 加载方式:通过 DLL 搜索顺序(把 shim 放在进程目录,优先于
%SystemRoot%)或通过AppInit_DLLs注册表值 - 3. 内部实现:多数函数透传到真实 DLL,但把 GPU 型号 / 驱动版本 / adapter description 字段替换成配置值
覆盖的检测路径:
- • WebGL
navigator.gpu.renderer/WEBGL_debug_renderer_info - • Chrome/Edge 的
chrome://gpu报告 - • D3D11 应用的 adapter 查询
- • NVIDIA GeForce Experience / 驱动控制面板的查询
这是 CloakBox 技术实现上最高阶的一环,靠商业第三方产品(Juice Labs 原本做云游戏 / 远程 GPU 的)提供的图形栈代理能力。
14. L4 — Host-side 侵入性操作层(Qt “Fuck Menu” 22 action 详解)
这一层是 CloakBox 用户主动点击菜单时才执行的宿主机修改。22 个 action 逐一展开:
14.1 _AntiOSAkamaiPumper — HOSTS 文件批量污染
Do:把 ISO 里的 akamai.txt(715 行)追加到 Windows HOSTS。
How:
type %MY_VBOX_ADDITIONS%\etc\akamai.txt >> %windir%\system32\drivers\etc\hosts
akamai.txt 的内容是 0.0.0.0 <domain> 格式,覆盖:
- • Akamai CDN 多个子域(
*.akamaized.net、*.akamai.net) - • 广告/分析服务器(
smartadserver.com、doubleclick.net、appsflyer.com、tiktokv.com) - • 多个”反欺诈检测 API”(
fingerprint.com、pixelscan.net、privacy.net、browserscan.net、seon.io、sift.com) - • 部分社交媒体域名(
facebook.com、twitter.com、spotify.com)
作用机制:把这些域名解析到 0.0.0.0(或 127.0.0.1)→ 浏览器请求失败 → 网页里的 bot detection / fingerprinting 脚本加载失败 → 检测逻辑超时或走白名单路径。
副作用:这是宿主机全局的改动——影响所有浏览器、所有应用。
14.2 _AntiOSActivateWindows — Windows 激活状态操纵
Do:运行一系列 slmgr 命令,把宿主 Windows 的许可状态改成”已激活”。
How:
slmgr /ckms :: 清除 KMS 服务器信息
slmgr /upk :: 卸载当前 product key
slmgr /ipk <VLK> :: 装入一个 Volume License Key
slmgr /ato :: 触发激活
作用:让 winver / systeminfo / WMI 查询 Win32_ComputerSystem.OEMStringArray 返回”已激活”状态——规避”未激活 Windows 可能是 VM”的启发式。
14.3 _AntiOSBrowserHardened 浏览器配置修改
Do:多个子动作
- 1. 遍历所有可能路径的 Microsoft Edge
.lnk快捷方式,在 Target 的 Arguments 里追加:--test-type --enable-unsafe-webgpu --use-webgpu-adapter=d3d11作用:让 Edge 启动时进入”开发者测试模式”,绕过部分安全检查,允许 WebGPU 使用 D3D11 后端。 - 2. 从
https://dl.google.com/chrome/install/latest/chrome_installer.exe下载 Chrome 安装器到%TEMP%,静默安装。 - 3. 把 ISO 里的 Firefox
user.js覆盖到所有 Firefox profile:V:\etc\WinHard\Files\FireFox Configuration Files\defaults\pref\*.jsuser.js里配置禁用 WebRTC、禁用 WebGL 指纹采样、禁用多种隐私泄漏点。 - 4. 通过
reg add HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist强制安装指定 Chrome 扩展。
14.4 _AntiOSStrictFirewallOn / Off 约 20 条防火墙规则
On 操作:
:: 阻止特定 VBox 进程发 UDP / ICMP
netsh advfirewall firewall add rule name="Antidetect_BlockUDP_VirtualBoxVM" ^
program="C:\Program Files\Vektor T13\VirtualBox\VirtualBoxVM.exe" ^
protocol=udp dir=out action=block
netsh advfirewall firewall add rule name="Antidetect_BlockUDP_VBoxSVC" ... (同上模式)
netsh advfirewall firewall add rule name="Antidetect_BlockUDP_VBoxNetNAT" ... (同上模式)
:: 封 IPv6 过渡协议(6to4 / Teredo / ISATAP)—— 防止 IPv6 隧道泄漏真实 IPv4
netsh advfirewall firewall add rule name="IPv6_proto_41_out" protocol=41 dir=out action=block
netsh advfirewall firewall add rule name="IPv6_proto_43_out" protocol=43 dir=out action=block
netsh advfirewall firewall add rule name="IPv6_proto_44_out" protocol=44 dir=out action=block
netsh advfirewall firewall add rule name="IPv6_proto_58_out" protocol=58 dir=out action=block
:: 封 DNS-over-QUIC(强制 HTTP/3 降级为 HTTP/2 走 TCP)
netsh advfirewall firewall add rule name="DNS_QUIC_UDP_80" protocol=udp remoteport=80 dir=out action=block
netsh advfirewall firewall add rule name="DNS_QUIC_UDP_443" protocol=udp remoteport=443 dir=out action=block
Off 操作:逆向移除上面所有规则。
作用机制:
- • VBox 进程禁 UDP + ICMP:防止 VirtualBox 的内部 NAT 堆栈因 ICMP 时间戳差异被识别
- • 封 IPv6 proto:防止 Teredo / 6to4 这些 IPv6-over-IPv4 隧道暴露真实公网 IPv4
- • 封 QUIC:强制 HTTP/3 降级到 TCP TLS,让 VPN / 代理 / SSL 拦截代理能看到 TLS 流量(HTTP/3 用 UDP,很多代理不支持)
14.5 _AntiOSTCPFingerprint1 / 2 TCP 协议栈指纹改写
Do:修改宿主机 TCP/IP 协议栈的出站 SYN 包参数——MSS(Maximum Segment Size)、Window Scale factor、SACK 选项顺序、Timestamp 选项等。
How:主要通过 netsh int tcp set global + 注册表配置:
netsh int tcp set global rss=disabled
netsh int tcp set global autotuninglevel=normal
netsh int tcp set global ecncapability=disabled
netsh int tcp set global timestamps=disabled
netsh int tcp set supplemental template=Internet congestionprovider=cubic
:: ... 以及一组注册表配置改 TCP 选项顺序
作用机制:p0f / JA3 / JA4 这些被动 TCP 指纹工具依赖 SYN 包里的参数组合判断 OS 类型。TCP M1D profile 和 M1D1 profile 是两套预置的参数组合。让 VM 对外的 TCP 指纹看起来像特定的 Windows 10/11 桌面机,而不是 VBox 默认的 VirtualBox NAT 栈。
重要副作用:这是宿主机全局的改动,会影响所有出站 TCP 流量,而不只是 VM 流量。
14.6 _AntiOSVPNHopTunerMinus1 ~ Minus10 / MinusD
Do:修改出站 IP 包的 TTL(Time To Live)字段减 1 到减 10,或动态模式。
How:通过 netsh int ipv4 set global defaultcurhoplimit=<N> 或通过 WFP 驱动动态调整。
作用机制:通过 VPN 的流量 TTL 经过的”跳数”比物理机直连少,如果用户的 VPN 加 CloakBox 组合的 TTL 呈现”绕了一大圈”的特征就会被识别。调整 TTL 让流量看起来像直连(减少跳数数字)。
14.7 _GeolocationSettings 独立的地理位置设置窗口
这是一个独立的 Qt QDialog(GeolocationSettingsWindow 类),不是一个 cmd 模板。用户在这里配置:
- • 假 GPS 坐标(联动 FakeGPS daemon)
- • 浏览器
navigator.geolocation的返回值 - • Windows Location Services 返回的纬度 / 经度
14.8 _AntiOSIPv6Allow / Block
只做 IPv6 协议启用 / 禁用的开关——修改 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents。
14.9 其他若干 action
其余几个 action(Change Windows install date / Install Realtek driver spoof / Block NetBIOS / Disable System Restore / Tweak DNS UDP size / OpenVPN 持久化 / Random Chrome Extension install / Toast notification / Initial WinHard bootstrap / Deny Device install 等)在 ISO 的 action_cmd_templates 里。每一条都是一段注册表写入或 cmd 调用,逻辑清晰、实现简单。
其中一个值得单独说明的:
OpenVPN 启动项持久化(FREE 版也可用):
start /wait msiexec.exe /i "%MY_VBOX_ADDITIONS%\Tools\OpenVPN-*-amd64.msi" /passive
mkdir "%userprofile%\OpenVPN\config"
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut(
'%appdata%\Microsoft\Windows\Start Menu\Programs\Startup\openvpn.lnk');
$s.TargetPath='%1\openvpn-gui.exe';
$s.Arguments='--connect 0001.ovpn';
$s.WorkingDirectory='%1';
$s.Save()"
作用:装完 OpenVPN 后,在 Startup 文件夹创建快捷方式——每次 Windows 登录都自动连 0001.ovpn 配置的 VPN,即使用户没开 CloakBox。这个快捷方式需要用户手动删除才会取消。
15. 授权与激活机制(完整协议详解)
15.1 keygen.sh JSON:API 协议
What:CloakBox 用 JSON:API 规范(application/vnd.api+json Content-Type 的公开规范,类似 REST 但结构化程度更高)与 keygen.sh 交互。
请求:
POST /v1/accounts/29755df0-2dab-4f4e-8ecb-6ff176fc1238/licenses/actions/validate-key HTTP/1.1
Host: api.keygen.sh
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"meta": {
"key": "<用户的 license key 或硬编码 trial key>",
"scope": {
"policy": "f564ba37-00df-4c0e-8528-82c7b5213abc", ← FREE Education Policy
"product": "685d3797-7a93-47e0-8f6d-069014980a08" ← CloakBox Product
}
}
}
响应(来自 keygen.sh 官方文档的标准结构):
{
"meta": {
"valid": true,
"constant": "VALID", // or NOT_FOUND / EXPIRED / SUSPENDED / NO_MACHINE / ...
"detail": "is valid"
},
"data": {
"id": "<license UUID>",
"type": "licenses",
"attributes": {
"name": "<license holder name>",
"expiry": "2026-12-31T23:59:59.999Z",
"status": "ACTIVE",
"uses": 42,
"maxUses": 100,
"entitlements": ["BASIC", "PREMIUM_ANTIOS", ...]
}
}
}
15.2 HWID 生成(机器指纹)
首次启动时:
ssh-keygen.exe -m PEM -t rsa -b 4096 -N "" -f %USERPROFILE%\.ssh\id_rsa
生成 RSA-4096 密钥对:
- • 私钥:
%USERPROFILE%\.ssh\id_rsa(PEM 格式) - • 公钥:
%USERPROFILE%\.ssh\id_rsa.pub
公钥随后上传到 detect.expert(Vektor 的 HWID 服务器),在 keygen.sh 后台绑定到 license。
工程规范性问题:
- •
%USERPROFILE%\.ssh\是**用户标准 SSH 目录**。如果用户已有 Git SSH 登录配置或者保存了 SSH Key,CloakBox 可能**覆盖**用户原有的id_rsa - • 商业软件的 HWID 密钥应该存储在应用自己的目录(如
%LOCALAPPDATA%\CloakBox\)
15.3 启动心跳机制
每次 VirtualBox.exe 启动:
- 1. 主窗口构造前调用
UICommon::VBoxLicenseViewer::check() - 2. 触发
VBoxRT.dll!CheckSerial - 3. 发 POST 请求到 keygen.sh
- 4. 解析响应里的
meta.valid和data.attributes.entitlements - 5. 根据 entitlements,调 Qt 的
setEnabled(true/false)决定哪些 Fuck Menu action 可点
关键行为:即使用户未输入 license key,CloakBox 也会用硬编码的 trial key 495F36-BEB779-2119F3-EA6C02-DC0260-V3 发请求,保证 keygen.sh 后台能看到这次启动。
这当于 Adobe Creative Cloud 的未登录打开、JetBrains IDE 的 evaluation 模式,这些软件也有类似的”匿名启动状态刷新”机制。这是 DRM 的标准做法,不是恶意行为,但是 EULA 可能没显式披露。
15.4 离线行为
keygen.sh 无法连接时:
UICommon.dll 错误字符串:
"Online license check failed, reason: %1.
All Antidetect features will be unavailable."
行为:
- • 红字错误对话框
- • 22 个 Fuck Menu action 全部
setEnabled(false) - • 基础 VirtualBox 功能(创建 / 启动 / 管理 VM)仍然可用
这是 graceful degradation 模式,不回退到默认 key、不试图激活、不阻止启动。
16. 内核驱动(AtdtSup.sys)详解
16.1 驱动本身
- • 文件名:
AtdtSup.sys(原名VBoxSup.sys,来自 Oracle) - • 签名:Vektor T13 Technologies B.V.(EV 代码签名)+ 曾经有效的 Microsoft WHQL 签名(2024-10-10 → 2025-10-08,已过期)
- • 服务名:
AtdtSup,显示名 “ATDT Core Service” - • 启动类型:
Service_Start = SERVICE_SYSTEM_START(Windows 引导阶段加载,早于用户登录) - • 设备对象:
\Device\VBoxDrv(Vektor 没改这个。Oracle 源码硬编码,换名代价过高)
16.2 WHQL 签名路径
WHQL(Windows Hardware Quality Labs)是 Microsoft 的硬件兼容性认证项目。一个驱动要获得 WHQL 签名需要满足下面的条件。
- 1. 开发方申请 Microsoft Hardware Developer 账号(需公司注册、需身份验证)
- 2. 用自己的 EV 代码签名证书给驱动签名
- 3. 提交到 Microsoft Partner Center 的 HLK(Hardware Lab Kit)测试流程
- 4. 通过测试后,Microsoft 用自己的 CA(Microsoft Windows Hardware Compatibility Publisher)追加一个签名
对 CloakBox 的意义:WHQL 签名让 AtdtSup.sys 能在开启 Secure Boot 的 Windows 11 上加载。普通 EV 代码签名在严格的 Secure Boot 策略下不够,WHQL 是另一道保障。
当前状态:WHQL 证书已于 2025-10-08 过期。CloakBox 在新装的 Windows 11 Secure Boot 严格模式下可能无法加载内核驱动,除非 Vektor 提交新一轮 WHQL。
16.3 驱动行为(等同 Oracle SUPDrv)
由于驱动代码逐字节等同 Oracle 的 SUPDrv,它的行为就是 Oracle VirtualBox 内核支持层的全部功能:
- • 管理 VM 实例(创建 / 销毁 hypervisor context)
- • 提供 ring-0 / ring-3 的 IPC
- • 处理 VMX / SVM 的开关
- •
ObRegisterCallbacks保护进程 handle(防止恶意软件干扰 VBoxVMM 进程——这是防御功能) - • 内存页管理(给 guest 分配物理页)
没有加的:键盘记录、屏幕截取、网络 sniff、文件扫描、注册表持久化(除了标准服务注册)、rootkit 行为。
17. 完整的安装后系统改动清单
装完 CloakBox 之后,宿主机的持久化改动:
新增文件:
- •
C:\Program Files\Vektor T13\VirtualBox\全套(大约 50 个 PE 文件) - •
C:\Windows\System32\drivers\AtdtSup.sys - •
%USERPROFILE%\.VirtualBox\VirtualBox.xml(VBox 全局配置) - • (激活后)
%USERPROFILE%\.VirtualBox\license.vbox-antidetect - •
%USERPROFILE%\.ssh\id_rsa+id_rsa.pub(如果.ssh目录原本不存在,会创建)
新增服务:
- •
AtdtSup(内核驱动,System-start) - •
VBoxSDS(COM 服务,Oracle 原版继承)
新增注册表:
- •
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{562E2E1E-5C55-4502-B230-738EE218D753}(MSI 卸载条目) - •
HKLM\SYSTEM\CurrentControlSet\Services\AtdtSup - •
HKLM\SYSTEM\CurrentControlSet\Services\VBoxSDS
未做的持久化(明确排除):
- • 没有 Startup 文件夹或 Run 键的开机自启(CloakBox 本身不自启——除非用户点了某些 Fuck Menu action 装了 OpenVPN)
- • 没有 WMI 事件订阅
- • 没有计划任务
- • 没有 BHO / Windows Shell 扩展
- • 没有 DLL hijacking AppInit_DLLs
18. 对于使用者而言安装了会怎么样?
以上技术细节可以归纳为一个更直观的 “用户视角清单”:
装 CloakBox 之后,默认只做这些事(不点任何 Fuck Menu):
- • 每次启动 VirtualBox.exe → 向
api.keygen.sh发一次 HTTPS POST(~200 ms) - • 生成一个 RSA-4096 HWID 密钥放
~/.ssh/id_rsa(可能覆盖你的 Git SSH 密钥) - • 装一个 System-start 内核驱动(持续在内存里)
如果你点了 Fuck Menu 里的 action后,每一个 action 都是永久的宿主机改动。没有自动撤销,典型后果是:
- • 点 Akamai Pumper → Windows HOSTS 永久追加 715 行,所有浏览器的网页加载会受影响,不限于 VM
- • 点 Strict Firewall On → Windows Firewall 永久加 ~20 条规则,宿主机所有出站 UDP 被限制
- • 点 Activate Windows → 宿主机的 Windows product key 被换,可能触发微软的 license compliance 检查
- • 点 Browser Hardened → Edge 桌面快捷方式的启动参数被永久改 + Firefox prefs 被覆盖 + 可能下载并安装 Chrome
- • 点 OpenVPN 持久化 → 以后每次 Windows 登录都自动连 VPN,在你发现之前可能持续几周
- • 点 TCP Fingerprint → 宿主机所有出站 TCP 连接的指纹被改,包括你的日常浏览、视频会议、游戏
第四部分:技术指纹总结与行业分类
五维技术评估矩阵
业界对这类软件的技术分类通常采用 5 个维度:
| 维度 | 评估 | 严重度 | 证据 |
|---|---|---|---|
| D1 外部网络外联 | 存在(商业 DRM 心跳) | 低 | api.keygen.sh 每次启动发 POST;detect.expert 辅助端点;Oracle update.virtualbox.org 默认禁用 |
| D2 用户数据采集 | 无 | — | 无键盘 / 屏幕截取;无浏览器 / 钱包扫描;ssh-keygen 生成的 HWID RSA-4096 密钥存在 %USERPROFILE%\.ssh\(属工程规范性问题) |
| D3 持久化系统组件 | 部分 | 中 | AtdtSup.sys 内核驱动 System-start 启动;Vektor 自签根证书可选注入 Guest 信任库 |
| D4 核心系统组件修改 | 无 | — | 无 SSDT / IDT / PatchGuard 触摸;内核驱动内部逻辑 = Oracle SUPDrv 未改 |
| D5 反主机级监控能力 | 部分 | 中 | 内嵌 Mozilla CA bundle 走自己的 TLS 信任链;集成 Sysmon overlay;集成 Wub Windows Update 阻断器 |
技术分类(行业标准术语)
CloakBox 的技术组合匹配以下行业分类:
- • Anti-Detection Virtualization(反识别虚拟化)— 产品品类定位
- • Commercial DRM-enabled software(带商业授权 DRM 的软件)— 授权模式
- • Virtualization stack fork(虚拟化栈分叉)— 源码工程类型
- • Bundled toolkit distribution(捆绑工具集分发)— 发行形态
CloakBox 的反检测覆盖度自评
基于 “理想 anti-detect 产品” 为 100% 的量表:
| 反检测层级 | 覆盖度 | 技术实现质量 |
|---|---|---|
| CPU / 硬件指令层 | ⬛⬛⬜⬜⬜ | 用 Oracle 原生 --cpuid-set 做 6 个 profile,无 hypervisor leaf、无 TSC 平滑 |
| SMBIOS / DMI | ⬛⬛⬛⬛⬜ | 52 字段覆盖,2 个主板 profile;缺陷:所有用户共享同一个 DmiSystemUuid |
| ACPI | ⬛⬛⬜⬜⬜ | 只改 AcpiOemId + AcpiCreatorId 两字段 |
| PCI Vendor/Device ID | ⬜⬜⬜⬜⬜ | 完全未改,VBox 虚拟设备的 0x80EE Vendor ID 仍暴露 |
| 内核驱动 / 设备对象 | ⬛⬛⬜⬜⬜ | 文件名改了,但 \Device\VBoxDrv 硬编码未改 |
| 进程 / 文件 | ⬛⬛⬛⬜⬜ | VBoxNetLwf.sys / VBoxNetAdp6.sys 未改名 |
| 注册表 | ⬛⬛⬛⬜⬜ | Guest 侧刷设备描述字段;不删服务键 |
| MAC / 网络 | ⬛⬛⬛⬛⬜ | 5 个真实厂商 OUI 人工选 |
| TCP 指纹 | ⬛⬛⬛⬜⬜ | 2 个 profile |
| GPU / WebGL / Canvas | ⬛⬛⬛⬛⬛ | 优 — Juice Labs 商业产品,5 个 shim DLL 覆盖 D3D11/12/DXGI/OpenGL/Vulkan/NVML |
| 摄像头 | ⬛⬛⬛⬛⬜ | OBS 虚拟摄像头驱动持久化 |
| GPS | ⬛⬛⬛⬛⬜ | FakeGPS 伪装 Broadcom GNSS daemon |
| 字体指纹 | ⬛⬛⬛⬜⬜ | 静态 F1-F5 字体集 |
| 企业终端合规姿态 | ⬛⬛⬛⬛⬛ | 优 — 57 条 DoD STIG GPO |
总体覆盖度:⬛⬛⬛⬜⬜ — 中上。实现层总体偏 low-tech(大量依赖 Oracle 原生机制 + setextradata),但覆盖面较完整。
技术层面的识别特征(留给同行参考)
对一款 Windows 终端,以下技术指纹组合可用于识别 CloakBox 存在:
文件系统层:
- •
C:\Program Files\Vektor T13\VirtualBox\目录存在 - •
C:\Windows\System32\drivers\AtdtSup.sys存在 - •
%USERPROFILE%\.VirtualBox\license.vbox-antidetect存在(激活后) - •
DriverUpdaterCD.iso文件存在于安装目录 - • MSI Product Code
{562E2E1E-5C55-4502-B230-738EE218D753}已注册
签名特征:
- • Thumbprint
6FE993BC8729F84CF60684BB1D8BD1CC3CB2D004(Vektor BV) - • 签发 CA:GoGetSSL G4 CS RSA4096 SHA256 2022 CA-1
- • AtdtSup.sys 的 WHQL 签名(Microsoft Windows Hardware Compatibility Publisher,2024-10-10 → 2025-10-08,已过期)
进程 / 服务:
- • 服务
AtdtSup(DisplayName “ATDT Core Service”) - • 进程
VirtualBoxVM.exe加载了来自C:\Program Files\Vektor T13\的VBoxRT.dll
网络行为:
- • TLS SNI =
api.keygen.sh+ 源进程VirtualBox.exe/VirtualBoxVM.exe/VBoxHeadless.exe组合 - • DNS 查询
detect.expert(HWID 辅助端点) - • 注意:单独的
api.keygen.sh是合法 SaaS,不构成识别信号——必须结合源进程才有辨识度
Guest VM 层(如果 Guest 已装了 CloakBox 的 DriverUpdaterCD.iso):
- • 注册表
HKLM\SYSTEM\CurrentControlSet\Services\OBSDriver - • 注册表
HKLM\SYSTEM\CurrentControlSet\Services\bcmgnssd - • 进程
bcmgnssd.exe - • 虚拟摄像头设备 “OBS Virtual Camera” 与真实摄像头硬件并存
VM 本身被识别为 CloakBox 的技术特征:
- • CPU vendor / brand string 与 motherboard profile 不一致(比如 Intel CPU brand 但 AMD 相关 CPUID feature bits 异常)
- •
DmiSystemUuid=deadbeef-dead-beef-dead-beefdeadbeef(CloakBox 硬编码默认值,用户间共享) - • Guest 看不到 “VBoxGuestAdditions” 但能看到 CloakBox 捆绑的非标组件(OBSDriver / FakeGPS 等)
- • CPUID leaf
0x40000000可能返回 Oracle 的 hypervisor 字符串(CloakBox 未处理此 leaf)
YARA 规则示例
rule CloakBox_ANTIDETECT5_Installation {
meta:
description = "Detection for CloakBox ANTIDETECT 5 FREE Education - public binary fingerprints"
author = "public technical analysis"
reference = "https://example.com/cloakbox-analysis"
severity = "informational"
strings:
$ss1 = "api.keygen.sh" ascii
$ss2 = "685d3797-7a93-47e0-8f6d-069014980a08" ascii
$ss3 = "29755df0-2dab-4f4e-8ecb-6ff176fc1238" ascii
$ss4 = "f564ba37-00df-4c0e-8528-82c7b5213abc" ascii
$ss5 = "license.vbox-antidetect" ascii
$ss6 = "Vektor T13" ascii
$ss7 = "Antidetect5" ascii
$ss8 = "AtdtSup" ascii
$ss9 = "application/vnd.api+json" ascii
condition:
3 of them
}
关键声明:此 YARA 规则基于公开二进制的字符串特征,用于识别 CloakBox 存在,不用于任何其他目的。
第五部分:研究方法论
工具链
全部使用合法、开源的分析工具:
- •
pefile(Python) — PE 结构解析 - •
capstone(Python) — x86_64 反汇编 - •
rizin— 二进制分析框架 - • 自写的 Python 脚本(IAT caller scan 等) — 利用
pefile+struct.unpack做反向 IAT 扫描 - • Sysinternals
Autoruns/Sysmon/Procmon— 系统行为监控 - •
Wireshark/ Windows 原生pktmon— 网络抓包 - •
Frida— 动态二进制插桩 - •
7-Zip/lessmsi— 压缩包与 MSI 提取
分析时间线
- 1. Phase 1 表面审计:签名验证、字符串提取、初步技术分类(~4 小时)
- 2. Phase 2 六问深度:Q1-Q6 + 完整子报告集(~12 小时)
- 3. Phase 2.1 .rsrc 深挖:假设证伪(PNG + CA bundle)(~1.5 小时)
- 4. Phase 2.2 CA bundle 使用路径:发现 keygen.sh 调用链(~2 小时)
- 5. Phase 2.3 UICommon + ISO 目录 + 技术识别规则 + 交接 SOP(~2 小时)
- 6. Phase 3 动态验证(隔离 VM 内执行)+ 整合勘误(~6 小时)
第六部分:法律与研究声明
关于本文
- • 本文基于合法获取的 CloakBox 公开发行版所做的静态逆向工程 + 隔离虚拟机动态验证分析
- • 目的是安全研究、技术文档化、行业知识分享
- • 所引用的 UUID、域名、证书指纹全部来源于公开二进制的字符串表,且已被 VirusTotal、社区论坛、Vektor 自家网站等公开来源记录
关于 CloakBox
- • Vektor T13 Technologies B.V. 是荷兰商会真实注册的合法商业实体
- • 其代码签名证书是商业 CA(GoGetSSL)合法签发的 EV 证书
- • 其授权服务器(keygen.sh)是美国合法 SaaS(被 Cursor、Figma、BoltAI 等大量正规软件使用)
- • 其 Patreon 页面、YouTube 频道、Telegram 群是公开运营的
CloakBox 是一款技术实现扎实的商业反检测虚拟化产品。本文对它的描述严格限于二进制可观察的事实,不涉及对产品用途、市场定位、商业模式的价值判断。读者对产品的使用决策由读者根据自身法律环境自行做出,与本文作者无关。
利益声明
本文作者与 Vektor T13、Juice Labs、Keygen.sh、任何虚拟化产品厂商、任何竞品均无任何商业、雇佣、或顾问关系。本文不接受任何形式的赞助。
尾声
CloakBox 在技术层面是一份完整度较高的工程产物:
- • 源码级 fork Oracle VirtualBox,维护独立分支
- • 6 个 CPU profile 覆盖主流桌面 CPU
- • 52 个 SMBIOS 字段 + 2 个主板 profile 的字段集
- • 22 个 UI action 对应 22 种反检测配置预设
- • 57 条 DoD STIG 组策略 + Juice Labs 图形 shim + OBS 虚拟摄像头 + FakeGPS 的多层整合
- • 完整的商业 DRM 集成(keygen.sh JSON:API)
- • WHQL 签发的内核驱动路径
从纯技术工程视角看,它展示了商业反检测虚拟化产品的工程化程度可以达到的水平。对于做 virtualization introspection、anti-sandbox research、enterprise EDR 识别方法研究的同行,它是一份具有参考价值的样本。
至于具体的使用场景判断,那不是本文讨论的范围。
本文写作日期:2026 年 4 月
CloakBox 分析版本:ANTIDETECT 5 FREE Education Edition r.2.2.0 7.2.4
若你看到的版本号不同,部分技术细节可能已变化
欢迎在评论区里讨论技术问题
