java中常用的反編譯工具是 java Decompiler,使用方法如下:
為廣水等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及廣水網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、廣水網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
1、雙擊打開java Decompiler.exe,如圖:
2、通過file-》open file打開想要反編譯的class文件:
3、查看反編譯結(jié)果:
和javap功能差不多,就是進(jìn)行反編譯~把.class文件反編譯成原來的JAVA代碼~
由于JAVA語言安全性高、代碼優(yōu)化、跨平臺(tái)等特性,從1995年5月由SUN公司發(fā)布后,迅速取代了很多傳統(tǒng)高級語言,占據(jù)了企業(yè)級網(wǎng)絡(luò)應(yīng)用開發(fā)等諸多領(lǐng)域的霸主地位。
不過,JAVA最突出的跨平臺(tái)優(yōu)勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運(yùn)行在虛擬機(jī)環(huán)境中,這使得JAVA的反編譯要比別的高級語言容易實(shí)現(xiàn),并且反編譯的代碼經(jīng)過優(yōu)化后幾乎可以與源代碼相媲美。
為了更好地保護(hù)知識產(chǎn)權(quán),避免本公司的智力成果輕易被人竊取,開發(fā)者有必要對反編譯工具深入了解,以便有針對性地采取保護(hù)措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應(yīng)用廣泛的JAD
在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和國產(chǎn)的JAVA源代碼反編譯專家。
JAD本身是一個(gè)命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內(nèi)核的基礎(chǔ)之上加了一個(gè)圖形界面而已。這么多種產(chǎn)品的共同選擇,足可證明JAD在JAVA反編譯領(lǐng)域中的尊貴地位。
JAD是使用Microsoft Visual C++開發(fā)的,運(yùn)行速度非常快,可以處理很復(fù)雜的JAVA編譯文件。眾多的參數(shù)使JAD可以靈活應(yīng)付多種加密手段,令反編譯的代碼更加優(yōu)化和易讀。由于JAD參數(shù)太多,沒必要一一解釋,其中有幾個(gè)最常用的如下(以JAD 1.5.8f版本為例):
-d
- 用于指定輸出文件的目錄
-s - 輸出文件擴(kuò)展名(默認(rèn)為: .jad),通常都會(huì)把輸出文件擴(kuò)展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字符轉(zhuǎn)換為ANSI字符串,如果輸出字符串是中文的話一定要加上這個(gè)參數(shù)才能正確顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令將當(dāng)前目錄下的javatest.class反編譯為javatest.java并保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。
二、 源碼開放的JODE
JODE是全球最大的開源項(xiàng)目網(wǎng)站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術(shù)等,更是出類拔粹。
JODE本身也是純JAVA開發(fā)的,最近越來越多的JAVA反編譯軟件也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。
JODE是一個(gè)可運(yùn)行的JAR文件,在windows環(huán)境下雙擊即可運(yùn)行。
需要特別說明的是,JODE不是通過常規(guī)的Open-File的方式來加載JAVA編譯后的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實(shí)現(xiàn)的,單獨(dú)的類文件可以將它的上一級目錄作為Classpath輸入,然后再選擇Reload Classpath即可。
新加入的類包或是類的名字會(huì)在左側(cè)窗口出現(xiàn),雙擊類包名可以展開目錄樹結(jié)構(gòu),雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯后的源代碼。
三、 獨(dú)樹一幟的DAVA
DAVA不是一個(gè)獨(dú)立的JAVA反編譯器,而是JAVA代碼優(yōu)化工具Soot的一部分。Soot和JODE一樣是純JAVA開發(fā)的,也是一個(gè)獨(dú)立的JAR包,但卻不能通過雙擊直接運(yùn)行,而是象JAD一樣在命令行狀態(tài)運(yùn)行。
Soot對環(huán)境變量的配置要求非常嚴(yán)格,通常情況下要對CLASSPATH做如下設(shè)置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當(dāng)前目錄,如果不加上這個(gè)的話Soot經(jīng)常會(huì)報(bào)一個(gè)找不到類的錯(cuò)誤。
DAVA是作為Soot的一個(gè)參數(shù)使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最后的類名不用帶.class后綴,因?yàn)樗J(rèn)是處理class文件,這個(gè)操作與前述的JAD的參數(shù)效果相同。
DAVA采取了流程優(yōu)化的方式進(jìn)行反編譯,與傳統(tǒng)反編譯思路不盡相同,但卻對改變流程類的加密方法有獨(dú)特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯(cuò)。經(jīng)測試,它們基本上都可以把JDK自帶的一些例程完全反編譯,然后不加任何修改可再編譯成功,并能正常運(yùn)行!
下好以后解壓就可以用了,軟件就只有一個(gè)exe文件和一個(gè)幫助文件,為了方便使用,我直接將exe文件放到JDK的bin目錄里了:)
下面先來看看從網(wǎng)上搜集來的介紹:在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front
End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java
Decompiler、NMI’s Java Class Viewer和國產(chǎn)的JAVA源代碼反編譯專家。
JAD本身是一個(gè)命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內(nèi)核的基礎(chǔ)之上加了一個(gè)圖形界面而已。這么多種產(chǎn)品的共同選擇,足可證明JAD
在JAVA反編譯領(lǐng)域中的尊貴地位。 JAD是使用Microsoft Visual
C++開發(fā)的,運(yùn)行速度非??欤梢蕴幚砗軓?fù)雜的JAVA編譯文件。眾多的參數(shù)使JAD可以靈活應(yīng)付多種加密手段,令反編譯的代碼更加優(yōu)化和易讀。由于
JAD參數(shù)太多,沒必要一一解釋,其中有幾個(gè)最常用的如下:
-d dir - 用于指定輸出文件的目錄
-s ext - 輸出文件擴(kuò)展名(默認(rèn)為: .jad),通常都會(huì)把輸出文件擴(kuò)展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字符轉(zhuǎn)換為ANSI字符串,如果輸出字符串是中文的話一定要加上這個(gè)參數(shù)才能正確顯示。
最常用的反編譯指令如下所示:
Jad -d c:\test -s .java -8 HelloWorld.class
這將當(dāng)前目錄下的HelloWorld.class反編譯為HelloWorld.java并保存在c:\test目錄里,其中的提示輸出為中文,
而不是Unicode代碼。
附件:對下載后的說明文檔的簡單翻譯,希望對你有所幫助(mathsfan修改于2006.10.29,翻譯的不好請見諒)0、1略去2、怎樣使用JAD
反編譯一個(gè)簡單的java class文件'example1.class'用如下命令: jad example1.class
這個(gè)命令將在當(dāng)前目錄下創(chuàng)建一個(gè)'example1.jad'文件,假如當(dāng)前目錄下存在這個(gè)文件,則JAD會(huì)提示你覆蓋它與否。選項(xiàng)
-o 允許覆蓋時(shí)沒有任何提示。選項(xiàng) -s ext允許改變輸出文件的后綴名: jad -sjava example1.class
這個(gè)命令將要?jiǎng)?chuàng)建'example1.java'文件。在一起使用-o 和
-sjava選項(xiàng)時(shí)請小心,因?yàn)镴AD會(huì)附帶的重寫你的源文件。JAD使用JAVA
class的名字作為輸出文件的名字。例如,假如class文件'example1.class'包含JAVA class
'test1'那么JAD將會(huì)創(chuàng)建文件'test1.jad'而不是'example1.jad'。假如你想具體指明你的輸出文件的名字使用輸出重命名:
jad -p example1.class myexm1.java
選項(xiàng) –d允許你具體指明另外的輸出文件目錄,不管這個(gè)目錄是新建的、默認(rèn)的或者當(dāng)前目錄。例如:
jad -o -dtest -sjava *.class
(或者 jad -o -d test -s java *.class, 這個(gè)有同樣的效果)
這個(gè)命令將在當(dāng)前目錄下反編譯所有的.class文件并在'test'文件夾下建立所有擴(kuò)展名為.java的輸出文件。
假如你想反編譯整個(gè)目錄樹下的JAVA classes,使用如下命令:
jad -o -r -sjava -dsrc tree/**/*.class
這個(gè)命令將反編譯當(dāng)前目錄樹里所有的.class文件并且在當(dāng)前目錄下建立src文件夾后根據(jù)包的名字來輸出文件。例如,假如有一個(gè)文件
'tree/a/b/c.class'在包'a.b'下包含了class 'c',那么輸出文件的名字為'src/a/b/c.java'。
在先前的命令上將通配符那里注釋掉。則它是用JAD來處理而不是command殼,所以在UNIX上的最后一次參數(shù)將會(huì)被單獨(dú)引用。
jad -o -r -sjava -dsrc 'tree/**/*.class'
你想檢查編譯后的文件的正確性或者出于好奇的情況下,這里有一個(gè)選項(xiàng) –a 將會(huì)告訴JAD給輸出的JAVA虛擬字節(jié)碼注解。