1. 程式人生 > >MAC下Java 反編譯利器 JD-GUI/Jad/JadClipse

MAC下Java 反編譯利器 JD-GUI/Jad/JadClipse

文章出處:  http://blog.sina.com.cn/s/blog_75d509310101p5yy.html

對於Java開發人員而言,沒有原始碼可能讓你無法忍受,不知道大家跟我是否有相同的感受?

  尤其是當除錯debug遇到問題的時候,你是否有衝動並急需想了解第三方jar內部實現機制以及實現原理,以便為了更好的解決問題,高效的開發呢?
   當然對於技術大牛們,研究原始碼不是為了解決問題,而是為了某種“信仰”——淘金於優越程式碼架構。



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


JD-GUI
 首先,我們來看下官方出品的JD-GUI的主介面截圖:
Java <wbr><wbr>反編譯利器 <wbr><wbr>JD-GUI/Jad/JadClipse <wbr><wbr>(原創, <wbr><wbr>收錄)


   在此,提供原下載連結地址:
  (最新版本為0.3.5,釋出於2012年10月18日,而核心包JD-Core則同時釋出,但是版本號為0.6.2)


   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。

Java <wbr><wbr>反編譯利器 <wbr><wbr>JD-GUI/Jad/JadClipse <wbr><wbr>(原創, <wbr><wbr>收錄)

支援平臺:
  • Windows 32/64-bit
  • Linux 32/64-bit
  • Mac OSX 32/64-bit on x86 hardware
安裝方式:
 可通過Eclipse,Help>Install new software.
  • Size : 2.61M
  • MD5 checksum : AACEB711244D53A21CED28D688741CD5
  • 當前版本為0.1.4,相比前一0.1.3版本,釋出於2009年12月17日而言,最新的版本釋出於2013年8月15日,值得慶賀,還以為不會更新了呢。Java <wbr><wbr>反編譯利器 <wbr><wbr>JD-GUI/Jad/JadClipse <wbr><wbr>(原創, <wbr><wbr>收錄)

事實上,無論是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檔案。當你想解除安裝此程式的時候,直接刪除這兩個檔案即可。(安全無毒副作用Java <wbr><wbr>反編譯利器 <wbr><wbr>JD-GUI/Jad/JadClipse <wbr><wbr>(原創, <wbr><wbr>收錄)).

Jad

 當然可能上面的工具無法滿足你的需求,比如你的在AIX平臺上,需要反編譯class。此時,就只能使用命令的方式(jad)來反編譯.
 Tomas Varaneckas 的個人網站上基本涵蓋了所有平臺上的jad程式。
 URL: http://www.varaneckas.com/jad/
 同時也在此提供下載連結及各平臺jad。



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重新煥發活力Java <wbr><wbr>反編譯利器 <wbr><wbr>JD-GUI/Jad/JadClipse <wbr><wbr>(原創, <wbr><wbr>收錄),並且可成功反編譯。要不然當你開啟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 的個人網站下載。並按上面的步驟,設定首選項即可。