llvm简要介绍:
通常,llvm后端和clang或其他前端配合使用,clang前端负责将c文件生成IR代码,这时候llvm后端可以对IR进行优化等操作,最后生成目标文件。这样,只需要配置不同的前端,就可以将各种语言的源码生成出统一的IR代码给llvm优化操作,可以做到解耦编译。
OLLVM简介:
OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具。github:https://github.com/obfuscator-llvm/obfuscator
OLLVM主要是对IR进行混淆,这样对任何语言都具有通用性,因为前端会生成统一的IR代码,然后对IR进行编译生成汇编源码。这样子ollvm通用性就很高,可以支持很多平台架构,比如x86,x64,arm等。毕竟IR代码是通用的嘛。
Windows 上安装:
编译完成后添加环境变量,并安装mingw,输入clang -v可以看到已经添加了ollvm的llvm
通过llvm设置生成IR代码:
int add(int a,int b){
int sum = 0;
for (int i = 0; i < 10;++i){
sum += a+b;
}
return sum;
}
int main(){
printf("hello \\n");
int a = add(1,9);
printf("%d \\n",a);
return 0;
}
clang .\1.c -emit-llvm -S -o 1.ll 生成无混淆的IR
clang .\1.c -emit-llvm -S -o 2.ll -mllvm -sub -mllvm -bcf -mllvm -fla
fla(Control Flow Flattening控制流平坦化)
bcf(Bogus Control Flow,虚假控制流)