DataDome 在其捆绑包中嵌入了一个自定义虚拟机,以隐藏他们实际做的事情。我对此感到好奇,并拆解了它。在这里分享给任何对同类逆向工程谜题感兴趣的人。
DataDome 向你的浏览器发送一个高度混淆的 JavaScript 捆绑包。其中包含一个自定义虚拟机——他们将实际的指纹识别逻辑编译成私有的字节码格式,然后在运行时在该虚拟机内执行。这是对撰写本文时最新版本的分析。
本仓库不包含任何 DataDome 的代码——只有我自己的分析和工具。
使用前请阅读底部的说明。
一旦你能读取字节码,有几样东西会特别引人注目。
字符串加密。 所有字符串都存储在一个位于字节码顶部的加密块中。每个字符串在运行时使用每项的 XOR 密钥结合表格头部中内置的种子进行解码。因此,如果不了解种子,即使读取原始字节你也一无所知。
S-box 表无处不在。 前约 20KB 的字节码几乎全部是 PUSH_N_IMM + ARRAY_FROM_STACK 序列,用于构建 256 字节的查找表。这些是 S 盒,可能用于自定义密码或 AES 轮次,用来在发送前对收集到的信号进行哈希处理。
解码字符串后实际可见的指纹识别信号:
本项目纯粹是为了满足对自定义虚拟机混淆在实践中如何工作的好奇心。这是一个逆向工程的学习练习,而不是绕过机器人检测的工具。
你如何处理这些知识,完全取决于你自己。