=====================================================================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代碼。二、 源碼開放的JODEJODE是全球最大的開源專案網站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即可。 新加入的類包或是類的名字會在左側視窗出現,雙擊類包名可以展開分類樹結構,雙擊需要反編譯的類名則在右上方的視窗中直接顯示反編譯後的原始碼。 三、 獨樹一幟的DAVADAVA不是一個獨立的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了,怕是有些程式也不太好反編了)
轉自:http://home.donews.com/donews/article/9/93121.html
看了這個資料之後,比較了一下,決定選jode,覺得介面很簡潔乾淨,而且比較小,不用安裝,只要一個jar檔案,並且發現還帶有eclipse外掛程式。
Jode 反編譯專家 Jode 是一個十分突出的反編譯專家,特別是同Eclipse一起使用時尤為方便,下面介紹一下安裝方法:
help => Software Updates => Find and Install... => Search for new features to install,單擊"New Remote Site..." 在URL欄輸入 http://www.technoetic.com/eclipse/update 然後下一步,就可以看到“jode decompiler plugin *.*”了,選上安裝就可以了,由於Jode Decompiler是純Java編寫的所以也不需要其他的什麼組件來支援了,安裝好了可以看到Window => Preferences... => Java => Jode Decompiler選項卡。安裝好了再設定一下檔案關聯就可以了,Window => Preferences... => General => Editors => File Associations找到"*.class"在"Associated editors"裡面可以看到"Jode class file viewer"選中它再單擊Default按鈕就OK了.
現在就可以使用Jode查看包括Jar包內.class檔案的原始碼了。
當然,首先必須保證你開啟的.class檔案中所引用的包全部都在項目中!!! 轉自:http://www.blogjava.net/hengheng123456789/articles/100939.html