在Java專案中如何反編譯class檔案及批量反編譯?
前言:
反編譯是一個對目標檔案可執行程式進行逆向分析,從而得到原始碼的過程。尤其是像Java這樣的執行在虛擬機器上的程式語言,更容易進行反編譯得到原始碼。今天介紹幾款反編譯的工具,以及如何更快的批量反編譯。
一、介紹
市面上免費的工具一大堆,這裡就簡單的介紹博主認為常用的反編譯工具,例如(jd-gui、luyten,Procyon-Decompiler 等等)。
《JD-GUI》是一款反編譯軟體,JD分為JD-GUI、JD-Eclipse兩種執行方式,JD-GUI是以單獨的程式的方式執行,而且提供了Eclipse平臺下的外掛JD-Eclipse、IntelliJ的外掛JD-IntelliJ。JD-GUI不需要安裝,直接點選執行,可以反編譯jar,class檔案。是一個用 C++ 開發的 Java 反編譯工具,由 Pavel Kouznetsov開發,支援Windows、Linux和蘋果三個平臺。
《Luyten》是一款很強大的反編譯工具包,Luyten是Procyon的GUI是一款Github的開源工具,軟體功能非常強大,介面簡潔明晰、操作方便快捷,設計得很人性化,軟體支援*.JAR、*.zip、*.class等型別檔案的反編譯操作,還原度非常高,支援更多功能設定,如顯式匯入、型別、合成元件等等
《Procyon-Decompiler》支援JDK1.8類的反編譯,在很多方面做得非常不錯:字串的Switch、列舉宣告方面、註解方面、匿名類、內部類、Java8新介面規範、Java8 Lambda表示式、Java8 方法傳遞等。
《jad》解壓後放到%JAVA_HOME%/bin目錄下即可,通過命令去執行反編譯。
例如:將需要反編譯的多個檔案放在指定路徑下,例如(當前分散式專案都包含多個modules)。為了方便操作,我將檔案放在D盤根目錄下的classes資料夾中。開啟執行--->輸入cmd--->輸入D:,將路徑指到D盤根路徑下。
輸入編譯命令,命令:jad -o -r -s java -d src classes/**/*.class
src資料夾裡面都是反編譯後的java原始檔。
jad命令的引數含義如下: -o:覆蓋舊檔案,而且不用提示確認。 -r:重新載入生成包結構。 -s (java):定義輸出檔案的副檔名。jad為預設副檔名,我們反編譯後當然是要.java原始檔了。 -d:輸出檔案的目錄。src表示反編譯後的所有檔案都放在src目錄下。 classes/**/*.class:classes是需要反編譯的資料夾的名字,整個表示classes目錄下的所有class檔案。也可以寫成這樣**/*.class,這表示當前目錄及其子目錄下所有的class檔案(包含所有的子目錄)。