LLVM混淆器项目常见问题解决方案
obfuscator-llvm 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscator-llvm
1. 项目基础介绍和主要编程语言
本项目是一个基于LLVM的开源混淆器插件,名为obfuscator-llvm
。它是一个用于对LLVM汇编语言进行转换的LLVM pass插件,以提供代码混淆功能。这个项目的目的是通过转换来增加逆向工程的难度,从而提高软件的安全性。主要使用的编程语言是C++,因为它需要与LLVM框架进行深度集成。
2. 新手常见问题及解决步骤
问题一:如何编译和安装LLVM以及混淆器插件?
解决步骤:
- 克隆LLVM项目:
git clone --depth 1 --branch llvmorg-14.0.6 https://github.com/llvm/llvm-project.git
- 编译LLVM:
cd llvm-project mkdir -p build && cd build cmake -G "Ninja" -DCMAKE_INSTALL_PREFIX=/opt/llvm ninja -j$(nproc) ninja install
- 克隆混淆器插件项目:
git clone https://github.com/eshard/obfuscator-llvm.git
- 编译混淆器插件:
cd obfuscator-llvm mkdir -p build && cd build cmake -G "Ninja" -DLLVM_DIR=/opt/llvm/lib/cmake ninja -j$(nproc)
问题二:如何使用混淆器插件与Clang一起编译代码?
解决步骤:
- 在编译时添加混淆器插件的路径:
clang -fno-legacy-pass-manager -fpass-plugin=<path/to/llvm/obfuscation>/libLLVMObfuscator.so hello_world.c -o hello_world
- 可以通过设置环境变量来选择在优化管道中插入的混淆器通道:
export LLVM_OBF_SCALAROPTIMIZERLATE_PASSES="flattening bogosity substitution split-basic-blocks"
- 然后使用Clang编译代码:
clang hello_world.c -o hello_world
问题三:如何使用opt工具应用混淆器插件?
解决步骤:
- 使用Clang预生成LLVM字节码:
clang -O1 -S -emit-llvm hello_world.c -o hello_world.bc
- 使用opt工具应用混淆器插件:
opt --relocation-model=pic -load-pass-plugin <path/to/llvm/obfuscation>/libLLVMObfuscator.so -passes="<my-pass-name>" hello_world.bc -o hello_world_obfuscated.bc
- 使用llc工具生成对象文件:
llc --relocation-model=pic -filetype=obj hello_world_obfuscated.bc -o hello_world_obfuscated.o
obfuscator-llvm 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscator-llvm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考