Obfuscation LLVM 17
项目大致内容与我之前发布的OLLVM16区别不大, 仅对LLVM17做了兼容性修复
感兴趣的可以自己下载之前项目对比查看修改部分
annotation 功能已修复, 感谢 @Jiang-Night
函数源码
原版IDA反编译
开启fla
开启fla和bcf
命令行添加位置: 项目->属性->C/C++->Command Line
- bcf # 虚假控制流
- bcf_prob # 虚假控制流混淆概率 1~100, 默认70
- bcf_loop # 虚假控制流重复次数, 无限制, 默认2
- fla # 控制流平坦化
- sub # 指令替换(add/and/sub/or/xor)
- sub_loop # 指令替换次数, 无限制, 默认1
- sobf # 字符串混淆(仅窄字符,只能在命令行中启用,不支持annotation)
- split # 基本块分割
- split_num # 将原基本块分割数量, 无限制, 默认3
- ibr # 间接分支
- icall # 间接调用 (call 寄存器)
- igv # 间接全局变量
- fncmd # 启用函数名控制混淆功能,annotation已经修好不建议再用这个 ( function_fla_bcf_(); )命令行添加位置: 项目->属性->C/C++->命令行
fla和bcf会导致编译速度很慢且部分函数无法使用
-mllvm -fla -mllvm -bcf -mllvm -bcf_prob=80 -mllvm -bcf_loop=3 -mllvm -sobf -mllvm -icall -mllvm -ibr -mllvm -igv -mllvm -sub -mllvm -sub_loop=3 -mllvm -split -mllvm -split_num=5annotate使用说明
// 可传入上面的混淆开关名使此函数强制开启对应混淆功能
// 也可以传入no开头加功能命强制关闭对应函数的混淆功能, 例如__attribute__((annotate("nofla nobcf nosplit")))
int __attribute__((annotate("fla bcf igv ibr icall sub split"))) test_ollvm_aa() {
std::printf("123aa\n");
return 0;
}1.下载LLVM官方源码 LLVM 17.0.6 并解压
2.下载此项目, 将项目内文件替换至官方源码内
3.使用cmake创建自己需要的编译工具生成文件, 以 VisualStudio 2022 为例
cd llvm-project
mkdir build_vs2022
cd build_vs2022
cmake -G "Visual Studio 17 2022" -DCMAKE_C_FLAGS=/utf-8 -DCMAKE_CXX_FLAGS=/utf-8 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=OFF -DLLVM_ENABLE_RTTI=OFF -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;lld" -A x64 ../llvm4.等cmake生成出解决方案后打开build_vs2022目录内的LLVM.sln点击生成解决方案即可
如果编译过程中有提示部分函数是private的无法调用的话把private注释即可 LLVM 17.0.6注释后正常无报错
要取消private属性的文件及目标行(LLVM17.0.1): ...\llvm-project\llvm\include\llvm\IR\Function.h:722
此函数的private属性: getBasicBlockList
...\llvm-project\llvm\lib\Passes\PassBuilder.cpp
…bash
add_llvm_component_library(LLVMPasses ... Obfuscation/Utils.cpp Obfuscation/CryptoUtils.cpp Obfuscation/ObfuscationOptions.cpp Obfuscation/BogusControlFlow.cpp Obfuscation/IPObfuscationContext.cpp Obfuscation/Flattening.cpp Obfuscation/StringEncryption.cpp Obfuscation/SplitBasicBlock.cpp Obfuscation/Substitution.cpp Obfuscation/IndirectBranch.cpp Obfuscation/IndirectCall.cpp Obfuscation/IndirectGlobalVariable.cpp ... )
# Credits
[LLVM](https://github.com/llvm/llvm-project)
[SsagePass](https://github.com/SsageParuders/SsagePass)
[wwh1004-ollvm16](https://github.com/wwh1004/ollvm-16)No open issues yet, or sync has not completed.