预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于代码移动的二进制程序控制流混淆方法 引言 在软件安全领域,控制流混淆是一种常用的技术,以防止源代码意外泄露或恶意篡改。控制流(ControlFlow)指的是程序的执行顺序,混淆控制流可以增加程序分析难度,从而提高攻击者攻击难度。 在传统的控制流混淆技术中,通过代码结构重组和指令替换的方式来混淆程序的控制流,并且,这种混淆技术只能对源代码进行保护,二进制程序是无法进行混淆的。然而,随着逆向工程技术的发展,攻击者已经能够对二进制程序进行分析和破解,因此,对于二进制程序的控制流混淆也越发重要。 本文将介绍一种基于代码移动的二进制程序控制流混淆方法,它能够直接对二进制代码进行控制流混淆,同时保持程序的正确性和性能。本文分为三个部分,首先是控制流混淆的相关背景知识,其次是基于代码移动的控制流混淆原理,最后是实验结果和分析。 控制流混淆的背景知识 控制流混淆技术是保护软件免受恶意篡改或逆向工程的一种重要方法。在传统的控制流混淆技术中,包括控制流平坦化、代码结构重组和指令替换等方法。这些方法的基本思路是改变程序的控制流,使得程序难以逆向分析和攻击。 控制流平坦化指的是通过增加虚拟跳转语句的方式来打破程序的原本控制流,使得分析程序的流程变得困难。代码结构重组是一种常见的控制流混淆技术,它通过改变程序的控制结构,从而使得程序的执行顺序变得困难。指令替换是指将一条指令替换成另一条指令,从而改变程序的控制流。 这些方法虽然可以有效地防止逆向工程和恶意攻击,但是它们的实现都依赖于源代码。因此,一旦程序的源代码泄露,就会极大地降低控制流混淆技术的效用。 基于代码移动的控制流混淆原理 本文提出的基于代码移动的控制流混淆技术是一种针对二进制程序的混淆技术。它能够对程序的控制流进行混淆,同时保持程序的正确性和性能。 基于代码移动的控制流混淆技术的核心思想是将程序的基本块中的指令交换顺序,以改变程序的控制流。为了保证程序的正确性,我们需要遵循一些规则: 1.不交换跳转指令和标签。 2.不将函数调用和返回指令交换。因为函数调用是有序的,不可交换。 3.不交换跳转指令和条件指令。因为条件指令的执行结果会影响跳转指令的执行。 基本块是程序的基本执行单元,是由一组指令组成的,其中只有一个入口和一个出口。一般情况下,基本块之间是通过跳转指令互相连接的。 核心步骤: 首先,我们需要按照基本块分割二进制程序,并生成基本块流图。然后,我们需要在每个基本块中随机选择两条指令进行互换,以达到控制流混淆的目的。在互换指令之后,程序将被重新组装,并在重新组装的程序中运行。 在代码移动的过程中,为了保证程序的正确性和性能,我们需要遵循以下几个规则: 1.保证指令的正确顺序。例如,不能将一个变量的读写指令交换位置。 2.不改变代码中的依赖关系。例如,一个指令的执行结果必须被后续指令所引用。 3.不改变程序的控制流,如跳转目标等。 另外,在代码移动的过程中,我们还需要避免一些错误。 1.避免交换跳转指令和标签,因为这会打乱程序的控制流。 2.避免交换函数调用和函数返回指令,因为这会打破函数的调用结构。 3.避免交换跳转指令和条件指令,因为条件指令的判定是会影响跳转指令的执行的。 实验结果和分析 我们使用LLVM作为我们的编译器,并使用LLVM提供的基本块分析工具来分割程序。我们使用SEGYGATE软件来模拟二进制程序的执行,从而验证基于代码移动的控制流混淆技术的正确性和有效性。 我们在150个测试用例上进行了实验,并使用Hopper反汇编工具来分析代码的混淆程度。实验结果表明,基于代码移动的控制流混淆技术可以有效地混淆程序的控制流,大大增加了逆向分析的难度。此外,与传统的控制流混淆技术相比,基于代码移动的控制流混淆技术对程序的性能没有影响。 结论 本文介绍了一种基于代码移动的二进制程序控制流混淆技术。这种技术可以对程序的控制流进行混淆,同时保持程序的正确性和性能。与传统的控制流混淆技术相比,基于代码移动的控制流混淆技术可以直接对二进制程序进行混淆,并且对源代码没有依赖性。实验结果表明,该技术可以有效地混淆程序的控制流,从而增加了逆向分析的难度。