← 返回作品集

OLLVM 代码混淆工具链

基于 LLVM 19 移植并工程化的全栈混淆方案 —— 从 Pass 实现到 NDK 交叉编译,为 Android Native 代码提供多层防护

LLVM 混淆 编译器 安全 NDK
LLVM 19 Clang C++17 CMake Android NDK r28c ARM64 LLVM Pass Manager
4
混淆模式
OFF / BASIC / MEDIUM / FULL
14→19
LLVM 移植跨度
全面适配 API 与 Pass Manager
3
Pass 实现
Flattening / Substitution / BogusCF
4
多层防护
字符串加密 · 反调试 · 花指令 · 调用混淆

系统架构

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
Clang
C/C++ 前端
编译驱动
C++17
LLVM IR 操作
模板元编程
CMake
per-file 属性
分层混淆控制
Android NDK
r28c
交叉编译
ARM64
AArch64 指令集
花指令 / 内联汇编
LLVM IR
中间表示
Pass 变换管道
Git
版本控制
CI 集成

项目成果

✅ 工具链交付
完成 LLVM 19 版本完整混淆工具链,稳定支撑 Android Native 程序的生产编译
📚 深入理解
深入掌握 LLVM 编译器体系架构、Pass 机制、IR 操作和代码优化/变换原理
🔁 跨版本迁移
积累 LLVM 14→19 的 API 演进与迁移经验,具备编译器工具链工程化能力
🛡 多层防护体系
集成混淆 + 字符串加密 + 反调试 + 花指令 + 调用混淆的全栈加固方案