热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转正常流程如下经混淆后的流程如下破坏了代码块之间的关系后,整个程序的逻辑将很难辨认

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

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

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

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

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

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

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

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

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

可用脚本

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

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

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


推荐阅读
author-avatar
老鼠扛着刀找猫_592
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有