Java 是一种跨平台的、解释型语言
Java 源代码编译中间“字节码”存储于 class 文件中
Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名、方法名等
因此,Java 中间代码的反编译就变得非常容易
目前市场上有许多免费的、商用的反编译软件,都能够生成高质量的反编译后的源代码
所以,对开发人员来说,如何保护Java 程序就变成了一个非常重要的挑战
本文首先讨论了保护 Java 程序的基本方法,然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序,分析如何在实践中保护 Java程序
反编译成为保护 Java 程序的最大挑战 通常 C、C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码
通常所有的源文件被编译、链接成一个可执行文件
在这些可执行文件中,编译器删除了程序中的变量名称、方法名称等信息,这些信息往往是由内存地址表示,例如如果需要使用一个变量,往往是通过这个变量的地址来访问的
因此,反编译这些本地的目标代码就是非常困难的
Java 语言的出现,使得反编译变得非常容易而有效
原因如下:1
由于跨平台的需求,Java 的指令集比较简单而通用,较容易得出程序的语义信息;2
Java 编译器将每一个类编译成一个单独的文件,这也简化了反编译的工作;3
Java 的Class 文件中,仍然保留所有的方法名称、变量名称,并且通过这些名称来访问变量和方法,这些符号往往带有许多语义信息
由于 Java 程序自身的特点,对于不经过处理的Java 程序反编译的效果非常好
目前,市场上有许多 Java 的反编译工具,有免费的,也有商业使用的,还有的是开放源代码的
这些工具的反编译速度和效果都非常不错
好的反编译软件,能够反编译出非常接近源代码的程序
因此,通过反编译器,黑客能够对这些程序进行更改,或者