控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转

正常流程如下
180517 逆向-反控制流平坦化(符号执行脚本)

经混淆后的流程如下
180517 逆向-反控制流平坦化(符号执行脚本)

破坏了代码块之间的关系后,整个程序的逻辑将很难辨认

符号执行的思路是遍历所有路径,将分发器等无用的代码跳过,恢复代码块之间的联系
由于跳转的代码极有规律,因此在跨过分发器,找到代码块之间联系的基础上修复控制流就难度不大了

符号执行反混淆的大体思路如上

找了一圈除了川大的实验室发了一篇论文,在github上闭源了一个框架以外就只有腾讯实验室给出了可用的完整脚本
依赖angr和barf
由于文章是一年前的关系,angr和barf的版本更新导致有一些API在原脚本上部分不可用,评论区找到了修复后的可用脚本,另外由于barf的版本还可能会有一些分歧,我们在评论区有讨论

图片引自腾讯实验室,详细分析和原理见原文

利用符号执行去除控制流平坦化(腾讯安全响应中心)

可用脚本

对于iscc的re3修复效果很显著
180517 逆向-反控制流平坦化(符号执行脚本)

不过这个修复由于并不完全,仅是调整了基本块之间的顺序,所以汇编看起来还是比较蛋疼的
得益于IDA强大的Hex-ray插件,反编译以后的代码可读性被恢复的很高

下一步有空尝试一下Hook分发器来打出log的分析方法,将其视为一个VM来操作

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2021-12-31
  • 2021-08-29
  • 2022-12-23
  • 2022-02-16
猜你喜欢
  • 2021-12-18
  • 2021-08-16
  • 2021-08-20
  • 2021-07-21
  • 2021-08-30
  • 2021-07-29
  • 2021-05-15
相关资源
相似解决方案