论文部分内容阅读
随着计算机技术的发展,现在的软件越来越复杂,其价值也由于软件厂商为此的巨大投入而得到了提升,软件盗版也因此日益严重。如何对软件进行有效地保护成为影响软件产业良性发展的重要课题。 为了能有效抵制盗版,国内外学者对软件保护技术给予了积极的探索,但现有技术在抵御盗版方面的实际效果不显著。软件水印是数字水印的重要分支,通过隐藏版权信息防止盗版。近年来,各种软件水印技术虽被陆续提出,但均难以在鲁棒性、信息隐藏量、及隐蔽性等方面综合满足实际的需求。 本文针对两种不同的软件水印技术,分别各自提出了一个方案。 一种是动态图软件水印技术,提出了基于防篡改的基数编码动态图软件水印方案。针对基数编码动态图抗攻击性弱的特点,一方面,把基数编码与平面环路树PPCT进行了混合编码。混合编码的图中有多个依一定次序连接的系数编码区,改变了基数编码图的单一链表结构并形成了较多的防篡改规则,从而提高了篡改图的感知能力。与此同时,图编码方法的主体是基数编码,可表现出较高的编码效率;另一方面,对此种动态图实施了防篡改的常量编码技术。由于混合编码形成的动态图类似PPCT,相比于基数编码图,其内部结构更丰富,因而也更易于实施防篡改。防篡改的方法是提取程序的常量,构造一个结构类似真实水印图且含有常量子图的伪水印图,并把程序中常量的引用替换成可从伪水印图中解码常量的一个方法调用。因为伪水印图结构上如同真实水印图,所以攻击者很难分辨。如果伪水印图被篡改,则程序的执行将可能不正常,从而使真实的水印图得到了保护。 最后,以 SandMark系统为平台,本文实现了该动态图水印方案,并通过该系统选取了不同编码方式的水印图进行嵌入实验,分析了它们的编码效率、鲁棒性、及对程序的过载影响等。 另一种是 PE文件格式的软件水印技术,提出了基于 Shamir门限和信息分存的PE文件格式软件水印方案。方案中,水印的嵌入是首先通过 Shamir门限分解水印,然后依次分存分解后的值到程序的某个执行轨迹中。每次分存时,形成了一个替换:把该轨迹中的一些指令替换成某个函数(称为分支函数)的调用指令。替换后,水印的分解值被分存到替换过程产生的冗余空间中。而程序的语义保持是通过构造并嵌入的分支函数来完成的;水印的提取是当嵌有水印的程序再次执行到此轨迹时,如果某个函数调用时的与实际的返回地址存在差异,则确定出一个水印分存的位置。当确定出多个位置并从这些位置提取出了不低于门限个数的分解值后,使用水印分解的逆过程来还原水印。 该方案的特点是:(1)替换后的语义还原使用了一个表格和哈希函数,并把程序中的指令地址特征作为表格的检索键值,攻击者若篡改了这些特征,程序的原始语义将不能正确还原,从而保证了嵌入水印的安全。(2)通过Shamir门限分解水印,只需要提取出部分信息就可得到水印。(3)分存后的水印是被混杂在PE文件的代码节中,提高了水印的隐藏性。 最后,本文在具体的平台下实现了该方案的水印系统,并通过该水印系统进行了水印的嵌入实验,分析了嵌入水印的抗攻击性、及对程序的过载影响。