java代码反编译CFR

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),反编译后的代码可读性会极差。

法律合规:反编译他人代码前,请确保遵守相关软件的许可协议和法律,仅用于学习、调试或获得明确授权的场景。

相关推荐
m0_587383001 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·1 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真1 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes2 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停2 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金4 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟4 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck5 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长5 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Wang's Blog5 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo