java代码反编译CFR
1.下载文件
从 CFR 的官方网站下载最新的 .jar 文件
官方下载:https://www.benf.org/other/cfr
直接链接(以 0.152 版本为例):https://www.benf.org/other/cfr/cfr-0.152.jar

2.开始使用
2.1 下载完成后,进行验证安装
执行:
bash
java -jar cfr-0.152.jar --version

注意:如果在构建时遇到 maven-compiler-plugin 错误,请确保你的 JAVA_HOME 环境变量指向 JDK 8 或 11。
2.2 之后,就可以直接通过 java -jar 命令来运行它了
bash
java -jar cfr-0.152.jar [选项] <要反编译的文件>
3.基础用法
CFR 的核心使用命令格式为:java -jar cfr.jar [选项] <目标文件>。
3.1 反编译单个 .class 文件
直接指定 .class 文件的路径,结果会输出到控制台。
bash
java -jar cfr-0.152.jar com/example/MyClass.class[reference:19][reference:20]
3.2 反编译整个 .jar 文件
指定 .jar 文件路径,并使用 --outputdir 指定输出目录,将源码保存到文件中
bash
java -jar cfr-0.152.jar your-library.jar --outputdir ./decompiled-src[reference:23]
3.3 批量反编译
CFR 支持递归处理目录。如果目标是一个目录,它会自动寻找并反编译其中所有的 .class 和 .jar 文件
bash
java -jar cfr-0.152.jar ./thr/* --outputdir ./out_thr
3.4 常用配置选项
你可以通过添加参数来定制反编译行为,使用 --help 可以查看所有选项
选项 说明 示例
--outputdir <目录> (重要) 指定所有反编译源码的输出目录。 --outputdir ./src
--outputpath <文件> 指定单个文件的输出路径,用于反编译单个类。 --outputpath MyClass.java
--decodelambdas 尝试将字节码还原为 Lambda 表达式,提高可读性。 --decodelambdas true
--silent 减少控制台输出的日志信息。 --silent true
--comments 在生成的代码中尽可能保留原始注释。 --comments true
--renameillegalidents 重命名混淆后产生的非法标识符,使代码更符合 Java 规范。 --renameillegalidents true
--enableclassfilter (高级) 启用后,会跳过 Spring、Guava 等常见第三方库,显著加快大型 Jar 包的反编译速度。 --enableclassfilter
--help 显示所有可用的命令行选项。 --help
提示:你也可以将这些配置写入一个文件(如 cfr.config),然后通过 --config 参数加载
4.注意事项
代码完整性:反编译得到的代码主要用于阅读和学习,逻辑与原代码高度一致,但不可能完美还原原始的变量名、注释等信息,不能直接用于编译。
代码混淆:如果 Jar 包经过代码混淆(如 ProGuard),反编译后的代码可读性会极差。
法律合规:反编译他人代码前,请确保遵守相关软件的许可协议和法律,仅用于学习、调试或获得明确授权的场景。