JEB反编译引擎都带有代码优化器,能够重建那些控制流被扁平化混淆器改变的方法。

图片 © Tigress (University of Arizona)
控制流扁平化,有时也被称为 "陈化",是一种混淆技术,用于解构一个例程的控制流。虽然一个编译过的程序通常是由一些基本块组成的,具有较低的输入和输出计数,但一个扁平化的程序可能表现出一个具有高输入和高输出边计数的离群结点,而且一般来说,在图中具有非常高的中心性(就顶点间性而言)。实际上,原来的方法M被简化为一个评估表达式VPC的多向条件块H,将执行流程分配给代码单元,每个单元执行M的一部分,更新VPC,并循环到H。因此,原始的控制流,即在进行人工逆向工程时推断意义的关键,被丢失了。
我们在今年早些时候升级了dexdec的控制流unflattener。解平器的v2版比我们原来的实现更通用。它能够涵盖被混淆的情况,而这些情况并没有映射到上面介绍的清洁模型中,例如,调度器突出的情况。
本周,我们遇到了一个被自动去混淆为干净代码的实例,并认为这将是一个很好的例子,以显示此类代码的通用去混淆是多么有用。看来,用于保护原始代码的混淆器是BlackObfuscator,这是一个被清洁应用程序和恶意软件使用的项目。

去混淆之前
去混淆后,代码看起来像:

去混淆后
如果你遇到unlattener不能充分执行的例子,请让我们知道。我们会看看是否可以对它们进行修复或升级,以涵盖混淆的所有情况。
渝公网安备50010702505508