1、定义
代码混淆:将发布的程序中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。
2、代码混淆方法
1)重命名类名、方法名、变量名2)在程序中注入坏指令,以防止反编译程序
3)布局混淆,通过重命名标识符(用随机标识替换)和移除调试信息、注释、无用方法
4)控制流混淆,如类文件中包含方法a,混淆后增加一个if...else...分支
5)数据结构混淆,打乱程序数据结构,加密字符串信息,包含修改继承关系、重构数组等
3、代码混淆器proGuard
proGuard主要做处理:压缩、混淆
1)压缩。Java源代码(.java文件)通常被编译为字节码(.class文件)。而完整的程序或程序库通常被压缩和发布成Java文档(.jar文件)。字节码比Java源文件更简洁,但是它仍 然包含大量的无用代码,尤其它是一个程序库的时候。ProGuard的压缩程序操作能分析字节码,并删除无用的类、字段和方法。程序只保留功能上的等价,包括异常堆栈描述所需要的信息。
2)混淆。通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。有时,这是令人厌恶的。例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。