IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

终端反编译字节码利器 CFR

技术小黑屋 2019-06-28 13:23:18 累计浏览 2,168 次
本机暂存

最近在研究一下class字节码的东西,尝试将class文件反编译成java文件。尝试了很多的工具,比如JD-GUI及其插件以及各种在线反编译,始终感觉不够酷,毕竟我是一个比较依赖终端的人,所以尝试找一些能否在终端可以实现反编译的工具。

还是Google好,很快就找到了一个很满意的工具。

它是一个jar包

名称叫做CFR(Class File Reader)

支持反编译class文件和jar包

如下介绍两个常用的命令使用

反编译class文件

java -jar ~/Documents/scripts/cfr-0.139.jar JavaTest.class
/*
 * Decompiled with CFR 0.139.
 */
import java.io.PrintStream;
public class JavaTest {
    public void functionOne() {
        System.out.println("functionOne");
    }
    public void functionTwo() {
        System.out.println("functionTwo");
    }
}

反编译jar包

java -jar ~/Documents/scripts/cfr-0.139.jar ~/Documents/scripts/cfr-0.139.jar --outputdir /tmp/outputdir
Processing org.benf.cfr.reader.api.CfrDriver
Processing org.benf.cfr.reader.api.ClassFileSource
Processing org.benf.cfr.reader.api.OutputSinkFactory
Processing org.benf.cfr.reader.api.SinkReturns
Processing org.benf.cfr.reader.bytecode.analysis.opgraph.Graph
...

执行上述命令结束后,从输出目录(outputdir)下就能找到对应的java文件了。

包装成脚本

反编译某个class文件

#!/bin/bash
java -jar ~/Documents/scripts/cfr-0.139.jar $1

反编译某个jar包

#!/bin/bash
java -jar ~/Documents/scripts/cfr-0.139.jar $1 --outputdir $2

资源

http://www.benf.org/other/cfr/index.html

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. SmartSprites - 命令行形式的CSS Sprites生成器 (累计阅读 123,894)
  2. Java开发岗位面试题归类汇总 (累计阅读 22,155)
  3. android 开发入门 (累计阅读 19,527)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  5. HashMap解决hash冲突的方法 (累计阅读 12,652)
  6. 一个大二学生有关如何成为一名软件工程师的疑问及答复 (累计阅读 9,178)
  7. Java程序员应该知道的10个eclipse调试技巧 (累计阅读 8,012)
  8. 如何让员工忠于公司? (累计阅读 7,939)
  9. Java技术路线 (累计阅读 7,725)
  10. 聊聊ThoughtWorks面试 (累计阅读 7,614)