关键词:
代码混淆
数据求精
同态混淆
JBOT
摘要:
近年来,Java语言得到广泛的应用,由于Java目标代码—字节码(bytecode)中包含了大部分的源码结构等信息,很容易被反编译成Java源码,所以研究有效的保护Java字节码的方法成为当务之急。目前应用最广泛也是最有效的方法就是软件混淆,对混淆技术的研究主要集中在控制混淆和数据混淆上,这两种技术在一定程度上提高了程序的复杂度和抗反编译的能力。 进入21世纪以来,对混淆技术的研究转移到了利用数学语言描述的理论领域,利用密码学等数学理论研究代码混淆技术的成果不断涌现,但是这些方法还不够成熟和完善。本文的针对此问题做了以下研究工作: 1.对Drape等人提出的基于数据求精的抽象数据类型的混淆方法做了深入研究,分析其存在的不足之处,提出了一种基于数据求精的图的混淆转换方法。首先采用数据求精方法证明了混淆的正确性,然后形式化的描述了混淆前后图的定义和相关操作,以及图的具体混淆过程,最后给出该方法的核心算法。 2.对William等人提出的基于同态函数的混淆方法做了深入研究,给出一种基于同态函数的方法的应用。首先描述了一维同态混淆和K维同态混淆的相关定义和表示方法,然后利用同态混淆变换给出了数组索引,平辗和折叠三种变换的变换方法,以及相应的变换实例,最后给出来该方法的核心算法。 3.设计并实现了一个Java字节码混淆工具(Java Bytecode ObfuscationTool,JBOT),对本文提出的两种算法进行测试分析。通过对几种典型算法混淆变换结果的分析表明:该混淆工具可以保证程序的功能的不变性,是一种有效的混淆转换工具;本文提出的两种混淆算法增加了程序的复杂度,可以达到软件保护的目的。