控制流迷惑——控制流整平

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

一、控制流整平的作用
    学逆向的人都知道,if-else、while、for具有典型的跳转等结构,即使通过多层嵌套、拓展条件等方法,依然可以通过“切片技术”来判断。有了这些依据,就给程序分析带来很多便利。
    正是这个原因,为了增加程序逆向的难度,我们得使得这些特征结构变得模糊,并且能让类似“切片技术”这样基于具体语义分析的方法失效,迫使逆向分析人员进行完整的抽象语义分析,斩断所谓的“捷径”。
    控制流整平的策略是这样的,它把所有的典型控制流以及其衍生结构“统而为一”,各种控制流的区别只是语义方面的,增加了理解控制流转换关系的难度。

二、什么是控制流整平
    控制流整平迷惑,是通过打破程序原有的控制流之间的嵌套和顺序关系,使得变换后的程序控制流扁平化的混淆方法,其基本思想是令程序中所有的基本块拥有共同的前驱和后继代码块。
如下图(本文代码思路皆使用C语言表示)

     进行控制流整平后,使得面向过程的代码片段,原来比较清晰的控制流向混杂在一起,同时这也比较好的并行图形态,也有利于进一步的迷惑处理。

三、顺序流整平
    对于单纯的顺序流,一般不用控制流平整的方法,我们有更好的处理方法,但这里为了从基础一步一步讲控制流平整,所以从最简单的顺序流开始。
举例:
int main()
{
  int a,b,c;
Step1:
    a=0;
Step2:
 &n

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值