https://www.cnblogs.com/huhuf6/p/14010717.html

https://oacia.dev/ollvm-study/

Obfuscator-LLVM

OLLVM 是一款是由瑞士西北科技大学开发的一套开源的针对 LLVM 的代码混淆工具,旨在加强逆向的难度,整个项目包含数个包含独立功能的 LLVM Pass,每个 Pass 会对应实现一种特定的混淆方式,这些 Pass 将在后面进行细说,通过这些 Pass 可以改变源程序的 CFG 和源程序的结构。

与此同时,LLVM 与 OLLVM 最大的区别在于混淆 Pass 的不同。混淆 Pass 作用于 LLVM 的 IR 中间语言,通过 Pass 混淆 IR,最后后端依据 IR 生成的目标语言也会得到相应的混淆。得益于 LLVM 的三段式结构,即前端对代码进行语法分析词法分析形成 AST 并转换为中间 IR 语言,一系列优化 Pass 对 IR 中间语言进行优化操作,或混淆,或分析,或改变 IR 的操作码等等。最终在后端解释为相应平台嘚瑟机器码。OLLVM 支持 LLVM 所支持的所有前端语言:C,C++,Objective-C,Fortran 等等和 LLVM 所支持的所有目标平台:x86,x86-64,PowerPC,PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, 和 XCore。

OLLVM 有三大功能,分别是:Instructions Substitution(指令替换)、Bogus Control Flow(混淆控制流)、Control Flow Flattening(控制流平展)。Github 上也有 OLLVM 每个功能详细的介绍和举例:https://github.com/obfuscator-llvm/obfuscator/wiki/Features。操作指令可以是一个或多个参数。

按着上面的操作可以完成,需要去掉 TEST 检查和强制进行硬链接(如果已经安装过 clang 了)


ollvm BCF 反混淆

ollvm SUB 反混淆

ollvm FLA 反混淆