很长一段时间以来,很多的网友都给我来信说,怎么才能将Java的Class文件反编译成为Java文件。或者说明白一点,就是想看看人家的源代码,问我有没有办法,这确实是一个很难的问题。但也并不是没有解的。 我们知道,Java程序适合于在各种操作平台下使用,实际上,它的工作原理就是解释型的,打个比方,就好像每一台机器上面都有一个浏览器,我编译好程序的Class文件,这个文件就相当于一个HTML文件,这个文件能在每一台机器上面浏览。但假如Win9X/2000的系统用IE,而UNIX的Netscape,LINUX则用另外一种浏览器,这些机器都能看到我编写的这个HTML文件,虽然浏览时的界面不是完全相同,但却和各自的系统的样子差不多。它们对这个HTML文件的读取是解释型的,读多少,就显示多少。而Class文件,也就是这样一种文件。它在每一种系统种的存储格式都不一样。与各自的系统有关,但每个系统都认识。因为没有系统中都有相当于浏览器的JDK解释程序。而像可执行程序,即我们常见的exe文件,则是直接的二进制代码,这就与机器底层有关了,所以不同的操作系统的exe是不能混合用的。所以在Win9X/2000中,Class不是以直接的二进制存储的,它是介于文本文件与二进制文件之间的一种解释型。 既然Java程序是一种这样的程序,而现在它又没有什么加密的功能,因此,它是非常容易反编译的。可执行文件exe的反编译,一般只能反编译成汇编格式的文档,但是,Class文件则可以反编译成为Java文件,让人直接看到原始代码。JDK的工作原理我不知道,但它编译时将解释代码,JDK版本号等几乎所有的东西都编译进了CLASS,这实在是出乎我的意料之外了。 也该回答网友的问题了,将class 文件反编译成 java文件怎么弄,很简单,到网上下载一个反编译软件就可以了。这些软件的使用都非常的简单,不用学,一看就会。一般的下载软件的站点都可以下载得到。并且这一方面的软件不止一个,笔者曾经就用过的一个这样的反编译软件,这个反编译软件非常的厉害,我做过实验,所用的几个例子,都被它反编译出源代码来了,包括Application和Java Applet文件都能反编译,源代码之间的说明等解释内容竟然也反编译出来了,反编译后的源代码文件与我写的Java程序源代码文件几乎一模一样,效果非常的不错。只是不知道它反编译大型程序的能力如何,这倒没有试过。如果要反编译的软件不大的话,那绝对没有问题。只是请各位网友原谅,我不能乱讲话,否则就有官司打了。还麻烦各位自己去搜索一下了。这些反编译软件都是国外产的,国内没有,但许多国内站点都可以下载得到。 真的希望Sun公司能在这一方面能想一点办法,否则,安全性很难讲了。对自由软件来说,这非常的好,但对于一个公司来说,这就可能有点不好了,谁想让自己的软件能让别人看见源代码呢? |
正在阅读:Java程序的反编译问题Java程序的反编译问题
2004-02-14 09:34
出处:PConline
责任编辑:pjl