找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4577

积分

0

好友

639

主题
发表于 2 小时前 | 查看: 4| 回复: 0

在2022年底,当我专注于Java漏洞分析与挖掘工作时,常常需要翻阅庞大的JAR文件,在密密麻麻的类与方法中定位诸如Sink点、Gadget链等信息。市面上现有的工具感觉过于笨重,于是一个朴素的想法诞生了:打造一款能够快速定位Sink点、追踪方法调用链的图形化工具。

这个想法很快付诸实践。2022年12月3日,jar-analyzer v1版本发布。发布的第一张截图展示的是从log4j2的JAR包中,精准找到了JndiLookup.lookup方法。

Jar Analyzer v1版本界面截图,展示了从Log4j JAR中查找JndiLookup.lookup方法的过程

jar-analyzer-v1链接

https://github.com/jar-analyzer/jar-analyzer-v1-gui

重构之路:v2与持久化存储

v1版本虽然解决了部分问题,但存在一个致命短板:所有分析数据都存储在内存的HashMap中,缺乏持久化。面对大型项目时,内存压力巨大;每次重启工具,所有工作都得推倒重来。我意识到,要让这个工具真正可用,必须从根本上解决数据管理问题。

于是在2023年10月,jar-analyzer v2的重构正式启动。核心决策只有一个:用SQLite数据库全面替代内存存储,让所有分析结果持久化、可复用。同时,我重新设计了整个GUI界面,力求在功能完备与视觉体验之间找到平衡点。

Jar Analyzer v2图形界面,展示了在IDE中分析Spring Boot控制器

v2项目链接

https://github.com/jar-analyzer/jar-analyzer

此后,项目发展进入快车道。迄今为止已发布超过50个版本,汇聚了十余位贡献者,从一个个人小工具,成长为一个由社区驱动的开源实战项目。

Jar Analyzer的GitHub发布页面与贡献者列表

进阶功能:从自动化追踪到污点验证

在社区多位师傅的建议和直接贡献下,v2版本的功能日益丰富。

DFS调用链追踪 —— 用户可以指定Sink点或Source点,工具通过深度优先搜索算法自动遍历所有可能的方法调用路径,将漏洞的“来龙去脉”清晰地呈现出来。

DFS漏洞利用链分析配置界面

污点分析 —— 为了实现更精确的分析,我从零开始实现了一套朴素但有效的模拟JVM污点分析引擎。它可以验证DFS推导出的调用链是否真实可达,帮助分析人员快速排除误报,这在Java安全分析中至关重要。

污点分析过程与结果详情展示

从手动翻阅代码到自动化路径追踪,从依赖猜测到数据流验证,代码审计的效率实现了质的飞跃。

社区的认可与真实案例

在持续的迭代中,jar-analyzer逐渐积累了一批忠实的用户。他们中有专业的安全研究员,也有一线的攻防工程师;有人用它挖到了高价值的0day漏洞,也有团队在内部推广使用。

来自安全研究员和工程师们的用户评价

拥抱AI:MCP协议与自动化分析

2025年,AI能力以前所未有的速度渗透到安全领域。一位师傅提出了一个前瞻性的想法:能否将jar-analyzer的分析能力通过API暴露出来,并借助MCP(Model Context Protocol)协议,让AI大模型直接参与Java代码的漏洞分析?

这个想法很快变成了现实。jar-analyzer内置的HTTP API配合MCP服务端,使得AI能够自主查询类信息、追踪方法调用关系、定位Sink与Source点,将人工分析经验转化为AI可理解的结构化数据。

AI通过MCP协议分析Groovy控制器漏洞的对话截图

说明文档https://github.com/jar-analyzer/jar-analyzer/blob/master/mcp-doc/README.md

工作流编排:n8n实现全自动审计

如果说MCP打开了AI分析的大门,那么n8n工作流编排则补全了自动化分析的最后一环。另一位师傅基于n8n构建了一套完整的AI辅助分析流程:首先自动收集所有Controller、Servlet等入口信息,然后通过MCP接口逐层深入分析方法的调用关系,最终自动生成结构化的漏洞分析报告。

说明文档https://github.com/jar-analyzer/jar-analyzer/tree/master/n8n-doc

n8n工作流编排示意图,集成了获取各类Web组件信息
AI代理分析架构流程图

从源代码到漏洞报告,整个过程实现了高度自动化。

AI生成的漏洞分析仪表盘报告

技能化与引擎化:降低使用门槛

随着Claude Code的兴起,SKILL成为了AI辅助开发的新范式。0cat师傅为jar-analyzer编写了专属SKILL,并在实际业务中投入使用,实现了与Claude Code的深度集成。AI不再只是被动回答问题,而是能够主动调用jar-analyzer的分析能力,在代码审计的每一步提供精准辅助。

SKILL说明文档https://github.com/jar-analyzer/jar-analyzer/tree/master/skills

jar-audit-agent技能审计结果截图

然而,SKILL模式仍有门槛:用户需要先用GUI构建数据库,再配置MCP服务,链路较长。能否将这些能力浓缩为一个极简的CLI工具?

jar-analyzer-engine由此诞生。它剥离了GUI外壳,将核心分析引擎独立为命令行工具,其处理流程如下:

输入 (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这种轻量化的方式,不少用户在实际项目中成功挖掘到了漏洞。

用户讨论engine轻量化和漏洞挖掘的聊天截图

生态整合:Claude Code官方插件

既然engine已经具备了强大而独立的能力,何不更进一步,将其封装成一个即插即用的Claude Code插件?jar-analyzer-claude应运而生。为了方便用户,我将其做成了Claude官方的插件市场(marketplace),用户只需一行命令添加市场,即可直接安装,无需手动下载和配置SKILL。

项目链接https://github.com/jar-analyzer/jar-analyzer-claude

Claude Code插件安装说明

在Claude Code中使用插件构建数据库

通过 /build-db 命令构建数据库,再通过 /do-analyze 进行进阶分析。项目规范要求,优先使用sqlite3命令查询数据库;只有在基于SQL查询信息进行有理有据的分析后,必要时才进行反编译来确认真实的代码逻辑和数据流。

通过sqlite3命令查询数据库中的Sink点信息

总结与展望

从2022年12月到2026年初,近四年的时光里,jar-analyzer走出了一条清晰的技术演进路径:从一个功能简单的个人工具,演进为GUI完善、体验流畅的v2版本;从纯手工分析,发展到支持DFS自动追踪、污点分析验证和表达式搜索的自动化工具。

jar-analyzer各版本下载量统计

进入AI时代后,它又快速适配,从MCP协议到n8n工作流编排,从专属SKILL到Claude Code官方插件——每一步都在致力于降低Java安全分析的门槛,让漏洞挖掘变得更高效、更智能。截至目前,工具累计下载量已超过20000次。

感谢所有贡献者和使用者的支持。如果你正在从事Java安全分析或代码审计工作,希望jar-analyzer及其生态能够成为你得力的助手。技术社区的交流与碰撞总能催生更好的工具与实践,欢迎大家在云栈社区的相关板块分享你的使用经验或想法。




上一篇:虚假新闻检测技术综述:从特征工程到深度模型与经典论文解读
下一篇:构建可靠AI Agent:从技能设计到系统工程的实战框架
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-25 02:35 , Processed in 0.510242 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表