混淆技术研究-OLLVM混淆-虚假控制流(BCF)

简介

虚假控制流(BCF, Bogus Control Flow),该方法通过在当前基本块之前添加一个基本块来修改函数调用图。这个新的基本块包含一个不透明谓词,然后进行条件跳转到原始基本块。并且原始基本块也被克隆,并填充了随机选择的垃圾指令。(This method modifies a function call graph by adding a basic block before the current basic block. This new basic block contains an opaque predicate and then makes a conditional jump to the original basic block.The original basic block is also cloned and filled up with junk instructions chosen at random.)详见官方解释1

原理

一句话总结 构造虚假基本块,通过不透明谓词进行条件跳转到真实基本块

  • 不透明谓词原理: 利用全局变量来构造条件表达式以制造虚假控制流,因为这个全局变量不会有写入的地方,所以这个表达式即一条结果恒定的条件表达式,因此始终只会走向一个真实分支,而另外的虚假分支即一个永不到达的分支.
  • 条件跳转: 通过大量的if-esle进行条件跳转(识别BCF的标志)

反混淆思路

  1. 永不到达的虚假基本块应该被死代码消除(DCE, Dead Code Elimination),而IDA-HexRays本身具备DCE,只是IDA无法识别全局变量是否会改变,而原理上不透明谓词的全局变量是不会改变的,因此只要将这个全局变量改为只读,IDA就能自动进行DCE,从而消除BCF。
  2. 利用符号执行

实战

  • 思路一反混淆
  1. 识别出BCF,可以通过识别条件判断的地方是否是一个恒等式
    在这里插入图片描述
  2. 修改全局变量为可读
    在这里插入图片描述
    备注: 注意data段是否会影响其他,如果会影响的话,可以通过Patch到其他段中(可看参考文章),这里将write勾选去掉重新F5即可。

参考


  1. 参考BCF官方解释: Description ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值