OLLVM 代码混淆工具链
基于 LLVM 19 移植并工程化的全栈混淆方案 —— 从 Pass 实现到 NDK 交叉编译,为 Android Native 代码提供多层防护
LLVM
混淆
编译器
安全
NDK
LLVM 19
Clang
C++17
CMake
Android NDK r28c
ARM64
LLVM Pass Manager
系统架构
LLVM Pass 编译流程:源文件经过 Clang 前端解析,经 OLLVM 混淆 Pass 链变换,
最终生成混淆加固后的二进制产物。CMake per-file 属性实现分层混淆策略。
源文件
.c / .cpp
→
Clang 前端
词法 / 语法 / 语义分析
→
OLLVM Passes
-fla / -sub / -bcf
→
LLVM IR
混淆变换
→
后端
ARM64 机器码
▼ CMake per-file 分层策略:核心模块 FULL · 驱动模块 SUB · 工具模块 OFF
项目职责
⚙ Pass 实现
- 完成 OLLVM 混淆 Pass 从 LLVM 14 到 LLVM 19 的完整移植,涉及 API 变更适配、Legacy → New Pass Manager 重构与调试
- 实现 控制流扁平化 Pass(Flattening),将循环+分支结构压平为 switch-case + dispatcher 模式
- 实现 指令替换 Pass(Substitution),将标准算术/逻辑运算替换为等价的复杂指令序列(如 a+b → (a^b)+2*(a&b))
- 实现 虚假控制流 Pass(BogusControlFlow),在原始控制流中插入不可达基本块,大幅增加 CFG 复杂度
🔧 工程化
- 设计 四级混淆模式(OFF / BASIC / MEDIUM / FULL),通过 CMake per-file 属性精细控制不同源文件的混淆策略
- 集成 分层混淆策略:核心模块全量保护(FULL),驱动模块仅指令替换(SUB),工具模块关闭(OFF)
- 集成 字符串编译期加密、反调试、ARM64 花指令、调用混淆等多层防护
- 对接 Android NDK r28c 交叉编译工具链,实现 ARM64 产物一键构建
技术栈
LLVM 19
编译器基础设施
Pass Manager 2.0
ARM64
AArch64 指令集
花指令 / 内联汇编
项目成果
✅ 工具链交付
完成 LLVM 19 版本完整混淆工具链,稳定支撑 Android Native 程序的生产编译
📚 深入理解
深入掌握 LLVM 编译器体系架构、Pass 机制、IR 操作和代码优化/变换原理
🔁 跨版本迁移
积累 LLVM 14→19 的 API 演进与迁移经验,具备编译器工具链工程化能力
🛡 多层防护体系
集成混淆 + 字符串加密 + 反调试 + 花指令 + 调用混淆的全栈加固方案