最近整理以前寫的東東,發現2004年底的時候對比各類Java反編譯器時記下來的一篇心得,也不知道是不是有點兒過時了,僅供大家參考吧。
=====================================================================
JAVA語言是1995年5月由SUN公司釋出的,由于其安全性高、代碼優化、跨平台等特性,迅速取代了很多傳統進階語言,占據了企業級網絡應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運作在虛拟機環境中,這使得JAVA的反編譯要比别的進階語言容易實作,并且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識産權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地采取保護措施。
目前,比較流行的JAVA反編譯工具超過30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
在衆多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和國産的JAVA源代碼反編譯專家等等。
JAD本身是一個指令行工具,沒有圖形界面,上述的這些工具大多是在JAD核心的基礎之上加了一個圖形界面而已。這麼多種産品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。
筆者用來測試的JAD版本是1.5.8f。

JAD是使用Microsoft Visual C++開發的,運作速度非常快,可以處理很複雜的JAVA編譯檔案。衆多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由于JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下:
-d
- 用于指定輸出檔案的目錄
-s - 輸出檔案擴充名(預設為: .jad),通常都會把輸出檔案擴充名直接指定為.java,以友善修改的重新編譯。
-8 - 将Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正确顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令将目前目錄下的javatest.class反編譯為javatest.java并儲存在c:\javasource目錄裡,其中的提示輸出為中文,而不是Unicode代碼。
二、 源碼開放的JODE
JODE是全球最大的開源項目網站Sourceforge.net的成員,不要以為源碼開放就小瞧它,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。
JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit''s JavaInsight plugin等。
JODE是一個可運作的JAR檔案,在windows環境下輕按兩下即可運作。
需要特别說明的是,JODE不是通過正常的Open->File的方式來加載JAVA編譯後的類檔案(*.class)或是類包(*.jar)的,而是通過在Options菜單中的Set Classpath來實作的,單獨的類檔案可以将它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。
新加入的類包或是類的名字會在左側視窗出現,輕按兩下類包名可以展開目錄樹結構,輕按兩下需要反編譯的類名則在右上角的視窗中直接顯示反編譯後的源代碼。
三、 獨樹一幟的DAVA
DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過輕按兩下直接運作,而是象JAD一樣在指令行狀态運作。
Soot對環境變量的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設定:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載下傳的soot類包放置的路徑,CLASSPATH末尾的.;代表了目前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。
DAVA是作為Soot的一個參數使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最後的類名不用帶.class字尾,因為它預設是處理class檔案,這個操作與前述的JAD的參數效果相同。
DAVA采取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些例程完全反編譯,然後不加任何修改可再編譯成功,并能正常運作!
(文中工具均經過本人親手測試,當時用的是jdk1.4.2_03,現在離寫文章的時候過了一年多了,jdk都出到1.5了,怕是有些程式也不太好反編了)
/*原創作品,轉載請注明出處*
<b></b>贊
<b></b>收藏
<b></b>評論
分享
微網誌
微信
舉報
上一篇:電子政務項目風險管理(上)
下一篇:Web2.0,盈利從現在開始!
java反編譯工具,java常見反編譯工具,Java反編譯工具jad,java反編譯工具(XJad),Java 反編譯工具下載下傳,apk反編譯java工具,java jar反編譯工具,java jdk反編譯工具,java 反編譯工具,java 反編譯工具 1.8