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

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

相关推荐
lsylalalala20 分钟前
多线程(2)
java·开发语言·多线程
lhldsg25 分钟前
酒吧点餐小程序开发:从需求分析到技术落地实战
java·前端·小程序·架构·交友
用户31268748772028 分钟前
volatile 到底能保证什么?JMM 与内存屏障深度剖析
java
jimy129 分钟前
右值大类rvalue的xvalue,和 左值大类glvalue的xvalue的区别
开发语言·c++
geovindu34 分钟前
CSharp: Template Method Pattern
开发语言·后端·c#·.net·模板方法模式·行为模式
专注API从业者36 分钟前
Open‑Claw 实战|无需逆向,快速搭建电商商品监控与数据分析系统
开发语言·数据结构·数据库·数据分析·php
西西弗Sisyphus44 分钟前
Qt 无边框窗口自己实现拖拽与缩放
开发语言·qt
吴声子夜歌1 小时前
Guava——集合(二)
java·guava
xiaoqiMikko1 小时前
一句“为了保持同步”的注释,正好打破了同步 —— Netty 响应错配漏洞实测
java