作者:老鼠扛着刀找猫_592 | 来源:互联网 | 2023-09-01 14:30
控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转正常流程如下经混淆后的流程如下破坏了代码块之间的关系后,整个程序的逻辑将很难辨认
控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转
正常流程如下
经混淆后的流程如下
破坏了代码块之间的关系后,整个程序的逻辑将很难辨认
符号执行的思路是遍历所有路径,将分发器等无用的代码跳过,恢复代码块之间的联系
由于跳转的代码极有规律,因此在跨过分发器,找到代码块之间联系的基础上修复控制流就难度不大了
符号执行反混淆的大体思路如上
找了一圈除了川大的实验室发了一篇论文,在github上闭源了一个框架以外就只有腾讯实验室给出了可用的完整脚本
依赖angr和barf
由于文章是一年前的关系,angr和barf的版本更新导致有一些API在原脚本上部分不可用,评论区找到了修复后的可用脚本,另外由于barf的版本还可能会有一些分歧,我们在评论区有讨论
图片引自腾讯实验室,详细分析和原理见原文
利用符号执行去除控制流平坦化(腾讯安全响应中心)
可用脚本
对于iscc的re3修复效果很显著
不过这个修复由于并不完全,仅是调整了基本块之间的顺序,所以汇编看起来还是比较蛋疼的
得益于IDA强大的Hex-ray插件,反编译以后的代码可读性被恢复的很高
下一步有空尝试一下Hook分发器来打出log的分析方法,将其视为一个VM来操作