抵抗符号执行的不透明谓词混淆技术研究

随着移动互联网的发展,应用软件的数量在不断增长,同时针对软件程序的逆向攻击也越来越多。目前基于符号执行的程序分析技术能够对混淆后的程序进行自动化去混淆攻击,给现有的不透明谓词代码混淆技术带来了很大的挑战。为了克服现有不透明谓词混淆的缺点,本文提出了一种新的能够抵抗符号执行的不透明谓词,并且基于这种不透明谓词设计并实现一个抵抗符号执行的自动化代码混淆方案。本文研究的主要工作和创新点如下:一、提出了一种新的基于置换的不透明谓词。为了抵抗基于符号执行的程序分析,本文提出了一种基于置换函数的单射性来构造不透明谓词的方法,通过使用比特向量上的置换函数,再结合函数复合的性质,构造出关于置换函数单射性的恒等式作为不透明谓词。本文提出的不透明谓词构造方法只需要将简单的置换函数进行函数复合,就足以构造出具有很高复杂度的比特向量约束。通过构造复杂的路径约束,不透明谓词就能有效增加符号执行引擎中约束求解器的求解时间,以此达到抵抗符号执行分析的目的。基于置换的不透明谓词克服了现有不透明谓词安全性低的缺点,此外还具有构造简单、运行高效、通用性强、隐蔽性好等优点。二、设计了一个新的使用基于置换的不透明谓词的自动化代码混淆框架。本文设计的这种自动化代码混淆框架只需要输入程序的源代码,就能够自动化地在程序中构造出各种类型的基于置换的不透明谓词。通过对程序进行分析,混淆框架能够自动地向程序的抽象语法树中插入构造的不透明谓词,并生成对应的虚假代码,最终输出混淆后的程序二进制代码,实现虚假控制流混淆。混淆框架还可以使用其他代码控制流混淆技术作为辅助,进一步提高混淆的复杂程度。通过使用基于置换的不透明谓词,自动化代码混淆框架能让混淆后的程序获得抵抗符号执行的能力。三、基于LLVM编译器框架编程实现了一个自动化代码混淆工具。利用自动化代码混淆工具,本文使用了Angr符号执行引擎和多种现代SMT求解器,对52种不同类型的基于复合置换函数的不透明谓词进行了安全性和高效性上的实验与评估。实验结果显示,相比于现有不透明谓词,基于置换的不透明谓词使符号执行的平均分析时间从3秒左右增加到500秒以上;使SMT求解器的求解时间从最短的0.05秒以下最高增加到12小时以上,同时在执行时间上的开销只增加了约5.9%,在代码体积上的开销只增加了约6.2%。实验表明基于置换的不透明谓词混淆具有良好的安全性和高效性。

代码混淆; 不透明谓词; 符号执行; 约束求解; 置换函数;

张玉清; 王文杰;

10.27389/d.cnki.gxadu.2019.000413

TP311.1

29736398K
在线咨询 用户反馈