由於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是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):
-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自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!
㈡ 反編譯的java源碼,裡面全是abcdef的類名和包名,如何解決
我沒有看見那一個工具能夠強大到原來的名稱都給你找回來的。
反編譯工具如果都這么強悍的話,那別人的編程代碼還有什麼秘密可言
㈢ java反編譯的幾種方式
第一種方式:Help——Eclipse Marketplace
安裝eclipse自帶的插件( Decompiler )
第二種方式:使用反編譯工具(XJad2.2等)
第三種方式:在cmd中的輸入javap -verbose HellloWorld.class 回車,此處的HelloWorld.class為自己創建的HelloWorld.java編譯後的class文件
㈣ java的public class後面的名字很長有空格,應該命名為什麼
Java的命名規范中不允許有空格,而且一個類名不要寫很長,那樣既沒有意義也影響可讀性和可維護性。當然如果非要那樣寫那可以給你個簡單的例子:
public class AbcdefGhjklmnOpqrstUvwxyz{
public void main(){
//這里寫業務代碼
}
}
從例子可以看升槐出就是把你想要空格的地方字母大寫,如果要命名漢租笑正字作為類名要麼就用下劃線分開弊悔,不能用空格
㈤ 如何將java中的.class文件反編譯
安裝Java jdk後
看安裝目錄里有沒有jad.exe,沒有要下載,一般都有的
配置Java環境變數
開始-運行-cmd-回車-進入命令行窗口:
cd+空格+class文件所在路徑:
按下面的命令進行反編譯:
例如:[2] jad -sjava example.class 回車
在目錄里可以看到example.java源文件
[1] 反編譯一個class文件:jad example.class,會生成example.jad,用文本編輯器打開就是java源代碼
[2] 指定生成源代碼的後綴名:jad -sjava example.class,生成example.java
[3] 改變生成的源代碼的名稱,可以先使用-p將反編譯後的源代碼輸出到控制台窗口,然後使用重定向,輸出到文件:jad -p example.class > myexample.java
[4] 把源代碼文件輸出到指定的目錄:jad -dnewdir -sjava example.class,在newdir目錄下生成example.java
[5] 把packages目錄下的class文件全部反編譯:jad -sjava packages/*.class
[6] 把packages目錄以及子目錄下的文件全部反編譯:jad -sjava packages/**/*.class,不過你仍然會發現所有的源代碼文件被放到了同一個文件中,沒有按照class文件的包路徑建立起路徑
[7] 把packages目錄以及子目錄下的文件全部反編譯並建立和java包一致的文件夾路徑,可以使用-r命令:jad -r -sjava packages/**/*.class
[8] 當重復使用命令反編譯時,Jad會提示「whether you want to overwrite it or not」,使用-o可以強制覆蓋舊文件
[9] 還有其他的參數可以設置生成的源代碼的格式,可以輸入jad命令查看幫助,這里有個人做了簡單的翻譯:jad命令總結
[10] 當然,你會發現有些源文件頭部有些注釋信息,不用找了,jad沒有參數可以去掉它,用別的辦法吧。
㈥ 我反編譯JAVA文件,有一些漢字信息就變成了\u9879 了
使用 jdk 自帶的 native2ascii.exe 工具,在你的 jdk文件夾/bin 下能找到。
針對你的問題,在 cmd 窗口中執行下面的命令即可(需要將 jdk文件夾/bin 加入到 path 環境變數中):
native2ascii -reverse C:\abc.java c:\abc2.java
(這里abc.java表示你的含有 \uxxxx 字元的java文件;
c:\abc2.java 表示轉後後的文件)
下面附上完整的 使用方法:
------------------------------
native2ascii用法解析
native2ascii是sun java sdk提供的一個工具。用來將別的文本類文件(比如
*.txt,*.ini,*.properties,*.java等等)編碼轉為Unicode編碼。為什麼要進行轉碼,
原因在於程序的國際化。
Java 編譯器和其它 Java 工具只能處理含有 Latin-1 和/或 Unicode 編碼(\udddd 記
號)字元的文件。native2ascii 將含有其它字元編碼的文件轉換成含 Latin-1 和/或
Unicode 編碼字元的文件。
若省略 outputfile,則使用標准輸出設備輸出。此外,如果也省略 inputfile,則使用
標准輸入設備輸入。
用法:native2ascii [-reverse] [-encoding 編碼] [輸入文件 [輸出文件]]
-[options]:表示命令開關,有兩個選項可供選擇
-reverse:
執行相反的操作:將含 Latin-1 和/或 Unicode 編碼字元的文件轉換成含本地編碼字元
的文件,不指定編碼情況下,將轉為本地編碼。
-encoding encoding_name
指定轉換過程使用的編碼名稱。預設的編碼從系統屬性 file.encoding 中得到。
encoding_name 字元串必須是下表第一欄所示的字元串。
[inputfile [outputfile]]
inputfile:表示輸入文件全名。
outputfile:輸出文件名。如果缺少此參數,將輸出到控制台
-------------------------------------------------------------
8859_1 ISO 8859-1
8859_2 ISO 8859-2
8859_3 ISO 8859-3
8859_4 ISO 8859-4
8859_5 ISO 8859-5
8859_6 ISO 8859-6
8859_7 ISO 8859-7
8859_8 ISO 8859-8
8859_9 ISO 8859-9
Big5 Big5 碼,繁體中文
CNS11643 CNS 11643,繁體中文
Cp037 美國、加拿大(兩種語言,法語)、荷蘭、葡萄牙、巴西、澳大利亞
Cp1006 IBM AIX 巴基斯坦(烏爾都語)
Cp1025 IBM 多語種西里爾語:保加利亞、波斯尼亞 黑塞哥維那、馬其頓 (FYR)
Cp1026 IBM Latin-5,土耳其
Cp1046 IBM Open Edition US EBCDIC
Cp1097 IBM 伊朗(波斯語)/波斯
Cp1098 IBM 伊朗(波斯語)/波斯 (PC)
Cp1112 IBM 拉脫維亞,立陶宛
Cp1122 IBM 愛沙尼亞
Cp1123 IBM 烏克蘭
Cp1124 IBM AIX 烏克蘭
Cp1125 IBM 烏克蘭 (PC)
Cp1250 Windows 東歐
Cp1251 Windows 斯拉夫語
Cp1252 Windows Latin-1
Cp1253 Windows 希臘
Cp1254 Windows 土耳其
Cp1255 Windows 希伯萊
Cp1256 Windows 阿拉伯
Cp1257 Windows 波羅的語
Cp1258 Windows 越南語
Cp1381 IBM OS/2, DOS 中華人民共和國 (PRC)
Cp1383 IBM AIX 中華人民共和國 (PRC)
Cp273 IBM 奧地利、德國
Cp277 IBM 丹麥、挪威
Cp278 IBM 芬蘭、瑞典
Cp280 IBM 義大利
Cp284 IBM 加泰羅尼亞語/西班牙、拉丁美洲西班牙語
Cp285 IBM 英國、愛爾蘭
Cp297 IBM 法國
Cp33722 IBM-eucJP - 日語 (5050 的超集)
Cp420 IBM 阿拉伯
Cp424 IBM 希伯萊
Cp437 MS-DOS 美國、澳大利亞、紐西蘭、南非
Cp500 EBCDIC 500V1
Cp737 PC 希臘
Cp775 PC 波羅的語
Cp838 IBM 泰國擴展 SBCS
Cp850 MS-DOS Latin-1
Cp852 MS-DOS Latin-2
Cp855 IBM 斯拉夫語
Cp857 IBM 土耳其語
Cp860 MS-DOS 葡萄牙語
Cp861 MS-DOS 冰島語
Cp862 PC 希伯萊
Cp863 MS-DOS 加拿大法語
Cp864 PC 阿拉伯語
Cp865 MS-DOS 日爾曼語
Cp866 MS-DOS 俄語
Cp868 MS-DOS 巴基斯坦語
Cp869 IBM 現代希臘語
Cp870 IBM 多語種 Latin-2
Cp871 IBM 冰島語
Cp874 IBM 泰國語
Cp875 IBM 希臘語
Cp918 IBM 巴基斯坦(烏爾都語)
Cp921 IBM 拉脫維亞、立陶宛(AIX, DOS)
Cp922 IBM 愛沙尼亞 (AIX, DOS)
Cp930 與 4370 UDC 混合的日語,5026 的超集
Cp933 與 1880 UDC 混合的韓文,5029 的超集
Cp935 與 1880 UDC 混合的簡體中文主機,5031 的超集
Cp937 與 6204 UDC 混合的繁體中文,5033 的超集
Cp939 與 4370 UDC 混合的日語拉丁字母,5035 的超集
Cp942 日語 (OS/2),932 的超集
Cp948 OS/2 中文(台灣),938 超集
Cp949 PC 韓文
Cp950 PC 中文(香港、台灣)
Cp964 AIX 中文(台灣)
Cp970 AIX 韓文
EUCJIS JIS, EUC 編碼、日語
GB2312 GB2312, EUC 編碼、簡體中文
GBK GBK, 簡體中文
ISO2022CN ISO 2022 CN, 中文
ISO2022CN_CNS ISO-2022-CN 形式的 CNS 11643,繁體中文
ISO2022CN_GB ISO-2022-CN 形式的 GB 2312,簡體中文
ISO2022KR ISO 2022 KR, 韓文
JIS JIS, 日語
JIS0208 JIS 0208, 日語
KOI8_R KOI8-R, 俄語
KSC5601 KS C 5601, 韓文
MS874 Windows 泰國語
MacArabic Macintosh 阿拉伯語
MacCentralEurope Macintosh Latin-2
MacCroatian Macintosh 克羅埃西亞語
MacCyrillic Macintosh 斯拉夫語
MacDingbat Macintosh Dingbat
MacGreek Macintosh 希臘語
MacHebrew Macintosh 希伯萊語
MacIceland Macintosh 冰島語
MacRoman Macintosh 羅馬語
MacRomania Macintosh 羅馬尼亞語
MacSymbol Macintosh 符號
MacThai Macintosh 泰國語
MacTurkish Macintosh 土耳其語
MacUkraine Macintosh 烏克蘭語
SJIS Shift-JIS, 日語
UTF8 UTF-8
㈦ java反編譯工具哪個功能比較強大些
jd-gui ,最好用的一款,
反編譯超強,
㈧ javac 編譯錯誤 提示代碼太長 請問javac對java文件的大小有限制嗎
這個因該沒有,
㈨ 最好的java反編譯工具是哪個
1、Java反編譯插件 —— Jadclipse
JadClipse是Jad的Eclipse插件,是一款非常實用而且方便地Java反編譯插件,我們只需將下載的插件包復制到eclipse的plugins目錄下,然後修改window -> Preferences -> Java -> JadClipse 下的Path to decompiler ,如:C:\pin\jadnt158\jad.exe,最後在Windows -> Perference -> General -> Editors -> File Associations中修改「*.class」默認關聯的編輯器為「JadClipse Class File Viewer」 即可。
2、Java反編譯工具 jad
jad是一款使用非常廣泛地Java反編譯工具,上面這款Jadclipse就是基於jad的反編譯插件,JAD 文件包含 MIDlet 套件的標題信息,例如開發應用程序的公司、應用程序名稱和大小。
3、Java 反編譯器 JD-GUI
JD-GUI 是一個用 C++ 開發的 Java 反編譯工具,由 Pavel Kouznetsov開發,支持Windows、linux和蘋果Mac Os三個平台。而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI不需要安裝,直接點擊運行,可以反編譯jar,class文件。
4、Java反編譯器 jdec
jdec是一個Java反編譯器。它能夠把出現在一個.class文件中的位元組碼還原成Java源代碼,反編譯的結果幾乎與原始Java文件相同。它還自帶一個利用swing開發的用戶操作界面。
5、uuDeJava
uuDeJava是Java Class文件的反編譯工具。反編譯的Java源程序被輸出到Class的相同目錄。內部使用jad.exe。反編譯Class文件時,可以直接點擊Class文件(關聯後),或者選中文件或目錄發送到uuDeJava的快捷方式。還可以拖動文件或目錄到uuDeJava的主窗口。
6、Java 反向工程軟體 Minjava
Minjava 是一個 Java 反向工程軟體,可幫助理解已存在一些 Java 軟體的架構和行為。
7、Java Decompiler
這款反編譯器叫 「Java Decompiler」, 由 Pavel Kouznetsov開發,目前最新版本為0.2.5. 它由 C++開發,並且官方可以下載 windows、linux和蘋果Mac Os三個平台的可執行程序。