作者因最近分析一些JAVA程序
對JAVA的反編譯進行了一番了解
下面將我所了解的情況作以下介紹
希望對JAVA愛好者有所幫助
JAVA是采用一種稱做
字節編碼
的程序結構
分為小程序(嵌入到HTML文件中)和應用程序(直接在命令狀態下執行)兩種類型
無論哪種結構
一旦用JAVAC 命令編譯後
均變成後綴為CLASS的同名可執行文件
這種文件是不可閱讀的代碼
經查閱了SUN公司的JDK(JDK
)文檔資料後
我找到了一個據稱是可反編譯JAVA的JAVAP文件(EXE)
這個文件位於JDKBIN 下面
經按說明使用後
感到失望
原來這個
反編譯
僅可反編譯出JAVA程序的數據區(定義)
若干方法和類的引用等
這裡我用了一個簡單例子來說明問題
JAVA的源程序hello_java
java如下
import java
applet
*;
import java
awt
*;
public class hello_java extends Applet
{
public void paint(Graphics g)
{
g
drawString(
Hello Java!n
);
}
}
經用反編譯命令
javap
c
package
public
private hello_java hello
java
得到的反編譯結果(hello
java)如下
(有關javap命令的選擇參數請見其使用說明
這裡
c表示選擇了反編譯)
Compiled from hello_java
java
public synchronized class hello_java extends java
applet
Applet
/* ACC_SUPER bit set */
{
public void paint(java
awt
Graphics);
public hello_java();
Method void paint(java
awt
Graphics)
aload_
ldc #
bipush
bipush
invokevirtual #
return
Method hello_java()
aload_
invokespecial #
()V >
return
}
從上述結果不難看出該反編譯未能將源程序全譯出來
像語句g
drawString(
Hello Java!n
); 就沒有
隨著程序量增加
未能編譯的JAVA語句還會更多
所以這個反編譯程序僅能起個參考作用
幸虧有了INTERNET
筆者通過YAHOO很快找到了一個JAVA反編譯
自由軟件
(SHAREWARE)
這個軟件叫MOCHA
據說是一位
來歲的加拿大的研究生所完成
僅是個
?
版
原因是這位叫做H
P
VAN
VLIET的小伙子患癌逝世了
十分可惜呀!
經使用MOCHA反編譯軟件
感到這個軟件十分好用
筆者試反編譯多個JAVA程序
均得到很好的結果
這裡給出如何使用這個軟件
首先
用WINZIP等將
mocha
b
zip
解開得到
mocha
zip
文件
mocha
zip
不須再解開
這個包內包括了反編譯的類文件
只需將其拷貝到JDK所在的目錄下
如
c:jdkbin 此外
須設置路徑
SET CLASSPATH=c:myclasses;c:jdkbinmocha
zip
MOCHA用法
java mocha
Decompiler [
v] [
o] Class
class Class
class
java
調用Java虛擬機
mocha
Decompiler
指示要進行JAVA反編譯
v
選擇詳細輸出
o
選寫入已有的
mocha 文件
ClassX
class
指出要反編譯類名
注意
不需給出輸出的JAVA文件名
因為MOCHA自動產生一個與CLASS同名但擴展名為MOCHA的JAVA源文件
對於上例
可用命令
java mocha
Decompiler [
v] [
o] hello_java
class
得到的源文件
/* Decompiled by Mocha from hello_java
class */
/* Originally compiled from hello_java
java */
import java
applet
Applet;
import java
awt
Graphics;
public synchronized class hello_java extends Applet
{
public void paint(Graphics g)
{
g
drawString(
Hello Java!n
);
}
public hello_java()
{
}
}
我們不難發現
此文件與編譯前的JAVA源文件完全一樣!筆者曾經用MOCHA反編譯出最大為
K的源文件
均取得成功
在此
筆者向英年早逝的VLIET表示敬意
感謝他給我們留下這個工具軟件
如讀者下載MOCHA有困難
可給筆者來電子郵件
筆者可將MOCHA寄去
參考文獻
)
)
)
)
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25331.html