一、控制流整平的作用
学逆向的人都知道,if-else、while、for具有典型的跳转等结构,即使通过多层嵌套、拓展条件等方法,依然可以通过“切片技术”来判断。有了这些依据,就给程序分析带来很多便利。
正是这个原因,为了增加程序逆向的难度,我们得使得这些特征结构变得模糊,并且能让类似“切片技术”这样基于具体语义分析的方法失效,迫使逆向分析人员进行完整的抽象语义分析,斩断所谓的“捷径”。
控制流整平的策略是这样的,它把所有的典型控制流以及其衍生结构“统而为一”,各种控制流的区别只是语义方面的,增加了理解控制流转换关系的难度。
二、什么是控制流整平
控制流整平迷惑,是通过打破程序原有的控制流之间的嵌套和顺序关系,使得变换后的程序控制流扁平化的混淆方法,其基本思想是令程序中所有的基本块拥有共同的前驱和后继代码块。
如下图(本文代码思路皆使用C语言表示)
进行控制流整平后,使得面向过程的代码片段,原来比较清晰的控制流向混杂在一起,同时这也比较好的并行图形态,也有利于进一步的迷惑处理。
三、顺序流整平
对于单纯的顺序流,一般不用控制流平整的方法,我们有更好的处理方法,但这里为了从基础一步一步讲控制流平整,所以从最简单的顺序流开始。
举例:
int main()
{
int a,b,c;
Step1:
a=0;
Step2:
&n

本文介绍了控制流整平的概念和作用,通过将程序中的控制流结构变得模糊,增加逆向分析的难度。文章详细阐述了顺序流、条件流和平整循环控制流的转换方法,并探讨了如何保护分支变量以防止反混淆。通过对C语言代码的示例,展示了如何将清晰的控制流转换为混淆形式,以提高代码的迷惑性。
最低0.47元/天 解锁文章
925

被折叠的 条评论
为什么被折叠?



