论文部分内容阅读
随着网络的广泛应用与虚拟机技术的出现,软件保护遇到前所未有的挑战。通过快捷的网络平台,软件产品可在短时间内大范围地传播,以前一对一的非法拷贝,变成大规模并行下载,单一的软件盗版者,变成成千上万个无法追踪的个体。而且,在虚拟机技术的支持下,中间码程序独立于任何机器硬件信息,其平台无关特性使逆向工程、反汇编、混淆等攻击更加有效。软件保护成为保障软件产业健康持续发展的迫切课题。软件保护技术研究角度多、实验手段丰富。国内外对软件保护技术进行了积极的探索,但现有技术主要以保障软件产品的分发、运行安全,满足分布式需求为主,在抵御盗版方面实际效果差,无突破性进展。软件水印是数字水印技术的重要分支,通过隐藏版权信息防止盗版。近年来,大量软件水印算法被提出来,但均存在鲁棒性差的问题,实用的软件水印技术仍然是一个空白。针对软件水印算法鲁棒性差的问题,本文提出一种新的基于切片规则的软件水印方案。方案利用移动计算中必须将应用程序进行代码分割的特点,借助切片工具,对源程序进行自动切片,不同的切片规则X产生不同的切片语句,水印信息嵌入在规则产生的切片语句中。然后,切片后的程序被分割转换为公开模块和隐秘模块两部分,公开模块在不安全的宿主上执行,隐秘模块运行在安全的主机上,两者通过远程过程调用进行交互。无论是公开模块还是隐藏模块,都不包含程序的全部信息,在无法恢复隐藏模块的前提下,攻击者只能得到两个模块间的交互行为。由于缺乏必要信息,想通过静、动态分析的方法反编译大型程序将非常困难。这使得系统在加大逆向工程难度的同时,有效隐藏了水印信息,提高了鲁棒性。另外,方案通过优化分割转换算法的设计,提高了两个模块间的交互效率,保障方案对系统运行时间的影响在可接受的范围内。水印提取是对切片规则与水印信息映射关系的证明,根据转换规则集成公开模块与隐秘模块的内容以证明水印存在。为了测试实际应用效果,本文通过实验论证了试图得到隐藏模块内容时的复杂度,并对公开模块和隐藏模块间的交互带来的时间代价进行了评估。实验结果证明,在保证一定隐密性和鲁棒性的同时,系统可将程序运行的影响控制在合理的范围内。基于程序切片规则的软件水印,是实用软件水印技术的有益探索。