AI prompts
base on Jar Analyzer - 一个JAR包分析工具,批量分析,SCA漏洞分析,方法调用关系搜索,字符串搜索,Spring组件分析,信息泄露检查,CFG程序分析,JVM栈帧分析,进阶表达式搜索,字节码指令级的动态调试分析,反编译JAR包一键导出,一键提取序列化数据恶意代码,一键分析BCEL字节码 # Jar-Analyzer
[CHANGE LOG](src/main/resources/CHANGELOG.MD)
<img alt="gitleaks badge" src="https://img.shields.io/badge/protected%20by-gitleaks-blue">






首页

一键快速搜索(自从 `4.0` 版本后支持通过配置动态生成 `GUI` 按钮)

例如一个 `Runtime.exec` 的动态规则(配好后直接生成按钮和搜索逻辑)
```yaml
Runtime.exec:
- !!me.n1ar4.jar.analyzer.engine.SearchCondition
className: java/lang/Runtime
methodName: exec
methodDesc: null
```
静态分析 `spring` 项目

通过 `agent` 分析 `tomcat`

自定义表达式搜索

从 `4.0` 版本后支持信息泄露检查(部分正则来源于 [HaE](https://github.com/gh0stkey/HaE) 项目)

从 `4.0` 版本开始可以和 `IDEA` 一样快捷键两次 `shift` 调出 `Lucene` 全局搜索

自从 `4.0` 版本开始修复增强批量反编译 `Jar` 导出功能

自从 `4.1` 版本后支持选择启动引擎和使用 [JD-GUI](https://github.com/java-decompiler/jd-gui) 快速查看两种方式
- 启动引擎分析通常是非常耗时的操作,有时候我们没有必要完全分析
- 启动 `JD-GUI` 可以快速反编译和查看字节码,用于某些场景

自从 `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` 版本后支持字节码指令级别的远程调试(参考 [示例图](img/0035.png))
- 自从 `2.17` 版本后支持从序列化数据一键提取恶意 `JAVA` 代码(参考 [示例图](img/0036.png))
- 自从 `2.18` 版本后支持 `HTTP API` 查询接口(参考 [示例图](img/0038.png))
- 自从 `2.19` 版本后支持启动时配置 `10` 种 `UI` 主题(`LookAndFeel`)
- 自从 `2.19` 版本后支持实时的 `CPU` 占用和内存的折线图展示(参考 [示例图](img/0040.png))
- 自从 `2.20` 版本后支持选中字符串全局高亮显示(参考 [示例图](img/0041.png))
- 自从 `2.21` 版本后支持分析配置类和包名的白名单
- 自从 `2.21` 版本后支持左侧文件数使用 `CTRL+F` 打开类名搜索(参考 [示例图](img/0045.png))
- 自从 `2.21` 版本后新增内置开启 `ZGC` 的 `JRE 21` 环境(仅包含核心功能)
- 自从 `2.23` 版本后新增 `SCA` 分析(参考 [示例图1](img/0051.png) [示例图2](img/0050.png))
- 自从 `2.24` 版本后改善 `SCA` 分析逻辑(显著提高扫描效率)
- 自从 `3.0` 版本后支持生成 `HTML` 方法调用图(参考 [示例图](img/0053.png))
- 自从 `3.0` 版本后支持代码区域选中字符串右键搜索(参考 [示例图](img/0054.png))
- 自从 `3.0` 版本后支持方法右键添加备忘录(参考 [示例图](img/0055.png))
- 自从 `3.0` 版本后新增多种常见的 `JAVA RCE` 漏洞调用一键搜索功能
- 自从 `3.1` 版本后支持 `BCEL` 字符串一键反编译 `Java` 代码(参考 [示例图](img/0061.png))
- 自从 `3.1` 版本后远程 `Tomcat` 分析改为 `premain` 方式(参考 [示例图](img/0062.png))
- 自从 `3.2` 版本后远程 `Tomcat` 分析功能重写和增强(参考 [示例图](img/0065.png))
- 自从 `4.0` 版本后方法跳转的定位大幅优化和精确(使用 `JavaParser` 库实现)
- 自从 `4.0` 版本后支持一键的信息泄露检查(参考 [示例图](img/0066.png))
- 自从 `4.0` 版本后支持类似 `IDEA` 的全局搜索(基于 `Lucene` 支持代码片段)
- 自从 `4.0` 版本后支持不限制次数的前进后退步骤(记录所有的操作信息)
- 自从 `4.0` 版本批量反编译 `Jar` 导出源码功能修复增强
- 自从 `4.0` 版本后新增多个图标 `GUI` 界面进一步美化
- 自从 `4.1` 版本后内置 `JD-GUI` 可以跳过分析快速查看
- 自从 `4.2` 版本后支持黑暗主题切换
更多的功能正在开发中
有问题和建议欢迎提 `issue`
[前往下载](https://github.com/jar-analyzer/jar-analyzer/releases/latest)
## 评价
(1) 我发现 `jar-analyzer` 性能方面很出色(某知名安全研究员)
(2) 某些场景 `jar-analyzer` 的表达式功能比 `codeql` 更好用(某安全研究员)
(3) 我使用 `jar-analyzer` 挖了不少的 `0 day` 漏洞,推荐使用 (某知名安全研究员)
(4) 大佬的 `jar-analyzer` 很好用 (某乙方安全工程师)
(5) 师傅的 `jar-analyzer` 太强了 (某知名安全研究员)
(6) 刚才老板大力表扬了 `jar-analyzer` 说超级好用(某甲方安全工程师)
(7) 大佬,先说一句 `jar-analyzer` 真好用(某乙方安全工程师)
(8) `jar-analyzer` 最好用(某乙方安全工程师)
(9) `Java` 漏洞挖掘神器 `jar-analyzer`(某乙方安全工程师)
## 截图
方法调用关系

方法调用搜索 (支持 `equals/like` 选项,支持黑名单过滤)

`Jar Analyzer 2.15` 版本以后支持代码区域的搜索

`Jar Analyzer 2.15` 版本以后支持远程 `Jar` 文件加载

`Jar Analyzer 2.17` 版本以后支持从序列化数据中一键提取恶意代码

`Jar Analyzer 2.18` 版本以后支持 `HTTP API`
[示例图 1](img/0038.png) [示例图 2](img/0037.png)
`Jar Analyzer 2.19` 版本以后支持实时的 `CPU` 和内存占用分析

`Jar Analyzer 2.20` 版本后支持选中字符串全局高亮显示

## 表达式
表达式搜索是 `jar-analzyer` 重要的高级功能:可以自定义多种条件组合搜索方法
表达式搜索位于首页以及 `Advance` 的 `Plugins` 部分
[详细文档](doc/README-el.md)
## 相关
想深入交流可以发联系方式到邮箱后我拉你进群:`ZW15aXFpbmdAZ21haWwuY29t`
### 感谢列表
<a href="https://github.com/jar-analyzer/jar-analyzer/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jar-analyzer/jar-analyzer" alt="contributors"/>
</a>
### 时间
- `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` 日下载量破万
### 发版时间
目前版本 `4.X` 计划每三个月更新一次
- 2025.04.08
- 2025.07.08
- 2025.10.08
### 性能测试
参考 [性能测试文档](doc/README-test.md) 对比分析 `G1GC` 和 `ZGC` 情况
### 漏洞公告
- [\[GHSA-43rf-3hm4-hv5f\] 反编译恶意的 CLASS 文件可能导致程序不可用](https://github.com/jar-analyzer/jar-analyzer/security/advisories/GHSA-43rf-3hm4-hv5f)
- [\[GHSA-x5h2-78p8-w943\] Jar Analyzer 2.13 版本之前存在 SQL 注入漏洞](https://github.com/jar-analyzer/jar-analyzer/security/advisories/GHSA-x5h2-78p8-w943)
- [\[GHSA-jmcg-r2c5-7m29\] Jar Analyzer 存在 ZIP SLIP 漏洞(最坏情况可导致 RCE 风险)](https://github.com/jar-analyzer/jar-analyzer/security/advisories/GHSA-jmcg-r2c5-7m29)
注意:当 `Jar` 数量较多或巨大时**可能导致临时目录和数据库文件巨大**
有 `UI` 兼容性问题请查看 `ISSUE` 部分的置顶
### BUILD
注意:首先对你的 `IDEA` 进行设置(本项目不支持 `Eclipse/VS Code` 等 `IDE` 环境)

编译和构建过程如下:(以 `Windows` 为例其他环境类似)
1. 重要:确保你安装了 `JDK 8 64位` (无论 `Oracle JDK` 或 `OpenJDK` 都可)
2. 重要:如果你修改了代码请确保在 `IDEA` 环境中至少启动一次(生成 `GUI` 代码)
3. 重要:确保你安装了 `Maven 3.X` 并正确配置了 `PATH` 变量(需要使用 `mvn` 命令)
4. 可选:运行 `Contributor` 和 `ContributorMD` 生成最新贡献者信息
5. 可选:构建 `agent` 子项目 `cd agent && package.bat`
6. 重要:构建核心项目 `package.bat`
7. 可选:使用 `cmake` 构建 `native` 目录生成 `dll` 文件放入 `resources`
8. 可选:使用 `winres` 和 `gcc` 构建启动 `exe` 文件和图标信息
9. 可选:完整发版参考 `build.py` 和 `build.yml` 文件
## 进阶功能
以上是基础功能,进阶和测试性的功能请参考:[进阶测试性功能](doc/README-advance.md)
例如类似 `OD/GDB` 的指令级 `GUI` 调试(未完成)

## 快捷键
- `CTRL+X` 方法交叉引用 快速跳转方法 `caller` 和 `callee` 页面
- `CTRL+F` 代码区域搜索 打开搜索面板 支持 `next` 和 `prev` 选项
- `CTRL+F` 文件树区搜索 显示搜索面板 搜索文件树中的类名以及内部类
## UI 主题
支持以下:
- 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`
或者修改启动脚本的代码
```shell
set "theme_name=default"
```
## 注意
[文档](doc/README-note.md)
## 子项目
[文档](doc/README-sub.md)
## 其他
早期文章视频以及解释一些内部的原理和注意事项
[文档](doc/README-others.md)
## 参考
[文档](doc/README-thanks.md)
## API
[文档](doc/README-api.md)
## Thanks
<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/IntelliJ_IDEA.svg" alt="IntelliJ IDEA logo.">
This project is developed using JetBrains IDEA.
Thanks to JetBrains for providing me with a free license, which is a strong support for me.
## Star
<div align="center">
<img src="https://api.star-history.com/svg?repos=jar-analyzer/jar-analyzer&type=Date" width="600" height="400" alt="Star History Chart" valign="middle">
</div>
", Assign "at most 3 tags" to the expected json: {"id":"4105","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"