MAC下Java 反編譯利器 JD-GUI/Jad/JadClipse
阿新 • • 發佈:2019-01-26
文章出處: http://blog.sina.com.cn/s/blog_75d509310101p5yy.html
對於Java開發人員而言,沒有原始碼可能讓你無法忍受,不知道大家跟我是否有相同的感受?
尤其是當除錯debug遇到問題的時候,你是否有衝動並急需想了解第三方jar內部實現機制以及實現原理,以便為了更好的解決問題,高效的開發呢?當然對於技術大牛們,研究原始碼不是為了解決問題,而是為了某種“信仰”——淘金於優越程式碼架構。
廢話少說,當你苦於沒有原始碼的時候,你可以通過大家熟知的jad命令反編譯class來獲得原始碼。更加簡便的是你可以通過這個法國網站所開發的JD-GUI跟JD-Eclipse(老官網:
JD-GUI
首先,我們來看下官方出品的JD-GUI的主介面截圖:
在此,提供原下載連結地址:
(最新版本為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
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.
- 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。
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了。