歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 反編譯 JD-GUI / Jad / JadClipse

對於Java開發人員而言,沒有源碼可能讓你無法忍受,不知道大家跟我是否有相同的感受?
尤其是當調試debug遇到問題的時候,你是否有沖動並急需想了解第三方jar內部實現機制以及實現原理,以便為了更好的解決問題,高效的開發呢?
當然對於技術大牛們,研究源碼不是為了解決問題,而是為了某種“信仰”——淘金於優越代碼架構。

廢話少說,當你苦於沒有源碼的時候,你可以通過大家熟知的jad命令反編譯class來獲得源碼。更加簡便的是你可以通過這個法國網站所開發的JD-GUI跟JD-Eclipse(老官網: http://java.decompiler.free.fr/, 貌似已經無法訪問了)或者 新網站 http://jd.benow.ca/,可以幫助你快速地反編譯多個class,甚至整個jar。這些工具都是免費,當然對於個人用戶而已,由於版權的關系,雖然免費了,你也可以給官方貢獻部分資金,以支持免費軟件產業的長久持續發展!

JD-GUI

首先,我們來看下官方出品的JD-GUI的主界面截圖:


在此,提供原下載鏈接地址:
(最新版本為0.3.5,發布於2012年10月18日,而核心包JD-Core則同時發布,但是版本號為0.6.2)
http://jd.benow.ca/jd-gui/downloads/#jd-gui

Window:
jd-gui-0.3.5.windows.zip
Size: 789K
MD5 checksum : 403CD51196C769F45739BDA66B3C3155
Linux:
jd-gui-0.3.5.linux.i686.tar.gz
Size: 1.1M
MD5 checksum : 3E82FFCB98508971D96150CF57837B13
Mac:
jd-gui-0.3.5.osx.i686.dmg
Size : 1.5M
MD5 checksum : 203605F4B264294E7861D4538E2BC9EA

JD-Eclipse

由於當下Eclipse開發環境的大眾流行趨勢,因此也提供了反編譯的JD-Eclipse插件方式。當在JDT開發環境中,雙擊打開class的時候,或者跳轉到class的時候,並且僅在沒有對應的源碼提供的時候,才會使用JD-Eclipse插件來反編譯你打開的任何class。

支持平台:
Windows 32/64-bit
Linux 32/64-bit
Mac OSX 32/64-bit on x86 hardware
安裝方式:
可通過Eclipse,Help>Install new software.
在線安裝: http://jd.benow.ca/jd-eclipse/update
離線安裝:JD Eclipse Update Site
Size : 2.61M
MD5 checksum : AACEB711244D53A21CED28D688741CD5
當前版本為0.1.4,相比前一0.1.3版本,發布於2009年12月17日而言,最新的版本發布於2013年8月15日,值得慶賀,還以為不會更新了呢。

事實上,無論是JD-GUI,還是JD-Eclipse都基於JD-Core核心包。
該反編譯工具的優點是:
無需安裝任何jdk;
支持JDK 1.1 到1.7所編譯的class;
支持JDK 1.5之後的枚舉類型enum,范型Generices,以及注釋Annotations
支持拖拽方式,反編譯class及jar;
支持保存反編譯結果為源碼文件或源碼包(xxx.src.zip);
支持反編譯後源碼編輯器的著色顯示;
綠色軟件,打開一次後,僅會在JD-GUI程序的同一目錄下,生成一個cfg文件。當你想卸載此程序的時候,直接刪除這兩個文件即可。(安全無毒副作用).

Jad

當然可能上面的工具無法滿足你的需求,比如你的在AIX平台上,需要反編譯class。此時,就只能使用命令的方式(jad)來反編譯.
Tomas Varaneckas 的個人網站上基本涵蓋了所有平台上的jad程序。
URL: http://www.varaneckas.com/jad/
同時也在此提供下載鏈接及各平台jad。
Jad 1.5.8g for Windows 9x/NT/2000 on Intel platform (238600 bytes).
Jad 1.5.8g for Mac OS X 10.4.6 on Intel platform (170707 bytes, compiled by GCC 4.0).
Jad 1.5.8e for HP-UX 11.x (293214 bytes).
Jad 1.5.8e for Linux on Intel platform (214917 bytes).
Jad 1.5.8e for Linux (statically linked) (389972 bytes) - take this version if the one above crashes or displays the "seek error" message.
Jad 1.5.8d for OS/2 (288717 bytes) - OS/2 version was cross-compiled on Windows using EMX and RSXNT packages, therefore it requires EMX runtime (EMX.DLL should be enough).
Jad 1.5.8c for FreeBSD 4.0 (322311 bytes) - statically linked.
Jad 1.5.8c for OpenBSD 2.7 (334499 bytes) - statically linked.
Jad 1.5.8c for NetBSD 1.5 (324440 bytes) - statically linked.
Jad 1.5.8c for Solaris 8 on Intel platform (264751 bytes).
Jad 1.5.8c for Mac OS X (Darwin 1.3) on PowerPC platform (266264 bytes).
Jad 1.5.7g for Linux on Sun Sparc platform (180606 bytes).
Jad 1.5.7g for Linux on Sun Sparc platform (346221 bytes) - statically linked.
Jad 1.5.7f for Solaris 7 on Sun Sparc platform (318096 bytes) - compiled on Sun 4m (Sparc10) using GCC 2.8.1, statically linked. Works on Solaris 2.6 as well.
Jad 1.5.7f for BeOS 5.0 on Intel platform (245422 bytes) - statically linked.
Jad 1.5.7b for Mac OS X (Rhapsody 5.3) on PowerPC platform (372317 bytes).
Jad 1.5.7a for Solaris 7 on Intel platform (252582 bytes) - try the version for Solaris 8 instead.
Jad 1.5.5.3 for AIX 4.2 on IBM RS/6000 platform (360970 bytes).

JadClipse

對於Eclipse下的反編譯插件,使用較多的還有JadClipse,最新版本號為3.3.0,官方Wiki(http://jadclipse.sourceforge.net/wiki/)上說支持Eclipse 3.3M6以後的版本。確實,由於公司統一使用Yoxos來管理插件的安裝,更新等,所以當前使用的也是默認配置了JadClipse作為反編譯工具,本人親自使用過並測試過,在Eclipse 3.7中使用基本正常,除了首選項中的一個設置bug外。
由於JadEclipse 不內置反編譯解析器,而是使用jad程序(可在http://www.varaneckas.com/jad/ 下載)來反編譯。正是由於JadClipse是通過jad來反編譯,因此需要設置jad路徑即Java/JadClipse首選項中的Path to decompiler,默認的可能是.../plugins/com.tikal.eclipse.jad.runtime.linux_2008.1.28.jar/jad(如果是linux開發環境中,而在windows系統,可能是com.tikal.eclipse.jad.runtime.win32_2008.1.28.jar/jad)。
需要注意的是,這個設置是完全不能用,這就是我上面說的那個首選項bug。不過你可以參照如下步驟,即可讓JadClipse重新煥發活力,並且可成功反編譯。要不然當你打開class在JDT中的時候,會報異常,無法創建process什麼的。
首先,找到你當前Eclipse環境中plugins裡那個jad runtime 插件jar: linux是com.tikal.eclipse.jad.runtime.linux_2008.1.28.jar, windows系統是com.tikal.eclipse.jad.runtime.win32_2008.1.28.jar,可能其他的64位系統還有變化,本人沒有測試,不好意思。附加說明一點。由於本人長期使用的是Yoxos來管理項目裡的插件。所以對於本人的環境來說在當前用戶目錄中,路徑是 /home/kemix/.yoxoslauncher/plugins/。
然後,用解壓縮工具打開這個jar,把裡面的jad(linux)或者jad.exe(windows),解壓出來到一個目錄其他目錄。本人是放入jdk的bin目錄(/opt/jdk1.6.0_33/bin)中,因為這樣,即使想命令行執行,因為jdk的path已經設置到環境變量中了,當然就無需另行設置path,即可直接使用。
最後,回到Eclipse裡,重新設置首選項中的Path to decompiler,設置其為/opt/jdk1.6.0_33/bin/jad。再次打開你的class,如果看到反編譯的源碼,恭喜你,你已經可以自由的使用JadClipse了。
需要注意的是,假如,使用上述辦法抽取出來的jad程序仍舊無法正常反編譯你的class。那就要考慮可能是jar裡抽取出來的jad不支持當前系統平台,需要從上面Jad章節中Tomas Varaneckas 的個人網站下載。並按上面的步驟,設置首選項即可。

Copyright © Linux教程網 All Rights Reserved