一款 XJar 加密 JAR 文件的通用解密工具,支持标准 XJar(AES/CBC)和自定义魔改版(AES/ECB)的自动检测与解密。
提供 GUI 图形界面 和 CLI 命令行 双模式操作,支持单文件和批量解密。
- 双模式解密 — 标准 XJar (AES/CBC) + 自定义 ECB 模式 (AES/ECB)
- 自动检测 — 根据加密特征自动判断解密模式,无需手动选择
- GUI 界面 — 图形化操作,支持索引分析和条目过滤
- CLI 命令行 — 支持自动化脚本、批量处理
- 批量解密 — 可对整个目录的 JAR 文件批量操作
- 智能过滤 — 跳过静态资源,或仅解密索引中记录的条目
- 索引分析 — 可视化查看加密条目列表及统计信息
需要 JDK 15+ 和 Maven:
mvn clean package编译产物位于 target/xjar-decrypt-1.0.jar。
无参数启动即可打开图形界面:
java -jar xjar-decrypt.jar选择文件 → 输入密码 → 点击解密。工具会自动检测加密模式并处理。
支持功能:
- 文件/目录选择
- 索引分析(点击「分析加密索引」查看加密条目列表)
- 条目过滤(跳过静态资源、仅解密索引条目、ANT 排除表达式)
- 批量目录解密
java -jar xjar-decrypt.jar <文件或目录> <密码> [选项]| 参数 | 说明 |
|---|---|
<文件或目录> |
被加密的 jar/war/xjar 文件,或包含多个 jar 的目录 |
<密码> |
解密密码 |
| 选项 | 说明 |
|---|---|
-o, --output <目录> |
输出目录(默认:源文件同目录) |
-m, --mode <模式> |
解密模式:standard / custom / auto(默认:auto) |
-s, --skip-static |
跳过静态文件(html/css/js/png/yml/json 等),仅标准模式 |
-i, --use-index |
仅解密索引(XJAR-INF/INDEXES.IDX)中记录的条目,仅标准模式 |
-e, --exclude <表达式> |
ANT 风格排除表达式,逗号分隔,仅标准模式 |
-a, --analyze |
仅分析索引文件,不解密(不需要密码) |
-h, --help |
显示帮助 |
| 模式 | CLI 参数 | 说明 |
|---|---|---|
| 标准模式 | standard |
标准 XJar 加密,AES/CBC/PKCS5Padding |
| 自定义ECB模式 | custom |
自定义魔改版 XJar,AES/ECB/PKCS5Padding |
| 自动检测 | auto(默认) |
自动分析 JAR 特征选择合适的解密模式 |
# 单文件解密(自动检测模式)
java -jar xjar-decrypt.jar app.jar "my_password"
# 批量解密整个目录
java -jar xjar-decrypt.jar /path/to/jars "my_password"
# 指定输出目录
java -jar xjar-decrypt.jar app.jar "my_password" -o /tmp/output
# 指定自定义ECB模式
java -jar xjar-decrypt.jar app.jar "my_password" -m custom
# 仅分析索引文件(不需要密码)
java -jar xjar-decrypt.jar app.jar -a
# 跳过静态文件 + 自定义排除
java -jar xjar-decrypt.jar app.jar "my_password" -s -e "lib/**,**/*.xml"
# 仅解密索引中的条目
java -jar xjar-decrypt.jar app.jar "my_password" -i
# 批量分析目录下所有 JAR 的索引
java -jar xjar-decrypt.jar /path/to/jars -a工具会检查以下特征来判断加密模式:
| 检测项 | 说明 |
|---|---|
| 自定义 Native 库 | 检查 win32-x86-64/、linux-x86-64/ 下的 .dll/.so 文件 |
| CLibrary.class | 检查是否存在 JNA 接口(自定义加密特征) |
| XJar Launcher | MANIFEST 中 Main-Class 是否为 XJarLauncher |
| XJar 密钥头 | MANIFEST 中是否有 XJar-Algorithm 等属性 |
使用 XJar 框架(core-lib/xjar)的标准加密方式:
- 算法:AES/CBC/PKCS5Padding
- 密钥:通过 SHA-512 → SecureRandom → KeyGenerator 派生
- 加密范围:BOOT-INF/classes/ 下的 class 文件
- 密码来源:命令行参数
经过魔改的 XJar 加密实现:
- 算法:AES/ECB/PKCS5Padding
- 密钥:SHA-512(password) 前 16 字节直接截取
- 加密范围:BOOT-INF/classes/ 下的 class 文件
- 密码来源:Native 密钥库 (JNA) + stdin 回退
与标准 XJar 的主要差异:
| 特性 | 标准 XJar | 自定义 ECB |
|---|---|---|
| 加密模式 | AES/CBC/PKCS5Padding | AES/ECB/PKCS5Padding |
| IV | 是 | 否 |
| 密钥派生 | SecureRandom → KeyGenerator | SHA-512 直接截取前 16 字节 |
| 密码来源 | 参数传入 | Native 库 + stdin |
src/main/java/com/z0fsec/
├── XJarDecryptGUI.java # GUI 图形界面 + 程序入口
├── XJarCLI.java # CLI 命令行模式
├── XJarDecryptor.java # 解密核心调度
├── XJarIndexReader.java # XJar 索引文件读取
├── CustomEcbDecryptor.java # 自定义ECB模式解密引擎
├── CustomEcbDetector.java # 加密类型自动检测
└── DecryptMode.java # 解密模式枚举
- xjar 4.0.2 — XJar 加密框架(用于标准模式解密)
- commons-compress — JAR/ZIP 归档处理
- Java Swing — GUI 界面
- JDK 15+
本工具仅供安全研究与授权测试使用,请勿用于非法用途。未经授权对他人软件进行逆向解密可能违反相关法律法规。