论文部分内容阅读
混淆是一种用来增加逆向分析难度的软件保护技术。开展面向逆向分析的程序关键属性混淆技术研究,对优化混淆技术的理论模型,拓展混淆技术的应用领域,以及促进软件反逆向分析技术的发展,具有重要的理论价值和现实意义。本文着重对基于代码和数据属性的软件混淆方法中若干关键问题进行了研究。混淆技术研究成果和背景知识方面。首先概要介绍了当前混淆技术的研究进展,并从混淆方法,混淆评估方面指出了混淆技术研究存在的主要问题,在此基础上,就采用多种防御思想对程序关键代码和数据属性进行有效混淆的问题,给出了本文主要研究内容和组织结构。然后介绍了软件分类,软件语言层次,软件抽象属性,软件逆向分析的过程、方法和工具。最后介绍了几种典型软件反逆向分析技术的基本思想和原理,并提出了一种面向软件逆向分析的程序关键属性混淆评估框架。代码属性混淆方面。基于不同粒度的代码属性,从指令角度出发,提出了一种基于陷门不透明谓词的指令重叠和自修改混淆算法;从基本块角度出发,提出了一种基于指令片段多样化和执行路径随机化的混淆算法;从函数角度出发,提出一种基于多样化函数和多加解密算法随机执行的混淆算法。从指令系统角度出发,提出了一种基于代码并行化和多套虚拟指令集解释执行的混淆算法。 本研究主要内容包括:⑴针对静态反汇编能够准确对汇编指令序列中的控制转移指令进行正确解析,并进一步构建控制流图的问题,提出了一种基于陷门不透明谓词的指令重叠和自修改混淆算法。首先介绍了基于陷门不透明谓词的指令重叠和自修改混淆框架,基于陷门不透明谓词组合算式构造用来实现指令重叠和自修改的跳转和数据偏移,向程序嵌入不透明谓词组合算式、重叠指令和自修改代码实现跳转指令的混淆。然后阐述了一种基于二维超混沌映射方程组构造陷门不透明谓词簇的实现方法,由于二维超混沌系统的随机性和复杂性,混淆后程序能有效抵御静态反汇编分析。⑵针对控制流图的“动态提取,静态分析”的逆向方法,为了增加控制流图结构的复杂性和控制流执行路径的不确定性,提出一种基于指令片段多样化和执行路径随机化的混淆算法。首先构建了多种指令等价变换规则,然后运用这些规则生成构建多分支路径的多样化指令片段,并给出一种基于多分支路径的随机执行算法,最后对所有基本块进行多样化拆分和迭代,从而实现控制流图的混淆。对控制流图分析难度将转化为对指令片段和指令轨迹进行语义等价判定难度,该过程往往是困难的,方法增加了运用静态和动态逆向分析对程序控制流进行分析的难度。⑶针对动态加解密混淆中加解密算法单一和函数执行路径确定易受攻击的问题,为抵御断点调试和内存转储动态分析,提出一种基于函数多样化和多加密算法随机执行的混淆算法。首先在等价变换规则基础上,对函数序列进行随机切分和乱序,然后构建跳转表对切分序列进行重组,并将多样化函数首地址表和跳转表隐藏到随机地址数组中,最后引入多种加解密算法对多样化函数进行加密,在执行时动态对其解密。多种不同加解密函数和函数片段粒度指令轨迹的执行提升了混淆强度。⑷针对多套虚拟指令集嵌套混淆带来的高时间开销问题,考虑到并行和多指令系统程序逆向分析难度大大高于串行和单指令系统程序,提出一种基于代码并行化的多套虚拟指令集解释执行的混淆算法。首先基于依赖图对串行代码进行并行划分,然后构建多虚拟指令集的解释器、调度器和规则,最后采用不同虚拟指令集对划分后并行代码进行解释执行。相比单虚拟机和嵌套虚拟机混淆,该方法在降低混淆程序时间开销的同时保证了混淆强度。⑸针对逆向分析者通过栈回溯技术获取反映函数调用关系的函数调用链问题,提出了一种基于混淆表映射和哈希函数编解码的栈帧数据混淆算法。该算法随机动态生成了混淆地址表和哈希函数,在函数调用时对栈帧数据进行地址映射和编码,在函数返回时对栈帧数据进行解码和地址逆映射,并对实现数据混淆的代码模块进行了多样化处理。映射随机化和编码随机化增加了动态逆向分析栈帧数据的难度,数据混淆模块代码的多样化,增加了混淆代码模块静动态逆向分析的难度,方法能够有效抵御通过栈回溯技术获取函数的调用链信息。⑹针对mea ly机模型代码和内存所对应的状态转移图结构简单且易于静态分析和动态测试的问题,提出了基于mealy机状态转移图膨胀的数据混淆算法。通过迭代混淆增加mea ly机状态转移图的冗余状态和转移函数,使mealy机的状态转移图结构复杂化,从而增加静态逆向分析的难度;通过添加基于概率的输出函数,在概率条件下实现字符输出,以增加动态测试的难度。