控制流平坦化(control flow flattening)是作用于控制流图的代码混淆技术,其基本思想是重新组织函数的控制流图中的基本块关系,通过插入一个 “主分发器” 来控制基本块的执行流程,例如下图是正常的执行流程:

before

经过控制流平坦化处理之后便变成了这个样子,由一个 “主分发器” 负责控制程序执行流:

after

去平坦化学习

OLLVM

动态:通过unicorn模拟执行的方式获取各真实块的关系

静态:通过符号执行、中间语言分析等方式获取真实块之间的关系

环境搭建

https://github.com/cq67430529/deflat

获取am_graph.py,deflat.py,util.py

还需要pip install angr

自动化处理:python deflat.py -f 文件名 --addr 处理函数(main函数居多)

可以大致还原程序逻辑