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]。

-
跟栈进行插桩:
-
标准的
JSVMP格式,单步调试,找apply、call和运算进行插桩

-
面对 JSVMP 的复杂混淆,硬啃 AST 效率极低。本文提出一种新思路:利用日志插桩提取原始表达式,借助 AI 的推理引擎进行逻辑重组。

-
Prompt 调优与人工兜底
面对几十个插桩点,AI生成插桩日志,导致 VMP 执行流崩溃。这可能是 Prompt 约束不够严格所致。最终的解决方案是人工手写效率太低,全 AI 生成风险太高。
-
2.2 日志分析-倒推分析法(由果索因)
-
324位字符串生成逻辑:
-
乱码通过
Base64自定义码表 (u09tbS3UvgDEe6r-ZVMXzLpsAohTn7mdINQlW412GqBjfYiyk8JORCF5/xKHwacP=)生成324位字符串。
将日志全盘喂给AI可以直接生成js代码。

-
乱码观察拼接结构:
K + 193位乱码-上 + 48乱码 + 193乱码-下
-
-
第二层 193位乱码分析:
-
193位乱码由 16位数组 + 轮询次数+ 193位数组 通过计算生成
-
将日志投喂给 AI,识别出 ChaCha 算法特征,魔改的chacha算法。


-
通过日志观察 48位乱码 、12位数组 和 轮询次数是日志输出很接近。将日志喂给AI,直接生成代码。
-

-
第一层 193位乱码分析:
-
观察日志是由193位乱码是由一个16位的对象生成

-
把日志喂给AI,输出JS代码

-
16位对象根据key的打乱的顺序推断,这里纯在打乱算法,把日志喂给AI,同上
-
-
16位的对象生成:
- 同上,日志喂给AI
结语
- 总结:JSVMP 逆向从“人肉硬跟”转变为“日志分析+AI识别”的趋势。
- 免责声明:技术研究用途,请勿用于非法业务。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/m0_46265880/article/details/157696744



