https://github.com/obfuscator-llvm/obfuscator.git
https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0
一、下载源码:
"-b llvm-4.0",下载llvm-4.0 branch,目前是最新的
二、Build
(1)mkdir build
(2)cd build/
(3)cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
(4)make -j7
编译完成后,编译好的二进制程序都存放在build/bin目录下
三、混淆
使用Obfuscator-LLVM最简单的方法是将标志(第一部分提到的PASS)传递给Clang的LLVM后端。 当前可用的标志是:
1. -fla 控制流扁平化的PASS参数
2. -sub指令替换的PASS参数
3. -bcf虚假控制流的PASS参数
"-mllvm -fla -mllvm -sub -mllvm -bcf"
比如如下的函数:

正常编译出来的结果:
-mllvm -fla
跟上面差别不大
-mllvm -sub

"-mllvm -sub"跟"-mllvm -fla"的加固效果是一样,所以在实际项目中还需要改进
-mllvm -bcf
bcf的效果比较明显
注意:
1. 参数的使用位置比较重要,-o必须放在最后
/ollvm-4.0/build/bin/clang test.c -mllvm -bcf -o test
如果把pass放在最后,是不会有混淆效果,比如
/ollvm-4.0/build/bin/clang test.c -o test -mllvm -bcf
参考:
1. OLLVM调研