manjustice/datadome-vm-internals
GitHub: manjustice/datadome-vm-internals
该项目通过逆向分析 DataDome 的自定义虚拟机与字节码,揭示了浏览器指纹混淆与加密的实现机制。
Stars: 1 | Forks: 0
# DataDome VM
DataDome 在其捆绑包中嵌入了一个自定义虚拟机,以隐藏其实际操作。我对此感到好奇并将其拆解分析。将此分享给任何对此类逆向工程谜题感兴趣的人。
DataDome 向浏览器发送一个高度混淆的 JavaScript 捆绑包。在其中,有一个自定义虚拟机——他们将实际的指纹识别逻辑编译成一种私有字节码格式,然后在运行时在该虚拟机中执行此分析。
本仓库不包含任何 DataDome 代码——仅包含我自己的分析和工具。
**请在使用前阅读底部的说明。**
## 有趣的内部机制
一旦你能读懂字节码,一些事情就会凸显出来。
**字符串加密。** 所有字符串都存储在一个位于字节码顶部的单一加密 blob 中。每个字符串在运行时使用一个针对每项条目的 XOR 密钥与表头中 baked 的种子进行解码。因此,即使读取原始字节也无法得知任何信息,除非知道该种子。
**到处都是 S-box 表。** 字节码的前 ~20KB 几乎完全由 `PUSH_N_IMM` + `ARRAY_FROM_STACK` 序列构成,用于构建 256 字节的查找表。这些是 S-box 表,很可能是用于自定义密码或 AES 轮运算,在发送前对收集的信号进行哈希处理。
**解码字符串后可看到的指纹信号:**
- Canvas:绘制一个矩形并读取像素值
- WebGL:完整的着色器源代码以明文形式存在
- 计时:基本上包含完整的导航时间线
- 内存:当前 JS 堆内存使用量
- 屏幕:尺寸和像素比例
- DOM 技巧:注入隐藏元素以测量字体渲染和布局
- 自动化检测:经典的 webdriver 检测
## 说明
该项目纯粹是为了满足对自定义虚拟机混淆在实际中如何运作的好奇心。这是一个逆向工程的学习练习,并非用于绕过机器人检测的工具。
你如何使用这些知识取决于你自己。
标签:C2日志可视化, Canvas 渲染, DOM解析, JavaScript 混淆, S-box, SEO 逆向, WebGL, XOR 加密, 云资产清单, 代码分析, 信号哈希, 内存探测, 凭证管理, 前端安全, 反调试, 子域名暴力破解, 字节码, 屏幕信息, 指纹识别, 数据可视化, 数据隐私, 浏览器取证, 浏览器指纹, 生成式AI安全, 自动化检测, 自定义 VM, 虚拟机, 逆向工程