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