TK X-Gnarly:基于 AI 辅助的 JSVMP 纯算还原方案
前言:攻防背景与环境
本次分析的目标是 X-Gnarly 设备指纹与环境检测模块。涉及版本信息如下:
Webmssdk版本:2.0.0.447- 内部版本:
5.1.3 - 核心文件:
webmssdk.js
主要难点在于 JSVMP 虚拟机保护,包含数百个解释器函数,堆栈结构晦涩难懂。此外,代码存在高频混淆与控制流扁平化,传统的 AST 分析实战效果不佳,日志量过大导致思路难以理清。
逆向工程方法论
核心策略是不硬啃 VMP 指令,而是采用日志挂钩(Logging)+ 结果倒推(Backtracking)。同时引入**大模型(如 Cursor/ChatGPT)**进行算法特征识别,辅助逻辑重组。
逆向实战步骤
1. 定位与插桩
首先通过搜索字符串 X-Gnarly 快速定位入口点 n.u.o[971]。
在标准的 JSVMP 格式下,单步调试是关键。我们需要找到 apply、call 以及运算指令进行插桩。面对几十个插桩点,初期尝试完全依赖 AI 生成插桩日志,结果导致 VMP 执行流崩溃,这通常是因为 Prompt 约束不够严格。最终方案采取'人工兜底 + AI 辅助'的模式,既保证效率又避免流程错误。
2. 日志分析与倒推
采用由果索因的方法,从输出结果反推输入逻辑。
324 位字符串生成逻辑
观察日志发现,最终的 324 位字符串是由多层数据拼接而成。乱码结构呈现为:K + 193 位乱码 - 上 + 48 乱码 + 193 乱码 - 下。其中 48 位乱码、12 位数组和轮询次数在日志中表现明显。
算法特征识别
将关键日志片段投喂给 AI,成功识别出 ChaCha 算法特征,确认为魔改版本的 ChaCha 算法。
乱码结构拆解
乱码通过自定义 Base64 码表生成。码表示例:u09tbS3UvgDEe6r-ZVMXzLpsAohTn7mdINQlW412GqBjfYiyk8JORCF5/xKHwacP=。将全盘日志投喂给 AI,可以直接生成对应的 JS 还原代码。


