無心間搜索到了這麼一個好東東,不敢獨享,特分享給你們。
我這裏用的是最新版Jad v1.5.8g,能夠到"官方"網站上去下載,
http://www.kpdus.com/jad.html或者華軍軟件裏也有,但版本可能不是最新的。下好之後解壓就能夠用了,軟件就只有一個exe文件和一個幫助文件,爲了方便使用,我直接將exe文件放到JDK的bin目錄裏了:)
下面先來看看從網上搜集來的介紹:在衆多的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是使用Microsoft Visual C++開發的,運行速度很是快,能夠處理很複雜的JAVA編譯文件。衆多的參數使JAD能夠靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。因爲JAD參數太多,不必一一解釋,其中有幾個最經常使用的以下:
-d <dir> - 用於指定輸出文件的目錄
-s <ext> - 輸出文件擴展名(默認爲: .jad),一般都會把輸出文件擴展名直接指定爲.java,以方便修改的從新編譯。
-8 - 將Unicode字符轉換爲ANSI字符串,若是輸出字符串是中文的話必定要加上這個參數才能正確顯示。
最經常使用的反編譯指令以下所示:
Jad -d c:\test -s .java -8 HelloWorld.class
執行效果以下:
這將當前目錄下的HelloWorld.class反編譯爲HelloWorld.java並保存在c:\test目錄裏,其中的提示輸出爲中文,而不是Unicode代碼。
附件:對下載後的說明文檔的簡單翻譯,但願對你有所幫助(mathsfan修改於2006.10.29,翻譯的很差請見諒)
0、1略去
二、怎樣使用JAD
反編譯一個簡單的java class文件'example1.class'用以下命令:
jad example1.class
這個命令將在當前目錄下建立一個'example1.jad'文件,假如當前目錄下存在這個文件,則JAD會提示你覆蓋它與否。
選項 -o 容許覆蓋時沒有任何提示。
選項 -s <ext>容許改變輸出文件的後綴名:
jad -sjava example1.class
這個命令將要建立'example1.java'文件。在一塊兒使用-o 和 -sjava選項時請當心,由於JAD會附帶的重寫你的源文件。
JAD使用JAVA class的名字做爲輸出文件的名字。例如,假如
class
文件
'example1.class'
包含
JAVA class 'test1'
那麼
JAD
將會建立文件
'test1.jad'
而不是
'example1.jad'
。假如你想具體指明你的輸出文件的名字使用輸出重命名:
jad -p example1.class > myexm1.java html
選項 –d容許你具體指明另外的輸出文件目錄,無論這個目錄是新建的、默認的或者當前目錄。例如: java
jad -o -dtest -sjava *.class 工具
(或者 jad -o -d test -s java *.class, 這個有一樣的效果) 優化
這個命令將在當前目錄下反編譯全部的.class文件並在'test'文件夾下創建全部擴展名爲.java的輸出文件。 網站
假如你想反編譯整個目錄樹下的JAVA classes,使用以下命令: 加密
jad -o -r -sjava -dsrc tree/**/*.class url
這個命令將反編譯當前目錄樹裏全部的.class文件而且在當前目錄下創建src文件夾後根據包的名字來輸出文件。例如,假若有一個文件'tree/a/b/c.class'在包'a.b'下包含了class 'c',那麼輸出文件的名字爲'src/a/b/c.java'。 spa
在先前的命令上將通配符那裏註釋掉。則它是用JAD來處理而不是command殼,因此在UNIX上的最後一次參數將會被單獨引用。 命令行
jad -o -r -sjava -dsrc 'tree/**/*.class' 翻譯
你想檢查編譯後的文件的正確性或者出於好奇的狀況下,這裏有一個選項 –a 將會告訴JAD給輸出的JAVA虛擬字節碼註解。