終端反編譯位元組碼利器 CFR

  • 2020 年 1 月 23 日
  • 筆記

最近在研究一下class位元組碼的東西,嘗試將class文件反編譯成java文件。嘗試了很多的工具,比如JD-GUI及其插件以及各種在線反編譯,始終感覺不夠酷,畢竟我是一個比較依賴終端的人,所以嘗試找一些能否在終端可以實現反編譯的工具。

還是Google好,很快就找到了一個很滿意的工具。

  • 它是一個jar包
  • 名稱叫做CFR(Class File Reader)
  • 支持反編譯class文件和jar包

如下介紹兩個常用的命令使用

反編譯class文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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包

1 2 3 4 5 6 7

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文件

1 2

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

反編譯某個jar包

1 2

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