JAVA語言是1995年5月由SUN公司發(fā)布的,由于其安全性高、代碼優(yōu)化、跨平臺等特性,迅速取代了很多傳統(tǒng)高級語言,占據(jù)了企業(yè)級網(wǎng)絡應用開發(fā)等諸多領域的霸主地位,新疆烏魯木齊軟件開發(fā)網(wǎng),m.jdtbank.com 整理。
不過,JAVA最突出的跨平臺優(yōu)勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環(huán)境中,這使得JAVA的反編譯要比別的高級語言容易實現(xiàn),并且反編譯的代碼經(jīng)過優(yōu)化后幾乎可以與源代碼相媲美。 為了更好地保護知識產(chǎn)權,避免本公司的智力成果輕易被人竊取,開發(fā)者有必要對反編譯工具深入了解,以便有針對性地采取保護措施。 目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品: 一、 應用廣泛的JAD 在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和國產(chǎn)的JAVA源代碼反編譯專家。 JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產(chǎn)品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。 筆者用來測試的JAD版本是1.5.8f,其運行界面如下圖: 需要特別說明的是,JODE不是通過常規(guī)的Open->File的方式來加載JAVA編譯后的類文件(*.class)或是類包(*.jar)的,而是通過在Options菜單中的Set Classpath來實現(xiàn)的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然后再選擇Reload Classpath即可:
新加入的類包或是類的名字會在左側窗口出現(xiàn),雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯后的源代碼。 三、 獨樹一幟的DAVA DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優(yōu)化工具Soot的一部分。Soot和JODE一樣是純JAVA開發(fā)的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態(tài)運行。
Soot對環(huán)境變量的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置: Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.; 其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經(jīng)常會報一個找不到類的錯誤。 DAVA是作為Soot的一個參數(shù)使用的,通常的用法如下: Java soot.Main –f dava –d c:\javasource javatest 注意最后的類名不用帶.class后綴,因為它默認是處理class文件,這個操作與前述的JAD的參數(shù)效果相同。 DAVA采取了流程優(yōu)化的方式進行反編譯,與傳統(tǒng)反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。 上述的三種工具各有千秋,但效果都非常不錯。經(jīng)測試,它們基本上都可以把JDK自帶的一些例程完全反編譯,然后不加任何修改可再編譯成功,并能正常運行! (文中工具均經(jīng)過本人親手測試,當時用的是jdk1.4.2_03,現(xiàn)在離寫文章的時候過了一年多了,jdk都出到1.5了,怕是有些程序也不太好反編了)
|