- 一个半自动化去除控制流平坦化混淆的插件
- 如果不了解真实块是什么,建议了解后再使用本插件
- 1.下载后直接放入IDA Pro的plugins文件夹中
- 2.在菜单Edit/Plugins/IDADeflat启动插件
- 3.启动插件后,在反编译窗口即可右键找到对应插件菜单
- 4.选定需要去平坦化的函数,选定或者导入识别的基本块后,选择Deflat GOGOGO开始去平坦化。
- 5.能够通过读取相同目录下的blocks.json文件导入真实基本块的数据。
- 插件能够进行修改和扩展,编写对应的处理Core。
- 用户选定的各种数据将传递给Core处理,Core将调用process进行具体处理。
- Core的process函数接收函数地址,以及选定的真实基本块列表进行处理。
- 目前仅编写了默认处理模块AngrCore,使用angr符号执行来获取基本块之间的关系,并进行Patch。
- 采用了收集基本块代码,反编译后再重新编译的方式进行Patch,可能会导致一些不可控的问题。
- 默认模块AngrCore针对变种控制流平坦化效果较差,Patch出的代码容易出现问题,且条件跳转的条件可能会反转,因此不可运行。
- 后续考虑实现更多的Cores(例如基于动调Trace的),但是Patch和判断条件识别依旧是一个问题。
- 下一步(可能):考虑基于Angr的AIL实现真实基本块的识别,当然这个功能不包括在本插件中,但可用于生成blocks.json用于导入,配合本插件就不用繁琐的自己去寻找基本块了。