关于 llvm-obfuscation
面向开发者的 LLVM 代码混淆参考技能,介绍软件保护与阻碍逆向分析的技术。内容涵盖常见变换、相关框架、自定义 Pass 指引、工具链集成及实现权衡。
主要功能
- 01控制流混淆技术
- 02数据与字符串混淆
- 03指令替换与虚拟化
- 04OLLVM 框架概览
- 05自定义 LLVM Pass 指引
- 06工具链集成参考
适用场景
- 01评估代码库的混淆方案
- 02规划 LLVM 混淆 Pass 实现
- 03比较 OLLVM 框架能力
- 04将混淆集成到编译工具链
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gmh5225/ awesome-llvm-security --skill llvm-obfuscation安装后在 Claude Code 中输入/llvm-obfuscation确认已加载。
详细介绍
LLVM 代码混淆技能
此技能全面介绍基于 LLVM 的代码混淆框架和技术,用于软件保护和反逆向工程。
核心混淆技术
控制流混淆
- 控制流扁平化(CFF):将结构化控制流转换为带状态机的单一分发循环
- 伪控制流(BCF):插入不透明谓词和死代码路径
- CFG 随机化:随机排列基本块顺序并添加虚假边
数据混淆
- 字符串加密:在编译时加密字符串字面量,并在运行时解密
- 常量替换:用复杂表达式替换常量
- 变量拆分:将变量拆分为多个组成部分
代码转换
- 指令替换:用等效的复杂指令序列替换标准指令
- MBA(混合布尔-算术):使用混合布尔-算术表达式进行混淆
- 虚拟化(VMP):将代码转换为由内嵌 VM 执行的自定义字节码
主要 OLLVM 框架
经典 OLLVM
- 原始 OLLVM:https://github.com/obfuscator-llvm/obfuscator
- 功能:BCF、CFF、指令替换、字符串加密
现代变体
- Hikari:高级功能,包括函数包装器、反 class-dump
- Pluto-Obfuscator:维护良好,支持 MBA、间接分支、全局加密
- Arkari:具备增强功能的现代实现
- o-mvll:面向 iOS/Android 的移动端混淆器
专用工具
- IR VMP:GANGE666/xVMP、NiTianErXing666/SmallVmp,用于虚拟化
- Warbird:Microsoft 的商业混淆技术
实现指南
创建自定义 LLVM 混淆 Pass
#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
class MyObfuscationPass : public llvm::FunctionPass {
public:
static char ID;
MyObfuscationPass() : FunctionPass(ID) {}
bool runOnFunction(llvm::Function &F) override {
// Implement obfuscation logic
for (auto &BB : F) {
for (auto &I : BB) {
// Transform instructions
}
}
return true;
}
};
最佳实践
- 保留语义:确保转换不会破坏程序正确性
- 随机化:使用带种子的随机数生成器,以确保构建可复现
- 分层方法:组合多种混淆技术
- 性能平衡:权衡运行时开销与保护级别
- 测试:针对不同输入和平台进行全面测试
工具链集成
NDK 集成
- 将 OLLVM 与 Android NDK(r17-r23+)搭配使用
- 示例:android-ndk-aarch64-host-LLVM6.0-Ollvm-Armariris
编译器工具链
- ollvm-mingw:Windows 交叉编译
- ollvm-rust:Rust 工具链集成
- Swift 集成:swift-Ollvm11
反反混淆注意事项
实现混淆时:
- 考虑抵御符号执行(SymCC、KLEE)的能力
- 添加针对模式匹配反混淆工具的防护
- 实现反调试检查
- 使用动态分派阻碍静态分析
资源
请参阅主 README.md,获取 OLLVM 实现和相关工具的完整列表。
获取详细信息
需要获取详细且最新的资源链接、工具列表或项目参考时,请从以下位置获取最新数据:
https://raw.githubusercontent.com/gmh5225/awesome-llvm-security/refs/heads/main/README.md
此 README 包含精心整理的完整列表:
- 80+ 个 OLLVM 实现和分支(OLLVM 部分)
- MSVC Warbird 混淆工具(MSVC Warbird 部分)
- 基于 IR 的 VMP 和虚拟化项目
- 不同版本的 NDK 集成示例
评论
支持 Markdown