Jar Analyzer
是一个分析 Jar
文件的 GUI
工具:
- 支持大
Jar
以及批量Jars
分析 - 方便地搜索方法之间的调用关系
- 分析
LDC
指令定位Jar
中的字符串 - 一键分析
Spring Controller/Mapping
- 对于方法字节码和指令的高级分析
- 一键反编译,优化对内部类的处理
- 一键生成方法的
CFG
分析结果 - 一键生成方法的
Stack Frame
分析结果 - 远程分析
Tomcat
中的Servlet
等组件 - 自定义
SQL
语句进行高级分析 - 集成
ClazzSearcher
项目作为命令行分析版本 - 允许从字节码层面直接修改方法名(测试功能)
- 自从
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
分析(可支持ASSEMBLY JAR
和LIB JAR
多种) - 自从
2.24
版本后改善SCA
分析逻辑(显著提高扫描效率)
什么是 SCA
分析:输入 JAR
文件后根据特定 CLASS
的 HASH
和规则匹配到 CVE
漏洞
可以生成美观的 HTML
报告
更多的功能正在开发中
有问题和建议欢迎提 issue
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:你需要深入地分析某个方法中
JVM
指令调用的传参(带有图形界面) - 场景08:你需要深入地分析某个方法中
JVM
指令和栈帧的状态(带有图形界面) - 场景09:你需要深入地分析某个方法的
Control Flow Graph
(带有图形界面) - 场景10:你有一个
Tomcat
需要远程分析其中的Servlet/Filter/Listener
信息 - 场景11:查实现接口
A
继承接口B
类注解C
且方法名test
方法内调用D
类a
方法的方法(表达式搜索) - 测试功能:字节码指令级别的调试 | 远程分析 | 一键导出反编译代码
时间
Jar Analyzer V1
最初版诞生于2022.11.27
Jar Analyzer V2
在2023.10.23
第一次提交Jar Analyzer v2
正式版在2023.12.07
发布
用户使用文章
用户使用视频
漏洞公告
- [GHSA-43rf-3hm4-hv5f] 反编译恶意的 CLASS 文件可能导致程序不可用
- [GHSA-x5h2-78p8-w943] Jar Analyzer 2.13 版本之前存在 SQL 注入漏洞
- [GHSA-jmcg-r2c5-7m29] Jar Analyzer 存在 ZIP SLIP 漏洞(最坏情况可导致 RCE 风险)
注意:当 Jar
数量较多或巨大时可能导致临时目录和数据库文件巨大
方法调用关系
方法调用搜索 (支持 equals/like
选项,支持黑名单过滤)
分析 Spring Framework
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
版本后支持选中字符串全局高亮显示
以上是基础功能,进阶和测试性的功能请参考:进阶测试性功能
分析同一个 20 MB
大小的 JAR
文件对比
JRE 8
性能 48 秒
JRE 21
性能 46 秒
新版本同时支持了内置 JAVA 8
和 JAVA 21
的版本
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"
编译和构建过程如下:
- 构建核心项目
mvn -B clean package -DskipTests --file pom.xml
- 构建
agent
子项目mvn -B clean package -DskipTests --file agent\pom.xml
- 构建命令行子项目
mvn -B clean package -DskipTests --file class-searcher\pom.xml
- 构建
rasp
子项目mvn -B clean package -DskipTests --file jar-analyzer-rasp\pom.xml
- 使用
cmake
构建native
目录的C
代码生成dll
文件放入resources
- 使用
winres
和gcc
构建启动exe
文件和图标信息 - 参考
build.py
和build.yml
文件进行最终的文件合并和版本构建
This project is developed using JetBrains IDEA. Thanks to JetBrains for providing me with a free license, which is a strong support for me.