如何进行java代码混淆?

Java代码是非常容易反编译的,作为一种跨平台的、解释型语言,Java 源代码被编译成中间“字节码”存储于class文件中。由于跨平台的需要,这些字节码带有许多的语义信息,很容易被反编译成Java源代码。

Java代码混淆就是为了保护Java源代码,对编译好的class文件进行混淆处理。混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。

如何进行java代码混淆呢?我们可以用一个混淆代码的开源项目ProGuard来举例说明。它能够对字节码进行混淆、缩减体积、优化等处理。

Proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节:


1. 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute);

2. 优化(Optimize):对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;

3. 混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;

4. 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

Proguard混淆器不仅能够保护代码,而且能够精简编译后的程序大小,减少内存占用。市面上也有很多其他类型的代码混淆工具,这里就不一一介绍了。

更多代码混淆相关文章点击阅读:

代码混淆的原理是什么?常见代码混淆方法介绍

怎么做Android代码混淆?

如何系统有效地提升Android代码的安全性?

如何进行 C/C++代码混淆?