TK X-Gnarly:基于 AI 辅助的 JSVMP 纯算还原方案
前言:攻防背景与环境
- 目标参数:
X-Gnarly(设备指纹/环境检测)。 - 分析版本:
Webmssdk版本:2.0.0.447- 内部版本:
5.1.3 - 文件地址:
webmssdk.js
- 难点痛点:
JSVMP虚拟机保护(几百个解释器函数,堆栈晦涩)。- 高频的混淆与复杂的控制流扁平化。
AST没有实战水平,日志量大很难理清思路。
第一部分:逆向工程方法论
- 核心思路:不硬啃
VMP指令,采用日志挂钩(Logging)+ 结果倒推(Backtracking)策略。 - 新颖手段:利用大模型(
Cursor/ChatGPT)进行算法特征识别。
第二部分:X-Gnarly 逆向实战
2.1 定位与插桩
- 寻找入口:通过搜索字符串
X-Gnarly快速定位n.u.o[971]。 - 跟栈进行插桩:
-
Prompt 调优与人工兜底 面对几十个插桩点,AI 生成插桩日志,导致 VMP 执行流崩溃。这可能是 Prompt 约束不够严格所致。最终的解决方案是人工手写效率太低,全 AI 生成风险太高。
面对 JSVMP 的复杂混淆,硬啃 AST 效率极低。本文提出一种新思路:利用日志插桩提取原始表达式,借助 AI 的推理引擎进行逻辑重组。
标准的
JSVMP格式,单步调试,找apply、call和运算进行插桩
-
2.2 日志分析 - 倒推分析法(由果索因)
-
324 位字符串生成逻辑: 乱码观察拼接结构:
K + 193 位乱码 - 上 + 48 乱码 + 193 乱码 - 下。 乱码通过Base64自定义码表 (u09tbS3UvgDEe6r-ZVMXzLpsAohTn7mdINQlW412GqBjfYiyk8JORCF5/xKHwacP=) 生成 324 位字符串。 将日志全盘喂给 AI 可以直接生成js代码。


