论文摘要
由于计算机软件是一种极易复制篡改的特殊商品,因此,过去的几年,许多关注于软件数据的机密性、完整性和可用性的研究得以展开。特别是随着多媒体的应用和网络的普及,多媒体数据的安全也成为了保护的焦点。同时,软件产品的唯一性也给软件的保护提出了一个巨大的挑战,这主要是基于:首先,由于软件可以被逆向工程破解,从而导致机密算法等的流失;其次,软件可以被有目的性的修改,从而使软件做出超出预期和准许的行为。目前,商业软件越来越普遍的采取非二进制的代码形式发行,比如JAVA的字节码,但这些形式的代码包含了大部分的源码结构等信息,使得对它们的逆向工程变得更加容易,源代码也更易于被提取。同时由于各种政治经济和文化的原因,使得目前对软件的知识产权保护十分薄弱。本文首先描述了针对软件安全的攻击模型,特别提到了恶意主机的威胁,以及多种软件保护技术手段,比如:网络验证保护、硬件辅助保护、软件水印保护和防篡改保护等。但本文的主要内容是代码混淆的软件保护技术,代码混淆技术是在保持原程序语义功能一致的前提下,通过混淆原程序的代码信息使得恶意用户即使得到了混淆之后的代码也无法得知相关机密数据信息,以此来达到软件保护的目的。针对目前混淆技术主要局限于名称混淆等情况,本文采用基于JAVA字节码的面向对象的控制流混淆和设计混淆算法实现混淆转换。文中的类聚合和类分裂是两种面向对象编程的设计混淆方法,其中类聚合就是将两个或两个以上的类用一个类代替的方法,类分裂则是将一个类用两个或两个以上的类替代的方法,控制流混淆则是对程序执行流程的混淆方法。除此以外,JAVA的体系架构、JAVA虚拟机、混淆的定义和分类以及评测标准都将在本文中进行说明。本文最后设计和实现一个基于对JAVA字节码进行保护的代码混淆工具,并采用了控制流混淆、类聚合和类分裂的算法原则,同时从理论和实际两方面分析混淆转换的有效性和性能过载等方面的实验结果。