论文部分内容阅读
软件水印技术是一种将某种信息编码为程序中的某些特征信息,并将其嵌入到软件中的技术,这些信息可以用来鉴别所有权、追踪非法来源。软件水印技术越来越受到学术界和企业的关注,但是,如今尚没有一种的软件水印算法可以有效地抵御所有的已知攻击。因此,软件水印算法设计的目标是增加攻击者移除水印的难度,达到攻击所花费的代价大于所获利益的目的。本文在简要介绍软件保护、详细阐述软件水印等技术研究现状的基础上,从程序本身的性质出发,着重研究了利用函数栈帧和程序异常处理机制编码水印的方法,具体内容包括:(1)提出了一种基于函数栈帧的动态软件水印算法,算法将所需嵌入的水印信息通过RS码进行编码,生成待嵌入水印信息,并利用函数栈帧间的奇偶关系调制嵌入的水印信息。嵌入水印时,首先由特定输入得到目标程序的函数调用序列以及对应的函数栈帧;然后,构造局部变量插入到所需修改的函数中,改变函数栈帧间的奇偶关系,实现水印的嵌入。该算法以目标程序本身的函数为对象,将水印嵌入到标程序的函数调用序列中,水印与程序本身紧密结合,增加了水印的隐蔽性;RS码的良好纠错性能提升了水印的鲁棒性。实验结果表明,算法对代码重排、控制流混淆、随机插入变量和变量拆分等语义保持变换攻击具有良好的鲁棒性。(2)提出了一种基于程序异常处理的动态软件水印算法,算法将二进制水印信息编码为异常类型序列,通过构造触发条件和异常处理代码的方式,将异常类型序列嵌入到程序源码中。基于异常处理在程序中普遍存在的特性,以及所嵌入的异常处理与原程序本身的异常处理具有类似模式的特点,使得水印具有较好的隐蔽性;所嵌入的异常处理与原程序代码紧密结合并参与执行,增强了水印的难移除性;异常处理的嵌入标识增强了水印抵抗添加、代码重排等攻击的能力。实验结果表明,水印具有良好的抵抗保持语义变换攻击方面的能力,对代码压缩、加密、加壳等工具具有良好的鲁棒性。最后,对本文工作进行了总结,并对下一步研究进行了展望。