从古法审计到AI时代:jar-analyzer 的开发史
原创 4ra1n 2026-03-21 21:14 陕西

从手工审计到 AI 驱动,jar-analyzer 五年进化,MCP 与 SKILL 再到 Claude Code 插件
0x01 诞生
在 2022 年底,我正在做 Java 漏洞分析和挖掘工作,常常需要翻阅庞大的 jar 文件,在密密麻麻的类与方法中寻找 sink/gadget 等信息,我想做一个分析 jar 文件的 GUI 工具。
市面上的工具总感觉过于笨重,于是,一个朴素的念头萌生了:做一个能快速定位 sink 点、追踪方法调用链的 GUI 工具。
这个想法很快落地。2022 年 12 月 3 日 jar-analyzer v1 问世,发布的第一个截图是从 log4j2 的 jar 包中精准找到 Context.lookup

jar-analyzer-v1 链接:
https://github.com/jar-analyzer/jar-analyzer-v1-gui0x02 重构 v2
v1 版本虽然解决了问题,但有着致命的短板:所有数据全部存储在内存的 HashMap 中,没有持久化。面对大型项目,内存告急;每次重启,一切归零,必须重新分析。我意识到,如果想让这个工具真正用起来,必须从根本上解决数据管理的问题。
2023 年 10 月 jar-analyzer v2 重构正式启动。核心决策只有一个:用 SQLite 替代内存存储,让所有分析结果持久化、可复用。同时,我重新设计了整套 GUI,力求在功能完备与视觉美感之间取得平衡。

链接:
https://github.com/jar-analyzer/jar-analyzer此后,项目进入快车道。至今已发布 59 个版本,聚集了 10 余位贡献者,从一个小小的个人项目,成长为社区驱动的开源工具。

0x03 高级功能
在社区多位师傅的建议和直接贡献下,v2 逐渐羽翼丰满。
DFS 调用链追踪 —— 指定 sink 或 source,深度优先搜索自动遍历所有方法调用路径,将漏洞的"来龙去脉"一目了然地呈现出来。

污点分析 —— 从零手搓了一套最朴素但有效的模拟 JVM 污点分析实现,验证 DFS 推导出的调用链是否真实可达,帮助分析者快速排除误报。

从手动翻阅到自动追踪,从猜测到验证,分析效率实现了质的飞跃。
0x04 用户的认可
在四五年的持续迭代中,jar-analyzer 逐渐积累了一批忠实的使用者。他们中有安全研究员,也有一线攻防从业者;有用它挖到 0day 的,也有在甲方团队中推广使用的。

0x05 MCP
2025 年,AI 能力以前所未有的速度渗透到安全领域。一位师傅提出了一个前瞻性的想法:能否将 jar-analyzer 的分析能力通过 API 暴露出来,借助 MCP(Model Context Protocol)让 AI 大模型直接参与 Java 代码的漏洞分析?
这个想法很快变为现实。jar-analyzer 内置的 HTTP API 配合 MCP 服务端,让 AI 能够自主查询类信息、追踪方法调用关系、定位 sink 与 source,将人工分析经验转化为 AI 可理解的结构化数据。

说明文档:https://github.com/jar-analyzer/jar-analyzer/blob/master/mcp-doc/README.md
0x06 n8n 编排
如果说 MCP 打开了 AI 分析的大门,那么 n8n 工作流编排则补全了自动化分析的最后一块拼图。
另一位师傅基于 n8n 构建了一套完整的 AI 编排流程:首先自动统计所有 Controller 等入口信息,然后通过 MCP 逐层深入方法调用关系,最终自动生成漏洞分析报告。
说明文档:
https://github.com/jar-analyzer/jar-analyzer/tree/master/n8n-doc


从源码到报告,全程无需人工干预。

0x07 SKILL
随着 Claude Code 的崛起,SKILL 成为了 AI 辅助开发的新范式。0cat 师傅为 jar-analyzer 编写了专属 SKILL,并在实际业务中投入使用,实现了与 Claude Code 的深度集成。
AI 不再只是回答问题,而是能够主动调用 jar-analyzer 的能力,在代码审计的每一步都给出精准的辅助。
说明文档:
https://github.com/jar-analyzer/jar-analyzer/tree/master/skills

0x08 提取引擎
然而,SKILL 模式仍有门槛:用户需要先用 GUI 构建数据库,再配置 MCP 进行反编译查询,链路较长,配置复杂。
能否将这些能力浓缩为一个极简的 CLI 工具,让 AI 一行命令就能完成所有准备?
jar-analyzer-engine 由此诞生。它剥离了 v2 的 GUI 外壳,将核心分析引擎独立出来,以命令行工具的形式呈现:
https://github.com/jar-analyzer/jar-analyzer-engine
输入 (JAR)│▼┌──────────────────────────────┐│ 阶段 0: JAR 解压与过滤 │ 解压文件,应用黑白名单│ (0% - 15%) │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 1: 类发现 (Discovery) │ 提取类/方法/字段/注解信息│ (15% - 30%) │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 2: 方法调用分析 │ 分析方法体中的调用指令│ (30% - 40%) │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 3: 继承关系构建 │ 构建继承树 + 方法实现映射│ (40% - 70%) [标准模式] │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 4: 字符串常量提取 │ 提取代码和注解中的字符串│ (70% - 80%) [标准模式] │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 5: Spring 分析 │ 识别 Controller/Mapping 参数│ (80% - 90%) [标准模式] │└──────────────┬───────────────┘▼┌──────────────────────────────┐│ 阶段 6: JavaWeb 组件识别 │ 识别 Servlet/Filter/Listener│ [标准模式] │└──────────────┬───────────────┘▼SQLite 数据库
用户可以使用简单的一行命令构建数据库:
java -jar jar-analyzer-engine.jar --jar app.jar需要反编译直接调用 engine cli 即可
--decompile com.example.MyClass通过 engine 的方式,不少用户在实际项目中成功挖掘到了漏洞。

0x09 Claude Code 插件
既然 engine 的能力已经如此强大,那何不更进一步,封装一个基础的 Claude Code 插件?
jar-analyzer-claude 应运而生。普通用户可以拿来即用,进阶用户可以基于源码进行定制。
为了方便用户,我直接做成了 claude marketplace 市场,通过 /plugin 添加市场,直接安装插件,而无需下载 SKILL 后手动复制等方式生效。
https://github.com/jar-analyzer/jar-analyzer-claude


通过 /build-db 构建数据库,通过 /do-analyze 进阶分析

项目规定了,优先使用 sqlite3 查询,如果找不到命令再尝试 python 脚本;不可以直接反编译看代码,需要根据 sql 查询到的信息,有理有据的情况下,再进行反编译以确认真实的代码和数据流等情况。
0x10 总结
从 2022 年 12 月到 2026 年 3 月,四五年的光阴,jar-analyzer 走过了一条清晰而坚定的路:
从一个功能粗糙的个人小工具,到 GUI 精致、体验流畅的 v2 版本;从纯手工分析,到 DFS 自动追踪与污点分析验证,表达式搜索,各种细节优化手段。截至目前,总下载量 20000+ 次。

再到 AI 时代到来后,从 MCP 到 n8n 工作流编排,从 SKILL 到 Claude Code 官方插件 —— 每一步都在降低 Java 漏洞分析的门槛,让更多人能够高效地发现安全问题。
感谢所有贡献者和使用者。如果你正在做 Java 安全分析,希望 jar-analyzer 能成为你手中的利器。