終端反編譯位元組碼利器 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 |
---|