摘要:代码混淆技术是对软件进行保护的一种常用手段,它通过隐藏关键行为或对代码进行复杂化处理,使得程序更加难以理解,从而增加了攻击者逆向分析的难度。程序中包含了大量的分支控制信息。从二进制的角度看,它们以比较指令和条件跳转指令的形式出现,这些指令决定着程序的执行轨迹,逆向分析者可以利用暴露的分支控制信息获取程序的核心模块。因此,对程序的关键分支控制信息的保护尤为重要。<br> 当前,基于分支控制信息本身的混淆是混淆技术的一个难点,原因在于它们难于隐藏并且易于被反混淆工具进行逆向推理。基于前缀集合的单向保留前缀加密算法可以实现对分支的保护,但是由于求取前缀集合只能适用于正整数分支控制信息,同时在进行加密过程中容易暴露加密的长度,因此具有一定的局限性。本文提出了一种结合机器学习与单向保留前缀加密算法的分支混淆方法,分别利用人工神经网络和朴素贝叶斯分类器实现对分支控制信息的分类,从而使基于非等于关系的分支信息转化为等于关系的分支信息。在此基础上,利用单向保留前缀加密算法对分支两侧的变量或常量进行加密,该方案可以实现对实数域内任意的分支控制信息进行混淆,其逆向分析的难度等价于对单向函数的逆向计算以及对分类器的分类过程进行逆向分析。<br> 对于该混淆方案整体性能的评估,本文利用二进制分析平台 BitBlaze进行了抗攻击性测试,经过对程序进行动态跟踪以及静态分析,发现混淆后的程序无法利用约束求解工具推导出与输入路径相反的可行解,因此具有较强的抗攻击性。同时,对于程序执行的性能,本文利用标准测试集SPEC CPU2006中的程序作为测试样本,对程序中的独立分支信息或循环结构中的分支信息进行混淆。实验表明,分类器可以实现准确的分类效果,同时,在时间开销和空间开销等方面性能良好。因此,本文提出的混淆方案在不仅具有较高安全性,同时也具有一定的实用价值。
原文链接:http://d.wanfangdata.com.cn/Periodical/D796104
送人玫瑰,手留余香~如您已下载到该资源,可在回帖当中上传与大家共享,欢迎来CDA社区交流学习。(仅供学术交流用。)