推薦 Java 反組譯(Java Decompiler)工具

過程中才發現 JAD (JAva Decompiler) 過去在這個領域的重要性,許多工具底層都是以 JAD 做為 decompiling engine:

但 JAD 的官網從 2009-05 後就連不上(這裡還有 mirror),而且這個套件已經沒在維護了,最多只支援到 JDK 1.3 的 .class 檔。

目前知道能支援比較新 JDK .class 的工具只有 Java Decompiler (JD;剛好跟 DJ Java Decompiler 的 “DJ" 相反):


JD | Java Decompiler - JD-Core、JD-GUI 與 JD-Eclipse

The Java Decompiler Project 由 JD-Core、JD-GUI 還有 JD-Eclipse 組成,其中 JD-Core 做為 JD-GUI 跟 JD-Eclipse 的底層。除了 JD-Eclipse 之外,JD-Core 跟 JD-GUI 都是用 C++ 開發的,因此 JD-Core 跟 JD-GUI 在執行期都用不到 JRE。

這個專案的初衷就是要 decompile/analyze Java 5+ 的程式碼(事實上它支援 JDK 1.1.8 到目前最新的 1.7.0),支援 annotations 跟 generics 等語言的新特性。

JD 支援 Windows、Linux 及 Mac OS X 多個平台,甚至還提供了一個線上體驗的版本,只要將 .class 拖進瀏覽器,就會自動做 decompile 的動作。

JD-GUI 提供了很多實用的功能:

  • 除了開啟 .class 之外,也支援直接開啟 Jar 檔。好處是:
    • 可以從 Type Hierarchy 裡看出某個 class 跟同一個 Jar 檔裡其他 class 的繼承關係。
    • 某個 class 如果有引用到同一個 Jar 檔裡其他的 class 時,點 class name 就會連往該 class 的原始碼,相當方便。
  • Navigate > Open Type Hierarchy… 可以瀏覽目前的 class 在 type hierarchy 裡是處於哪個位置。
  • 還有一項特異功能,就是可以解析 .log 檔(Edit > Parse Log)。只要將帶有 stack trace 的 log 貼到視窗裡,點 class name 就會連往該 class 原始碼。

加上 JD-GUI 本身免安裝,使得它很適合在 production 環境下做 debuging 的工作,不需要花時間把對應的原始碼傳到 production 的機器上,尤其是 exception 是從 third-party 套件丟出來時。另外,JD 也透過 JD-Eclipse 提供了開發時期 debugging 的支援。

JD 可以用在非商業用途上,只要不將它包進商用軟體即可。

其他工具還有:


參考資料

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s