Eclipse 反編譯插件 jadClipse

反編譯插件有 jdeclipse 和 jadeclipse。java

(1) jdeclipsesass

http://www.djjavadecompiler.com/eclipse

(2) jad + jadeclipse編輯器

下載 jadeclipse:http://sourceforge.net/projects/jadclipse/files/工具

下載 net.sf.jadclipse_3.3.0.jar 後,複製到 eclipse主目錄下的 plugin文件夾下,而後重啓 eclipse。spa

 

下載 jad.exe:http://www.varaneckas.com/jad/ (從維基中找到的地址).net

下載完成後,複製到任意路徑插件

Window->Preferences->Java->JadClipse.

一、Path to decompiler,這裏設置反編譯工具jad的全路徑名,下載jad.exe的全路徑.

二、Directory for temporary files,這裏設置臨時文件路徑。
至於Window->Preferences->Java->JadClipse目錄下的Debug,Directives,Formatting,Misc目錄中的參數設置,就不羅嗦。
 翻譯

安裝完成後:unix

在Eclipse的視窗系統――> Perference――>General->Editors->File Associations中修改「*.class」默認關聯的編輯器爲「JadClipse Class File Viewer」。「*.class without source」默認關聯的編輯器爲「JadClipse Class File Viewer」設置完成後,雙擊*.class文件,eclipse將自動反編譯。

 

像這樣就安裝成功了

 

常見的安裝失敗:

1,路徑不對

/*jadclipse*/

/*
DECOMPILATION REPORT

Decompiled from: E:WKSPBOS60EAS60SPlibcommonbosmetadata.jar
Total time: 0 ms
Jad reported messages/errors:
Exit status: 0
Caught exceptions:
java.io.IOException: CreateProcess: D:kingdeeeasbosjad -p -t4 -dead -noconv -lradix10 -radix10 Context.class error=3

 

2,安裝的jad版本不對

/*jadclipse*/

/*
DECOMPILATION REPORT

Decompiled from: E:WKSPBOS60EAS60SPlibservereasfi_arap-server.jar
Total time: 250 ms
Jad reported messages/errors:
Exit status: 1
Caught exceptions:
*/

 

3,目前尚無解決

java.lang.InterruptedException 

at java.lang.ProcessImpl.waitFor(Native Method) 

at net.sf.jadclipse.JadDecompiler.decompile(JadDecompiler.java:167)

 

 

 

 

 

使用方法:

 

[1] 反編譯一個class文件:jad example.class,會生成example.jad,用文本編輯器打開就是java源代碼

 

[2] 指定生成源代碼的後綴名:jad -sjava example.class,生成example.java

 

[3] 改變生成的源代碼的名稱,能夠先使用-p將反編譯後的源代碼輸出到控制檯窗口,而後使用重定向,輸出到文件:jad -p example.class > myexample.java

 

[4] 把源代碼文件輸出到指定的目錄:jad -dnewdir -sjava example.class,在newdir目錄下生成example.java

 

[5] 把packages目錄下的class文件所有反編譯:jad -sjava packages/*.class

 

[6] 把packages目錄以及子目錄下的文件所有反編譯:jad -sjava packages/**/*.class,不過你仍然會發現全部的源代碼文件被放到了同一個文件中,沒有按照class文件的包路徑創建起路徑

 

[7] 把packages目錄以及子目錄下的文件所有反編譯並創建和java包一致的文件夾路徑,可使用-r命令:jad -r -sjava packages/**/*.class

 

[8] 當重複使用命令反編譯時,Jad會提示「whether you want to overwrite it or not」,使用-o能夠強制覆蓋舊文件

 

[9] 還有其餘的參數能夠設置生成的源代碼的格式,能夠輸入jad命令查看幫助,這裏有我的作了簡單的翻譯:jad命令總結

 

[10] 固然,你會發現有些源文件頭部有些註釋信息,不用找了,jad沒有參數能夠去掉它,用別的辦法吧。

 

最後,jad不能直接反編譯jar包,直接解壓了再反編譯吧(這個方法很顯然,我實在很差意思寫出來)。

 

如今就總結一下jad 命令

 

首先,看一下jad的幫助提示

 

 -a - 用JVM字節格式來註解輸出 

-af - 同 -a,可是註解的時候用全名稱 

-clear - 清除全部的前綴 

-b - 輸出多於的括號 (e.g., if(a) { b(); }, default: no) 

-d <dir> - 指定輸出文件的文件目錄 

-dead -試圖反編譯代碼的dead 部分(default: no) 

-disass - 不用用字節碼的方式反編譯 (no JAVA source generated) 

-f - 輸出整個的名字,不管是類仍是方法 

-ff -輸出類的成員在方法以前 (default: after methods) 

-i - 輸出全部的變量的缺省的最初值 

-l<num> - 將strings分割成指定數目的塊的字符 (default: no) 

-lnc - 將輸出文件用行號來註解 (default: no) 

-nl - 分割strings用新行字符 newline character (default: no) 

-nodos -不要去檢查class文件是否以dos方式寫 (CR before NL, default: check) 

-nocast - 不要生成輔助文件 

-nocode -不要生成方法的源代碼 

-noconv - 不要轉換java的定義符 (default: do) 

-noctor - 不容許空的構造器存在 

-noinner -關掉對內部類的支持 (default: turn on) 

-nolvt - 忽略局部變量的表信息 

-nonlb - 不要輸出一個新行在打開一個括號以前 (default: do) 

-o - 無需確認直接覆蓋輸出 (default: no) 

-p - 發送反編譯代碼到標準輸出 STDOUT (e.g., for piping) 

 

其次.經常使用命令

 

jad -o -r -sjava -dsrc test.class

 

tree目錄下的全部*.class文件

    jad -o -r -sjava -dsrc tree/**/*.class

 

    unix能夠表示爲:jad -o -r -sjava -dsrc 'tree/**/*.class'

 

指定輸出文件的名字的話,用如下的轉移命令

 

jad -p example1.class > myexm1.java

 

輸出帶字節碼註釋和源碼的(最經常使用)

 

jad -o -a Test.class > ss.java

 

彩蛋:

將jar中的class 整個反編譯成Java,而且保存原有包結構

[jad_home]/jad.exe -r -ff -d src -s java com/**/*.class

其中-r 表示恢復源文件的目錄結構,,-ff 表示將類屬性定義放在類方法定義以前, -d 表示輸出目錄,-s 表示文件的擴展名。

com/**/*.class爲要加載的class文件,能夠用絕對路徑標示,也能夠用相對路徑標示

 

全部的java文件將會被放置到src目錄下。

 over!  

相關文章
相關標籤/搜索