论文部分内容阅读
软件是IT产业最主要的资产形式。为了防范软件盗版等侵权行为,计算机学者们投入大量的精力用于软件保护技术的研究。其中,能够表征知识产权的软件水印技术最受关注。然而,近几年以逆向工程为代表的软件分析技术被广泛应用于攻击实践中,给软件水印带来了新的威胁。 为了检验现有软件水印抵抗逆向工程攻击的实际效果,本文借助二进制分析平台实现了静态-动态结合的二进制程序分析攻击,分别选取动态图水印、动态执行路径水印和动态线程水印作为分析目标,尝试总结每种动态水印的水印特征,并通过追踪水印特征来定位和移除水印代码,最终破坏水印信息。实验分析结果验证了现有软件水印存在的两个缺陷:水印代码或水印行为具有较明显的特征;水印代码与程序的执行逻辑不相关。 为弥补现有软件水印的缺陷,本文设计并实现了一种新型的、水印特征不明显的、能够与程序执行逻辑相结合的动态水印:基于路径模糊的动态水印。基本设计思想是利用条件异常代码替换分支跳转指令,再通过异常处理函数来捕获异常,实现程序原始控制流的转移。水印信息被隐藏在程序的动态跳转过程中,只有在水印提取条件满足时,条件异常代码才会被频繁触发执行,提取出隐藏的水印信息。基于路径模糊的动态软件水印并没有明显的水印特征,而且能够在隐藏程序分支信息的同时让水印代码与程序的执行逻辑相结合,极大地增强了动态水印抵抗逆向工程攻击的能力。本文通过对比实验从隐蔽性、鲁棒性、抗攻击性等方面验证了所设计动态水印特有的优势。