控制流平坦化还原就是将这些复杂的控制流程简化为一系列线性的、可控的步骤,从而降低控制难度,提高工作效率。 二、控制流平坦化还原的应用 控制流平坦化还原在多个领域都有广泛的应用,包括但不限于以下几个方面: 1.工业生产:在工业生产过程中,控制流程往往涉及到众多设备和工艺步骤。通过控制流平坦化还原,可以将这些...
控制流平坦化还原是一种计算机程序分析和优化技术,旨在改善代码的执行效率和可读性。在控制流平坦化过程中,程序的执行路径被重组为一个线性序列,以减少分支和跳转指令的数目,从而提高代码的执行速度。然而,这种优化可能会降低代码的可读性和可维护性。在控制流平坦化还原技术中,通过重新组织代码,将跳转指令替换为...
控制流平坦化还原示例代码,采用ast技术Em**na 上传2KB 文件格式 zip 控制流平坦化是一种常见的代码混淆技术,旨在通过打乱程序的控制流结构,使其难以理解和分析。在这种技术中,程序的正常控制流(如条件分支、循环等)被替换为一种平坦化的结构,通常是通过一个主循环和一个状态变量来控制程序的执行路径。还原控制流...
【摘要】 一. while-switch结构的控制流 这类平坦化代码很简单,常见于经过obfuscator在线工具混淆后的控制流平坦化。一般代码段不会很长,常见的 switch-case 基本都在10个分支以内,因此是否还原,并不影响阅读。 代码举例: var _0x42b38e = "5|4|3|1|2|0"["split"]('|'), _0x435210 = 0; ... 一...
OLLVM的控制流平坦化是一种常见的代码混淆方式,其基本原理是添加分发器来控制流程的执行。针对这种混淆方式的还原也有了许多研究和工具,大致思路分为动态和静态两种: 动态:通过Unicorn模拟执行的方式获取各真实块的关系 静态:通过符号执行、中间语言分析等方式获取真实块之间的关系。
控制流平坦化 ,Control-Flow-Flattening(FLA),的基本思想主要是通过一个主分发器来控制程序基本块的执行流程。该方法把函数内所有基本代码块放到控制流图的最底部,然后删除掉原来的基本块之间的跳转关系,添加混淆器的流程控制分发逻辑,通过新的复杂分发逻辑还原原来程序块之间的逻辑关系。即,通过一个主分发器,控制整个...
这个项目我当时也就一周做出来,其实是demo状态,在控制流还原那里的控制流反转ast代码模型的算法那里无法处理循环+break的代码结构。比如 for + break 和while+break将会处理失败。 做这个东西的时候并没有完整的代码生成理论知识,知道当时协议破解完成之后,才对流程逆向生成这里有一些认识,后来总结了一个ppt。https:/...
为下一步去除混淆,还原代码控制流结构奠定基础。 进一步的,所述的从入口节点到出口节点按照执行顺序确定支配节点和被支配节点的步骤中,确定支配节点的步骤包括: 在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点; 若存在一条路径,从入口节点到节点A没有经过节点B,那么节点B没...
符号执行是一种程序分析技术,旨在通过将程序的输入视为符号变量,以探索所有可能的执行路径。它可以帮助分析混淆代码,进行漏洞检测和程序验证。符号执行与控制流平坦化的结合,使得在面对高度混淆的代码时,仍能够进行有效的分析和还原。 这种技术并不是简单的信息恢复,而是结合了复杂的算法和数据结构,通过数学建模来实现对...
最后一层以switch+代码块索引的修改控制流程,其实颇为常见,初次还原起来非常头疼。 关键步骤一: 剔除控制流虚假条件。 什么叫虚假条件?某些三元表达式或者if语句的判断条件,它们为固定的几个变量名,运行到它们的时候会固定返回true或false,进入对应正确流程分支。错误分支并不是无用分支,而是随便指了一个其它节点的分支...