180517 逆向-反控制流平坦化(符号执行脚本)

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

正常流程如下
这里写图片描述

经混淆后的流程如下
这里写图片描述

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

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

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

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

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

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

可用脚本

对于iscc的re3修复效果很显著
这里写图片描述

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值