Skip to content

jar-analyzer/jar-obfuscator

Repository files navigation

Jar-Obfuscator V2

本项目仅用于保护用户的 jar/war/class 文件目的,请勿用于非法用途

This project is only used to protect users' class file and should not be used for illegal purposes

gitleaks badge

CHANGE LOG

Jar Obfuscator V2 是一��� JAR 文件混淆工具

  • 命令行模式,简单易用
  • 仅单个 JAR 文件小于 1 MB 超轻量
  • 简洁的配置文件快速上手
  • 输入 JAR 直接输出混淆后的 JAR

开始

前往下载

简单命令即可启动(第一次启动将自动生成配置文件)

java -jar jar-obfuscator.jar --jar test.jar --config config.yaml

jar-obfuscator 功能点

  • 类名混淆(包含引用修改)
  • 包名混淆(包含引用修改)
  • 方法名混淆(包含引用修改)
  • 字段名混淆(包含引用修改)
  • 方法参数名混淆(包含引用修改)
  • 删除编译调试信息
  • 字符串 AES 加密运行时解密
  • 字符串修改为访问全局列表方式
  • 整型常数多重异或混淆
  • 添加垃圾代码(可指定多级别)
  • IDEA 反编译时隐藏方法
  • IDEA 反编译时隐藏字段
  • 支持 SpringBoot 混淆
  • 支持 Web WAR 混淆

常见问题

大概配置思路如下:

  • 通常情况必须把 main 入口加入 classBlackList
  • 通常需要配置 classBlackRegexList 拉黑所有的第三方库类(如 org/apache/.* 等)
  • 如果某些类集成或者实现某些库的接口,重写方法不允许重命名,注意配置 methodBlackList
  • 建议测试配置时不要开启 enableJunkenableHide* 方法,一切没问题再开启这些

常见问题:为什么我混淆后的 JAR 可以运行,不报错,但是某些功能无法正常使用?

答案:你需要细节配置类和方法的禁止混淆配置,很多功能是依赖反射机制的:

  • 例如 fastjson 序列化反序列化的 getter/setter 混淆后出出问题
  • 例如 servletdoGet/doPost 方法禁止混淆,混淆后无法执行
  • 例如 mybatis xml 中配置了指定的 mapper 类,混淆后找不到

配置

# 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

About

Jar Obfuscator V2 - 一个 JAR 文件保护混淆工具,支持包名/类名/方法名/字段名/参数名引用分析和重命名混淆方式,支持字符串加密/整型异或混淆/垃圾代码花指令混淆/等方式,支持方法和字段的隐藏,支持 SpringBoot 和 war 包,配置简单,文档教程齐全,容易上手

Topics

Resources

License

Stars

Watchers

Forks

Contributors