论文部分内容阅读
代码变形技术是软件保护技术的关键技术之一,属于针对逆向工程与加密技术互补的安全分支。代码变形技术按照类型分为词法变形、数据变形和控制流变形。本文主要研究了基于控制流平展化的控制流变形。在学术界普遍认为词法变形和数据变形对于攻击者所花费的时间远小于控制流变形所带来的逆向变换时间。因此,控制流变形是非常有效的一种变形方式。在控制流变形方面,硬件支持的控制流混乱方法由于当前计算机结构仍然是主流,寄希望与更好的软件方法。不透明谓词方法虽然有良好的实验结果,但是没有正式的理论基础。并进进程保护方法虽然有良好的理论基础,但是对原有代码的负载性较高。控制流平展化方法不但有正式的理论基础,并且对原有代码的负载性较低,因此是一种比较好的方法。但是,控制流平展化方法存在调度变量问题以及平展化特征,并且代码复杂性可以进一步提高。本文通过对控制流平展化的仔细研究提出了两个改进,调度变量动态赋值算法和构造插入伪代码块算法,进一步隐藏了原始代码的控制流信息。前者针对控制流平展化算法中的调度变量很容易在静态分析获得基本块之间的跳转关系,因此结合网络中链路状态路由思想针对调度变量进行保护,并给出了具体保护算法。后者是通过引入不透明谓词的思想,使得真实代码基本块和伪代码基本块混合存在,达到了代码控制流混乱的目的。实验结果表明改进后控制流平展化具有很好的变形能力,同时提高了逆向工程的难度,使得原始代码进一步得到保护。实验取得较好的结果。根据控制流平展化技术的详细研究,本文提出了一个多种控制流变形方式的控制流变形模型及其相关算法,并在原型系统实现了除控制流平展化以外,线性排列的变形方式和多重循环控制结构的变形方式。实验结果显示该控制流变形模型实现了代码的控制流信息不仅隐藏在数据流信息中,并且可以获得多种代码的变形方式,提高了逆向工程的难度。