混淆技术

代码混淆技术

代码混淆(OBFUSCATE CODE)也称为花指令,可以用于保护源码,主要手段是将源码转换成功能等价但难以理解和阅读的形式。

混淆技术是JAVA程序的基本保护方法。JAVA混淆工具有商业的、免费的、开源的。大多都是对CLASS文件进行混淆处理,也有少量工具先对源代码进行处理,加大混淆力度。根据混淆的效果不同,可分为符号混淆、数据混淆、控制混淆、预防性混淆。

符号混淆

在CLASS中存在许多与程序执行本身无关的信息,例如方法的名称、变量名称、私有函数、局部变量,这些符号往往带有一定的含义以表明其作用。符号混淆就是将这些信息打乱,用无意义的字符替代。以增加代码的理解难度,但却不影响程序运行。

数据混淆

数据混淆是对程序使用的数据进行混淆,混淆的方法主要有改变数据存储及编码、改变数据访问。改变数据存储和编码可以打乱程序使用的数据存储方式。例如将数组拆分,将多维数组转化为多个一维数组,改变数据结构。这两种混淆方法通常是结合使用,对数据进行混淆,增加反编译的难度。

控制混淆

控制混淆就是对程序的控制流进行混淆,使程序的控制流更加难以反编译,通常控制流的改变需要增加一些额外的计算和控制流,因此对程序的性能会造成一些影响,控制混淆技术最为复杂,技巧最多。可分为几类:增加混淆控制,通过增加额外的复杂的控制流将程序原来的语义隐藏起来。控制流重组,例如可以将程序要调用的方法嵌入到调用程序中,或将一段代码转变为一个函数调用,还可以将一个循环的控制流拆分为多个循环控制流或转化为一个递归过程。

预防性混淆

预防性混淆通常是针对一些专用的反编译器设计的。这些技术主要是利用反编译器的弱点或者BUG来设计混淆方案。

几款混淆工具

PROGUARD

一款开源的JAVA字节码混淆工具。用于删除无用的类、字段、方法和属性,可以删除没有的注释最大限度地优化字节码文件。可以将类、字段、方法、属性的名称用其它无意义的字符替换。常用于ANDROID开发混淆最终项目,增加项目反编译的难度。PROGUARD下载地址

ALLATORI

一款非开源的JAVA OBFUSCATO二代混淆器。具有命名混淆、流混淆、调试信息混淆、字符串编码、水印等技术。不仅混淆还减小应用程序的大小,提高速度。ALLATORI下载地址