1. 程式人生 > >war包反編譯成整個java專案

war包反編譯成整個java專案

1、目的:別人不願意給你原始碼,所以給你了一份編譯好的class檔案或者是一個匯出的jar包或者war包。然而,我們希望可以讀到原始碼,所以需要將class檔案程式設計java檔案        由於主流的C的編譯器都進行了程式碼的優化,因此把C編譯生成的exe檔案反編譯成C程式碼非常困難。但是像Java、.net這樣基於虛擬機器技術的程式語言則反編譯非常容易,Java平臺下有Jad、Jode、JD等反編譯器,.net平臺下則有Reflector等反編譯器,他們的反編譯質量非常高,甚至和原始碼幾乎沒什麼差別。

2、反編譯得到的幾乎和原始碼差不多      反編譯得到的程式碼是非常接近於原始碼,但是或多或少與原始碼有一些差異的,比如一些表示式被優化掉了,比如,下面的原始碼:  int i=1+1; 由於在編譯過程中已經進行了優化,把“1+1”這個原始的資訊丟掉了,因此反編譯出來的程式碼只能是: int i=2;  

3、常用工具 (1) JD-GUI

JD-GUI是屬於Java Decompiler專案(JD專案)下個的圖形化執行方式的反編譯器。 JD-Eclipse屬於Java Decompiler專案(JD專案)下個Eclipse外掛化執行方式的反編譯外掛。 JD-IntelliJ屬於Java Decompiler專案(JD專案)下個Intellij外掛化的執行方式的反編譯外掛。

JD-GUI 是一個用 C++ 開發的 Java 反編譯工具,由 Pavel Kouznetsov開發,支援Windows、Linux和蘋果Mac Os三個平臺。而且提供了Eclipse平臺下的外掛JD-Eclipse,Intellij平臺下的外掛JD-Intellij。JD-GUI不需要安裝,直接點選執行,可以反編譯jar,class檔案。

支援jar包級的反編譯,可將整個jar包直接儲存為*.src.zip原始碼包,反編譯迅速,錯誤率極少。

JD分為JD-GUI、JD-Eclipse/JD-Intellij兩種執行方式,JD-GUI是以單獨的程式的方式執行,JD-Eclipse/JD-Intellji則是以一個Eclipse/IDEA外掛的方式執行。

Java Decompiler專案”旨在開發一些工具,以便反編譯和分析Java 5以及更高本的Java的“位元組程式碼”。 JD-Core是一個庫,是一個從一個或多個“.class”檔案中重建Java原始碼的庫。JD-Core可用於恢復丟失的原始碼並探索執行時Java的原始碼。支援Java 5的新功能,例如註釋,泛型或型別“列舉”。JD-GUI和JD-Eclipse包括JD-Core庫。

(2)Jad (推薦) 

jad是一款使用非常廣泛地Java反編譯工具,Jadclipse就是基於jad的反編譯外掛,JAD 檔案包含 MIDlet 套件的標題資訊,例如開發應用程式的公司、應用程式名稱和大小。

4、使用

如果對於單個檔案的情況,可以使用JDGUI來開啟看一下,多個檔案也可以,甚至一個jar包或者war包都可以,但只能在GUI裡開啟看看,對於想反編譯成一個專案,直接使用原始碼的朋友來講,真的很不方便。

所以,推薦使用jad 。只要執行這條命令,所有問題既可以解決。

jad -o -r -sjava -d src classes/**/*.class