代码混淆(Obfuscated code)亦称
花指令,是将计算机
程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序
源代码,也可以用于程序编译而成的
中间代码。执行代码混淆的程序被称作代码
混淆器。已经存在许多种功能各异的代码混淆器。
Java是一种跨平台的、
解释型语言,Java
源代码编译成中间“
字节码”存储于
class文件中。由于跨平台的需要,
Java字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多
语义信息,很容易被反编译成Java源代码。为了防止这种现象,我们可以使用Java
混淆器对Java字节码进行混淆。
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和
指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的
英文字母代号,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。
混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失
部分信息的原因, 编译后jar文件体积大约能减少25% ,这对当前费用较贵的无线
网络传输是有一定意义的。