ollvm的使用

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目录下

ollvm的使用_第1张图片


三、混淆

使用Obfuscator-LLVM最简单的方法是将标志(第一部分提到的PASS)传递给Clang的LLVM后端。 当前可用的标志是:

1.     -fla 控制流扁平化的PASS参数

2.     -sub指令替换的PASS参数

3.     -bcf虚假控制流的PASS参数

"-mllvm -fla -mllvm -sub -mllvm -bcf"

比如如下的函数:

ollvm的使用_第2张图片

正常编译出来的结果:

ollvm的使用_第3张图片

-mllvm -fla

ollvm的使用_第4张图片

跟上面差别不大

-mllvm -sub

ollvm的使用_第5张图片

"-mllvm -sub"跟"-mllvm -fla"的加固效果是一样,所以在实际项目中还需要改进

-mllvm -bcf

ollvm的使用_第6张图片

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调研

2. OLLVM在iOS中的实践

你可能感兴趣的:(iOS,iOS,安全)