LLVM代码混淆分析及逻辑还原
LLVM代码混淆分析及逻辑还原 概述 LLVM Obfuscator是一款工业级别的代码混淆器,在过去几年的CTF里我们经常会遇到经过代码经过它混淆的情况。这片博文记录了我们对混淆器原理的研究以及从中发现的有关混淆器的设计实现的脆弱之处。基于我们的研究结果,我们在Binary Ninja平台上写了一个插件,通过这个插件可以自动化的解决掉由于代码混淆带来的逆向分析困难。 LLVM Obfuscator简介 LLVM Obfuscator是一个基于LLVM框架实现的一个开源代码混淆器,整个项目包含了三个相对独立的LLVM pass, 每个pass实现了一种混淆方式,通过这些混淆手段,可以模糊原程序的流程或者某一部分的算法,给逆向分析带来一些困难。 由于上述的三个pass是基于LLVM IR实现的, 因此从理论上来说, 这种混淆器是支持世界上任何一种语言和机器架构的。 关于每种pass的详细文档,可以查看下面的这三个链接: Instructions Substitution(指令变换) Bogus Control Flow(流程伪造) Control Flow Flattening(流程平坦化) 上面的这几个链接里面是各个pass的作者维护的一份简单文档,如果你觉得文档不够详尽,建议直接参考相应的源码即可,可能对你来说会又直观又准确。 如果说看代码,其实是比较费劲的一个事情