functionPass 重点介绍一下functionPass,因为控制流平坦化的pass就是基于函数的 ◆以函数为单位进行处理 ◆FunctionPass的子类必须实现runOnFunction函数 ◆在FunctionPass运行时,会对程序中的每个函数执行runOnFunction函数 环境搭建 参考:https://bbs.kanxue.com/thread-279624.htm#...
functionPass 函数传递 重点介绍一下functionPass,因为控制流平坦化的pass就是基于函数的 ◆以函数为单位进行处理 ◆FunctionPass的子类必须实现runOnFunction函数 ◆在FunctionPass运行时,会对程序中的每个函数执行runOnFunction函数 环境搭建 参考:https://bbs.kanxue.com/thread-279624.htm#msg_header_h2_1 OLLVM 可...
本文是基于控制流平坦化Pass的改进,主要提出的为改进原理,不会基于源码一行行分析,最后会将源码放出,可自行阅读。 二、支持异常处理 在传统的平坦化中,假定了每个函数的Terminator都是跳转指令BranchInst,然而在实际处理过程中并不一定是BranchInst,还有可能是SwitchInst,由于平坦化只处理后继小于等于2的情况,对于这种...
重点介绍一下functionPass,因为控制流平坦化的pass就是基于函数的 参考:https://bbs.kanxue.com/thread-279624.htm#msg_header_h2_1 可以这样理解,LLVM的pass是用来优化分析的,将这些pass的功能改为混淆代码,就是OLLVM项目。 由于后面的pass编写都是针对IR指令的,所以我们有必要对它有更进一步的了解。 IR主要有两...
OLLVM混淆学习(1)——控制流平坦化(FLA) 0x01 控制流平坦化基本介绍 控制流平坦化是指将正常程序控制流中基本块之间的跳转关练删除,用一个集中的主分发块来调度基本块的执行顺序。相当于把原有程序正常的逻辑改为一个循环嵌套一个switch的逻辑。 正常情况:...
控制流平坦化(Control Flow Flattening)的基本思想主要是通过一个主分发器来控制程序基本块的执行流程,例如下图是正常的执行流程: 经过控制流平坦化后的执行流程就如下图: 可以看到除了基本块1外,其他的基本块都集中到了同一个层次上。不同基本块的调度顺序由主分发器决定(在程序里可以看做一个switch,不同的基本...
只用 控制流平坦化混淆后的流程图 混淆前后图解 混淆前: 混淆后: 代码本来是依照逻辑顺序执行的,控制流平坦化是把,原来的代码的基本块拆分。 把本来顺序执行的代码块用 switch case打乱分发,用分发器和一个变量,把原本代码的逻辑连接起来。 让你不知 道代码块的原本顺序。让逆向的小老弟一眼看过去不知道所以然...
C++异常化处理OLLVM-控制流平坦化Two PuzzlesException一般碰到C++异常逆向,确定了异常分发、处理部分,直接把call throw改为jmp catch块,再F5即可。 PS: 多个catch块根据rdx来当为异常处理数值决定哪个为对应的catch块。 关于以上,这篇讲的很详细: https://4nsw3r.top/2022/02/03/SCTF-REVERSE-CplusException...
控制流平坦化还原就是将这些复杂的控制流程简化为一系列线性的、可控的步骤,从而降低控制难度,提高工作效率。 二、控制流平坦化还原的应用 控制流平坦化还原在多个领域都有广泛的应用,包括但不限于以下几个方面: 1.工业生产:在工业生产过程中,控制流程往往涉及到众多设备和工艺步骤。通过控制流平坦化还原,可以将这些...
1.1 控制流平坦化 控制流平坦化(control flow flattening)的基本思想主要是通过一个主分发器来控制程序基本块的执行流程,例如下图是正常的执行流程 经过控制流平坦化后的执行流程就如下图 这样可以模糊基本块之间的前后关系,增加程序分析的难度,同时这个流程也很像VM的执行流程。更多控制流平坦化的细节可以看Obfuscatin...