最近做OLLVM控制流扁平化还原的一些体会
2021/9/12 6:05:17
本文主要是介绍最近做OLLVM控制流扁平化还原的一些体会,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
首先,OLLVM-FLA的理论就不多加赘述,主要描述一些还原中遇到的问题。
对于O0优化,通过主分发器和预分发器,可以查找出相关块的地址,进而用符号执行模拟运行结果(网上关于这方面的文章已经详尽),目前主要有arm32(纯32位指令或带thumb指令的armv7)以及armv8的64位程序,或是X86的elf或PE(x86貌似32和64还原区别不大),解包目前主流的app应用,大部分还是armv7(个人觉得还原起来最麻烦的也是此种类型) 。
针对O3优化,网上的资料只找到安全客的一篇文章,文章内的代码有些缺陷,无法直接拿来运行。
这里记录一下O3优化下armv7的还原思路描述。
1、根据指令特征识别 相关块,主分发器需要手动指定,没有预分发器。
2、需要保存寄存器状态,根据程序实际的寄存器使用情况存储寄存器的状态,使条件状态可以保存,符号执行逻辑正确
3、patch指令时根据thumb的操作码,无条件跳转可以+-2048字节,而条件跳转只能+-256字节,可能需要找中间跳板才能patch成功,若是两个相关块是相连的状态,则前者不需要patch,itt指令有足够的空间进行patch
4、有些块在符号执行时检测不到flow中的块,此时需要判断其后是否为nop掉的块还是相关块,相关块则不执行patch,nop则进行b跳转patch。
对上述4点进行改进后,就可以对armV7下的fla混淆进行还原大部分逻辑了。
这篇关于最近做OLLVM控制流扁平化还原的一些体会的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南