Jar Analyzer
- 一个
JAR
包分析工具 - 完善美观的
GUI
支持(现代化Java GUI
界面,可拖拽,明暗双主题,十种风格) - 基础分析(支持
Jar/War/Classes
输入,支持多文件,支持嵌套FatJar
) - 黑白名单配置(构建数据库和搜索功能都支持黑白名单过滤,支持精确类名和包名过滤)
- 反编译(内置
Fernflower
改进版本双击反编译,使用JavaParser
精确定位方法位置) - 方法调用关系搜索(构建方法调用关系数据库,可搜方法定义与方法引用,支持精确和模糊搜索)
- 方法调用链
DFS
算法分析(支持 正向/反向 调用链分析,基于DFS
算法的深度调用链追踪) - 字符串搜索(搜索
LDC
指令,支持模糊搜索和精确搜索,可定位具体方法,联动调用进行分析) Java Web
组件入口分析(Java Servlet/Filter
组件分析,Spring
入口信息一键分析)CFG
程序分析(方法内部控制流可视化,基本块划分与展示,异常处理流程分析)JVM
栈帧分析(局部变量表与操作数栈状态跟踪,运行时数据流静态分析)- 自定义表达式搜索(基于
SpEL
的多种语法组合搜索,用于搜索漏洞Gadget
等) - 常见安全分析功能(支持简单的
SCA
分析,敏感信息泄漏分析,可能的gadget
分析) - 应急响应分析功能(一键提取序列化数据中的恶意
class
反编译,一键提取BCEL
代码) - 测试功能:不同于
IDEA
等工具的源码级调试,实现了字节码级别的单步动态调试(仅初步实现)
首页
静态分析 spring / java web
项目
一键快速搜索(自从 4.0
版本后支持通过配置动态生成 GUI
按钮)
例如一个 Runtime.exec
的动态规则(配好后直接生成按钮和搜索逻辑)
Runtime.exec:
- !!me.n1ar4.jar.analyzer.engine.SearchCondition
className: java/lang/Runtime
methodName: exec
methodDesc: null
自从 5.3
版本后支持深度优先搜索算法自动分析漏洞链(重要功能:多位师傅挖到 0 day)
自从 5.5
版本后默认了常见的漏洞 sink
点用于分析漏洞链
通过 agent
分析 tomcat
自从 5.0
版本后大幅改进了表达式搜索功能
从 4.0
版本后支持信息泄露检查(部分正则来源于 HaE 项目)
从 4.0
版本开始可以和 IDEA
一样快捷键两次 shift
调出 Lucene
全局搜索
自从 4.2
版本后支持黑暗主题切换
Jar Analyzer
的用途
- 场景01:从大量
JAR
中分析某个方法在哪个JAR
里定义(精确到具体类具体方法) - 场景02:从大量
JAR
中分析哪里调用了Runtime.exec
方法(精确到具体类具体方法) - 场景03:从大量
JAR
中分析字符串${jndi
出现在哪些方法(精确到具体类具体方法) - 场景04:从大量
JAR
中分析有哪些Spring Controller/Mapping
信息(精确到具体类具体方法) - 场景05:从大量
JAR
中分析是否存在Apache Log4j2
漏洞(匹配所有CVE
漏洞) - 场景06:从大量
JAR
中分析是否有使用FASTJSON 47/68/80
等存在漏洞的版本 - 场景07:从大量
JAR
中分析各种常见的Java
安全漏洞调用出现在哪些方法 - 场景08:你需要深入地分析某个方法中
JVM
指令调用的传参(带有图形界面) - 场景09:你需要深入地分析某个方法中
JVM
指令和栈帧的状态(带有图形界面) - 场景10:你需要深入地分析某个方法的
Control Flow Graph
(带有图形界面) - 场景11:你有一个
Tomcat
需要远程分析其中的Servlet/Filter/Listener
信息 - 场景12:你有一个序列化数据里面包含了恶意的
Class
字节码需要一键提取分析 - 场景13:你有一个
BCEL
格式的字节码需要一键反编译代码分析 - 场景14:你有一大堆
Jar
文件或目录需要全部批量反编译导出代码 - 场景15:从大量
JAR
中分析IP
地址/手机号/邮箱等各种信息泄露 - 测试功能:字节码指令级别的调试
Jar Analyzer
是一个分析 Jar
文件的 GUI
工具:
- 支持大
Jar
以及批量Jars
分析 - 方便地搜索方法之间的调用关系
- 分析
LDC
指令定位Jar
中的字符串 - 一键分析
Spring Controller/Mapping
- 对于方法字节码和指令的高级分析
- 一键反编译,优化对内部类的处理
- 一键生成方法的
CFG
分析结果 - 一键生成方法的
Stack Frame
分析结果 - 远程分析
Tomcat
中的Servlet
等组件 - 自定义
SQL
语句进行高级分析 - 自从
2.14
版本之后支持了全屏显示的功能 - 自从
2.15
版本后支持代码区域字符串搜索功能 - 自从
2.15
版本后支持通过HTTP
分析远程文件 - 自从
2.16
版本后支持一键导出反编译JAVA
代码 - 自从
2.17
版本后支持字节码指令级别的远程调试(参考 示例图) - 自从
2.17
版本后支持从序列化数据一键提取恶意JAVA
代码(参考 示例图) - 自从
2.18
版本后支持HTTP API
查询接口(参考 示例图) - 自从
2.19
版本后支持启动时配置10
种UI
主题(LookAndFeel
) - 自从
2.19
版本后支持实时的CPU
占用和内存的折线图展示(参考 示例图) - 自从
2.20
版本后支持选中字符串全局高亮显示(参考 示例图) - 自从
2.21
版本后支持分析配置类和包名的白名单 - 自从
2.21
版本后支持左侧文件数使用CTRL+F
打开类名搜索(参考 示例图) - 自从
2.21
版本后新增内置开启ZGC
的JRE 21
环境(仅包含核心功能) - 自从
2.23
版本后新增SCA
分析(参考 示例图1 示例图2) - 自从
2.24
版本后改善SCA
分析逻辑(显著提高扫描效率) - 自从
3.0
版本后支持生成HTML
方法调用图(参考 示例图) - 自从
3.0
版本后支持代码区域选中字符串右键搜索(参考 示例图) - 自从
3.0
版本后支持方法右键添加备忘录(参考 示例图) - 自从
3.0
版本后新增多种常见的JAVA RCE
漏洞调用一键搜索功能 - 自从
3.1
版本后支持BCEL
字符串一键反编译Java
代码(参考 示例图) - 自从
3.1
版本后远程Tomcat
分析改为premain
方式(参考 示例图) - 自从
3.2
版本后远程Tomcat
分析功能重写和增强(参考 示例图) - 自从
4.0
版本后方法跳转的定位大幅优化和精确(使用JavaParser
库实现) - 自从
4.0
版本后支持一键的信息泄露检查(参考 示例图) - 自从
4.0
版本后支持类似IDEA
的全局搜索(基于Lucene
支持代码片段) - 自从
4.0
版本后支持不限制次数的前进后退步骤(记录所有的操作信息) - 自从
4.0
版本批量反编译Jar
导出源码功能修复增强 - 自从
4.0
版本后新增多个图标GUI
界面进一步美化 - 自从
4.1
版本后内置JD-GUI
可以跳过分析快速查看 - 自从
4.2
版本后支持黑暗主题切换 - 自从
4.4
版本后支持不跳转情况下右键预览方法代码 - 自从
5.0
版本之后Panel
支持拖动拉伸缩小 - 自从
5.0
版本之后支持了Interceptor/Servlet/Filter/Listener
分析 - 自从
5.0
版本之后大幅改进了表达式搜索相关功能 - 自从
5.1
版本之后支持了简单的Gadget
分析 - 自从
5.3
版本后支持深度优先搜索算法自动分析漏洞链
更多的功能正在开发中
有问题和建议欢迎提 issue
(01) 我发现 jar-analyzer
性能方面很出色(某知名安全研究员)
(02) 某些场景 jar-analyzer
的表达式功能比 codeql
更好用(某安全研究员)
(03) 我使用 jar-analyzer
挖了不少的 0 day
漏洞,推荐使用 (某知名安全研究员)
(04) 大佬的 jar-analyzer
很好用 (某乙方安全工程师)
(05) 师傅的 jar-analyzer
太强了 (某知名安全研究员)
(06) 刚才老板大力表扬了 jar-analyzer
说超级好用(某甲方安全工程师)
(07) 大佬,先说一句 jar-analyzer
真好用(某乙方安全工程师)
(08) jar-analyzer
最好用(某乙方安全工程师)
(09) Java
漏洞挖掘神器 jar-analyzer
(某乙方安全工程师)
(10) 我用 jar-analyzer
辅助挖到了价值 10w
的 0 day
(某年入百万安全研究员)
(11) jar-analyzer
可以快速筛选符合的 gadget
辅助挖掘新链(知名项目 java-chains
创始人)
(12) jar-analyzer
在手 java
漏洞不愁(某安全公司总裁)
(13) 拼尽全力,无法战胜(某大甲方安全工程师,有丰富的代码审计和 SAST
工具开发经验)
(14) 这几天已经用这个挖到了几个洞了,对于新手很友好(某安全工程师)
方法调用关系
方法调用搜索 (支持 equals/like
选项,支持黑名单过滤)
Jar Analyzer 2.15
版本以后支持代码区域的搜索
Jar Analyzer 2.15
版本以后支持远程 Jar
文件加载
Jar Analyzer 2.17
版本以后支持从序列化数据中一键提取恶意代码
Jar Analyzer 2.18
版本以后支持 HTTP API
Jar Analyzer 2.19
版本以后支持实时的 CPU
和内存占用分析
Jar Analyzer 2.20
版本后支持选中字符串全局高亮显示
Jar Analyzer 5.1
版本后支持了简单的 Gadget
分析
规则清晰简单,写在文件 src/main/resources/gadget.dat
中,欢迎贡献更多
表达式搜索是 jar-analzyer
重要的高级功能:可以自定义多种条件组合搜索方法
表达式搜索位于首页以及 Advance
的 Plugins
部分
注意:如果表达式效率过低,可能是默认内存过小原因,可以考虑修改启动脚本 -Xms
参数
set "java_args=-XX:+UseG1GC -Xms2g -XX:MaxGCPauseMillis=200 %other_args%"
Jar Analyzer V1
最初版诞生于2022.11.27
Jar Analyzer V2
在2023.10.23
第一次提交Jar Analyzer v2
正式版在2023.12.07
发布Jar Analyzer V2
在2024.08.15
发布3.0
版本Jar Analyzer V2
在2024.09.30
总Star
破千Jar Analyzer V2
在2024.11.07
发布4.0
版本Jar Analyzer V2
在2025.01.07
日下载量破万
参考 性能测试文档 对比分析 G1GC
和 ZGC
情况
- [GHSA-43rf-3hm4-hv5f] 反编译恶意的 CLASS 文件可能导致程序不可用
- [GHSA-x5h2-78p8-w943] Jar Analyzer 2.13 版本之前存在 SQL 注入漏洞
- [GHSA-jmcg-r2c5-7m29] Jar Analyzer 存在 ZIP SLIP 漏洞(最坏情况可导致 RCE 风险)
注意:当 Jar
数量较多或巨大时可能导致临时目录和数据库文件巨大
有 UI
兼容性问题请查看 ISSUE
部分的置顶
注意:首先对你的 IDEA
进行设置(本项目不支持 Eclipse/VS Code
等 IDE
环境)
编译和构建过程如下:(以 Windows
为例其他环境类似)
- 重要:确保你安装了
JDK 8 64位
(无论Oracle JDK
或OpenJDK
都可) - 重要:如果你修改了代码请确保在
IDEA
环境中至少启动一次(生成GUI
代码) - 重要:确保你安装了
Maven 3.X
并正确配置了PATH
变量(需要使用mvn
命令) - 可选:运行
Contributor
和ContributorMD
生成最新贡献者信息 - 可选:构建
agent
子项目cd agent && package.bat
- 重要:构建核心项目
package.bat
- 可选:使用
cmake
构建native
目录生成dll
文件放入resources
- 可选:使用
winres
和gcc
构建启动exe
文件和图标信息 - 可选:完整发版参考
build.py
和build.yml
文件
以上是基础功能,进阶和测试性的功能请参考:进阶测试性功能
例如类似 OD/GDB
的指令级 GUI
调试(未完成)
CTRL+X
方法交叉引用 快速跳转方法caller
和callee
页面CTRL+F
代码区域搜索 打开搜索面板 支持next
和prev
选项CTRL+F
文件树区搜索 显示搜索面板 搜索文件树中的类名以及内部类
支持以下:
- default (默认使用 类似
IDEA
主题) - metal
- win (仅
Windows
支持) - win-classic (仅
Windows
支持) - motif
- mac (仅
MacOS
支持) - gtk (仅某些
Linux
支持) - cross
- aqua (仅
MacOS
支持) - nimbus
在启动时指定:java -jar jar-analyzer.jar gui -t [theme]
例如:java -jar jar-analyzer.jar gui -t win-classic
或者修改启动脚本的代码
set "theme_name=default"
早期文章视频以及解释一些内部的原理和注意事项
This project is developed using JetBrains IDEA. Thanks to JetBrains for providing me with a free license, which is a strong support for me.