论文部分内容阅读
随着社会经济的发展,全球应用程序商店的数量有所增长,其规模保大幅度扩张,移动应用程序的数量呈爆发式增长的同时也面临着许多挑战,其中一方面就是知识产权的保护[¨。随着网络的发展,移动应用程序传播的范围变得更加开放,移动应用程序传播的速度变得更加便捷,这在促进移动应用程序交流的同时,也为移动应用程序知识产权窃取提供了良好的温床。相比于iOS等其他平台的移动应用程序,Android应用程序由于Java语言编译后产生的中间代码会保留大量信息的原因,反编译后得到的代码具有很高的质量,基本上可以根据获取的应用程序信息重构程序,导致Java应用程序在代码保护上的保密性较低,使得Android应用程序的知识产权保护面临着很大的安全风险。在众多软件保护技术中,代码混淆是一种比较有效的保护技术,其基本思想是通过各种混淆技术对软件代码或数据进行保留语义的变换,使得对混淆后的代码进行分析的难度加大,进而达到保护软件代码安全的目的。代码混淆技术通过对程序的代码进行重新组织或处理,在确保混淆后的代码与混淆前的代码能够实现相同功能的前提下,使得混淆后的代码更难被分析,更难被反编译,即使反编译成功也难以得到程序的真正语义。相较于水印、防篡改等其他保护技术,代码混淆保护的是程序的代码,它并不改变程序实现的功能,即使是合法用户也无法从代码中获取程序的重要信息。本文重点研究面向Android智能终端应用程序的控制流混淆,设计并实现了控制流混淆方案,给出了相关算法的基本描述。本文在结合不透明谓词技术与插入分支代码的基础上,通过扁平化部分控制结构的方式,进一步破坏程序原控制流结构,在不过分增加开销的情况下,增加重构应用程序控制流图的难度,加强对应用程序的保护。本文主要工作如下:首先,结合Android智能终端应用程序的特点,研究了当前代码混淆技术及不透明谓词技术,对常见的混淆技术做了详细的介绍,并针对应用程序的保护需求及使用场景需求提出了基于控制流保护的混淆方案。其次,基于混淆工具理论模型以及本文的混淆方案,完成了混淆工具架构的设计,以及混淆工具的开发,实现控制流混淆方案。并逐步优化混淆方案及工具,提高混淆的灵活性和混淆效果。最后,结合混淆的评估标准,根据Android应用程序的特点及应用场景的需求,从代码长度、性能开销、语义复杂度等维度分析了实验结果,并与Proguard的混淆结果进行对比。