https://github.com/jar-analyzer/jar-obfuscator
Jar Obfuscator V2 - 一个 JAR 文件保护混淆工具,支持包名/类名/方法名/字段名/参数名引用分析和重命名混淆方式,支持字符串加密/整型异或混淆/垃圾代码花指令混淆/等方式,支持方法和字段的隐藏,支持 SpringBoot 和 war 包,配置简单,文档教程齐全,容易上手
https://github.com/jar-analyzer/jar-obfuscator
bytecode-obfuscator code-obfuscator java-asm java-obfuscation java-obfuscator obfuscation obfuscator
Last synced: 24 days ago
JSON representation
Jar Obfuscator V2 - 一个 JAR 文件保护混淆工具,支持包名/类名/方法名/字段名/参数名引用分析和重命名混淆方式,支持字符串加密/整型异或混淆/垃圾代码花指令混淆/等方式,支持方法和字段的隐藏,支持 SpringBoot 和 war 包,配置简单,文档教程齐全,容易上手
- Host: GitHub
- URL: https://github.com/jar-analyzer/jar-obfuscator
- Owner: jar-analyzer
- License: mit
- Created: 2024-05-09T06:23:09.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-06-20T12:51:19.000Z (8 months ago)
- Last Synced: 2025-06-20T13:32:18.555Z (8 months ago)
- Topics: bytecode-obfuscator, code-obfuscator, java-asm, java-obfuscation, java-obfuscator, obfuscation, obfuscator
- Language: Java
- Homepage:
- Size: 28.4 MB
- Stars: 380
- Watchers: 1
- Forks: 44
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.MD
- License: LICENSE
Awesome Lists containing this project
README
# Jar-Obfuscator V2
# 作者精力有限,暂不维护了
# 作者主要精力将放在 jar-analzyer 和 class-obf 工具的维护






[CHANGE LOG](CHANGELOG.MD)
`Jar Obfuscator V2` 是一个 `JAR` 文件混淆工具
- 命令行模式,简单易用
- 仅单个 `JAR` 文件小于 `1 MB` 超轻量
- 简洁的配置文件快速上手
- 输入 `JAR` 直接输出混淆后的 `JAR`
注意:目前是 `v2` 版本,如果你需要 `v1` 版本可以从 `release` 页面下载
## 开始
[前往下载](https://github.com/jar-analyzer/jar-obfuscator/releases/latest)
简单命令即可启动(第一次启动将自动生成配置文件)
```shell
java -jar jar-obfuscator.jar --jar test.jar --config config.yaml
```
jar-obfuscator 功能点
- 类名混淆(包含引用修改)
- 包名混淆(包含引用修改)
- 方法名混淆(包含引用修改)
- 字段名混淆(包含引用修改)
- 方法参数名混淆(包含引用修改)
- 删除编译调试信息
- 字符串 AES 加密运行时解密
- 字符串修改为访问全局列表方式
- 整型常数多重异或混淆
- 添加垃圾代码(可指定多级别)
- IDEA 反编译时隐藏方法
- IDEA 反编译时隐藏字段
- 初步支持 SpringBoot 混淆
- 初步支持 Web WAR 混淆
## 配置
```yaml
# jar obfuscator v2 配置文件
# jar obfuscator v2 by jar-analyzer team (4ra1n)
# https://github.com/jar-analyzer/jar-obfuscator
# 日志级别
# debug info warn error
# 开启 debug 会打印更多的混淆细节
logLevel: info
# 内部参数
# 是否启动 JAVA ASM 的 COMPUTE FRAMES/MAX 自动计算
# 如果遇到 TYPE * NOT PRESENT 报错可以尝试设置该选项为 FALSE
asmAutoCompute: true
# 如果你是 springboot 请开启
useSpringBoot: false
# 如果你是 war web 项目请开启
useWebWar: false
# 混淆字符配置
# 类名方法名等信息会根据字符进行随机排列组合
obfuscateChars:
- "i"
- "l"
- "L"
- "1"
- "I"
# 不对某些类做混淆(不混淆其中的所有内容)
# 通常情况必须加入 main 入口
classBlackList:
- "com.test.Main"
# 不对指定正则的类进行混淆
# 注意这里的类名匹配是 java/lang/String 而不是 java.lang.String
# 该配置和 classBlackList 同时生效
classBlackRegexList:
- "java/.*"
- "com/intellij/.*"
# 不对某些 method 名做混淆 正则
# visit.* 忽略 JAVA ASM 的 visitCode visitMethod 等方法
# start.* 忽略 JAVAFX 因为启动基于 start 方法
# 以此类推某些方法和类是不能混淆的(类继承和接口实现等)
methodBlackList:
- "visit.*"
- "start.*"
# 开启类名混淆
enableClassName: true
# 开启包名混淆
enablePackageName: true
# 开启方法名混淆
enableMethodName: true
# 开启字段混淆
enableFieldName: true
# 开启参数名混淆
enableParamName: true
# 开启数字异或混淆
enableXOR: true
# 开启加密字符串
enableEncryptString: true
# 加密使用 AES KEY
# 注意长度必须是 16 且不包含中文
stringAesKey: Y4SuperSecretKey
# 开启进阶字符串混淆
enableAdvanceString: true
# 进阶字符串处理参数
advanceStringName: GIiIiLA
# 字符串解密类名
decryptClassName: org.apache.commons.collections.list.AbstractHashMap
# 字符串解密方法名
decryptMethodName: newMap
# 字符串 AES KEY 名字
decryptKeyName: LiLiLLLiiiLLiiLLi
# 是否隐藏方法
enableHideMethod: true
# 是否隐藏字段
enableHideField: true
# 开启删除编译信息选项
enableDeleteCompileInfo: true
# 开启花指令混淆
enableJunk: true
# 花指令级别
# 最低1 最高5
# 使用 3 以上会生成垃圾方法
junkLevel: 5
# 一个类中的花指令数量上限
maxJunkOneClass: 2000
# 是否打印所有主函数
showAllMainMethods: true
# 是否保留临时类文件
keepTempFile: false
```
## 配置指南
大概思路如下:
- 通常情况必须把 `main` 入口加入 `classBlackList`
- 通常需要配置 `classBlackRegexList` 拉黑所有的第三方库类(如 `org/apache/.*` 等)
- 如果某些类集成或者实现某些库的接口,重写方法不允许重命名,注意配置 `methodBlackList`
- 建议测试配置时不要开启 `enableJunk` 和 `enableHide*` 方法,一切没问题再开启这些
## 更新内容
2.0.0-RC2 版本已初步支持 `SpringBoot` 混淆
