java

位置:IT落伍者 >> java >> 浏览文章

谈谈JAVA的反编译


发布日期:2019年07月29日
 
谈谈JAVA的反编译

作者因最近分析一些JAVA程序对JAVA的反编译进行了一番了解下面将我所了解的情况作以下介绍希望对JAVA爱好者有所帮助

JAVA是采用一种称做字节编码的程序结构分为小程序(嵌入到HTML文件中)和应用程序(直接在命令状态下执行)两种类型无论哪种结构一旦用JAVAC 命令编译后均变成后缀为CLASS的同名可执行文件这种文件是不可阅读的代码

经查阅了SUN公司的JDK(JDK)文档资料后我找到了一个据称是可反编译JAVA的JAVAP文件(EXE)这个文件位于JDKBIN 下面经按说明使用后感到失望原来这个反编译仅可反编译出JAVA程序的数据区(定义)若干方法和类的引用等

这里我用了一个简单例子来说明问题

JAVA的源程序hello_javajava如下

import javaapplet*;

import javaawt*;

public class hello_java extends Applet

{

public void paint(Graphics g)

{

gdrawString(Hello Java!n);

}

}

经用反编译命令javap c package public private hello_java hellojava

得到的反编译结果(hellojava)如下(有关javap命令的选择参数请见其使用说明这里c表示选择了反编译)

Compiled from hello_javajava

public synchronized class hello_java extends javaappletApplet

/* ACC_SUPER bit set */

{

public void paint(javaawtGraphics);

public hello_java();

Method void paint(javaawtGraphics)

aload_

ldc #

bipush

bipush

invokevirtual #

return

Method hello_java()

aload_

invokespecial # ()V >

return

}

从上述结果不难看出该反编译未能将源程序全译出来像语句gdrawString(Hello Java!n); 就没有随着程序量增加未能编译的JAVA语句还会更多所以这个反编译程序仅能起个参考作用

幸亏有了INTERNET笔者通过YAHOO很快找到了一个JAVA反编译自由软件(SHAREWARE) 这个软件叫MOCHA据说是一位来岁的加拿大的研究生所完成仅是个?原因是这位叫做HPVANVLIET的小伙子患癌逝世了十分可惜呀!

经使用MOCHA反编译软件感到这个软件十分好用笔者试反编译多个JAVA程序均得到很好的结果

这里给出如何使用这个软件首先用WINZIP等将mochabzip 解开得到mochazip文件mochazip不须再解开这个包内包括了反编译的类文件只需将其拷贝到JDK所在的目录下c:jdkbin 此外须设置路径SET CLASSPATH=c:myclasses;c:jdkbinmochazip

MOCHA用法

java mochaDecompiler [v] [o] Classclass Classclass

java 调用Java虚拟机

mochaDecompiler 指示要进行JAVA反编译

v 选择详细输出

o 选写入已有的mocha 文件

ClassXclass 指出要反编译类名

注意不需给出输出的JAVA文件名因为MOCHA自动产生一个与CLASS同名但扩展名为MOCHA的JAVA源文件

对于上例可用命令

java mochaDecompiler [v] [o] hello_javaclass

得到的源文件

/* Decompiled by Mocha from hello_javaclass */

/* Originally compiled from hello_javajava */

import javaappletApplet;

import javaawtGraphics;

public synchronized class hello_java extends Applet

{

public void paint(Graphics g)

{

gdrawString(Hello Java!n );

}

public hello_java()

{

}

}

我们不难发现此文件与编译前的JAVA源文件完全一样!笔者曾经用MOCHA反编译出最大为K的源文件均取得成功

在此笔者向英年早逝的VLIET表示敬意感谢他给我们留下这个工具软件

如读者下载MOCHA有困难可给笔者来电子邮件笔者可将MOCHA寄去

参考文献

)  

               

上一篇:JavaFX 推出移动版

下一篇:JavaMail 发送附件的例子