基于 LLVM 23.0 的 Hikari 代码混淆工具链,适用于 iOS/macOS 开发。
- ✅ 控制流平坦化 (Control Flow Flattening)
- ✅ 字符串加密 (String Encryption)
- ✅ 间接跳转 (Indirect Branching)
- ✅ 虚假控制流 (Bogus Control Flow)
- ✅ 基本块分割 (Basic Block Splitting)
- ✅ 指令替换 (Instruction Substitution)
- ✅ 函数包装 (Function Wrapper)
- ✅ 反调试 (Anti-Debugging)
- ✅ 反Hook (Anti-Hooking)
- ✅ 常量加密 (Constant Encryption)
- iOS (arm64)
- iOS Simulator (arm64, x86_64)
- macOS (arm64, x86_64)
- tvOS / watchOS
- 下载
Hikari.xctoolchain文件夹 - 复制到 Toolchains 目录:
cp -r Hikari.xctoolchain ~/Library/Developer/Toolchains/- 重启 Xcode
# 创建目录(如果不存在)
mkdir -p ~/Library/Developer/Toolchains
# 复制 toolchain
cp -r Hikari.xctoolchain ~/Library/Developer/Toolchains/
# 验证安装
ls ~/Library/Developer/Toolchains/在 Xcode 菜单中选择: Xcode → Toolchains → Hikari23-MacXK
在 Xcode 项目中: Build Settings → Other C Flags 添加混淆参数
| 参数 | 功能 | 说明 |
|---|---|---|
-mllvm -enable-allobf |
启用全部混淆 | 一键开启所有混淆功能 |
-mllvm -enable-cffobf |
控制流平坦化 | 将代码控制流转换为 switch-case 结构 |
-mllvm -enable-strcry |
字符串加密 | 加密代码中的字符串常量 |
-mllvm -enable-indibran |
间接跳转 | 将直接跳转转换为间接跳转 |
-mllvm -enable-bcfobf |
虚假控制流 | 插入虚假的控制流分支 |
-mllvm -enable-splitobf |
基本块分割 | 将基本块分割成更小的块 |
-mllvm -enable-subobf |
指令替换 | 将简单指令替换为等价的复杂指令 |
-mllvm -enable-funcwra |
函数包装 | 将函数调用包装成间接调用 |
-mllvm -enable-adb |
反调试 | 添加反调试检测代码 |
-mllvm -enable-antihook |
反Hook | 添加反Hook检测代码 |
-mllvm -enable-acdobf |
反类转储 | ObjC 类信息混淆 |
-mllvm -enable-constenc |
常量加密 | 加密数值常量 |
基础混淆(推荐):
-mllvm -enable-cffobf -mllvm -enable-strcry -mllvm -enable-indibran
中等混淆:
-mllvm -enable-cffobf -mllvm -enable-strcry -mllvm -enable-indibran -mllvm -enable-bcfobf -mllvm -enable-subobf
完整混淆:
-mllvm -enable-allobf
可以使用注解控制单个函数的混淆:
// 启用混淆
__attribute((__annotate__(("fla")))) // 控制流平坦化
__attribute((__annotate__(("bcf")))) // 虚假控制流
__attribute((__annotate__(("sub")))) // 指令替换
__attribute((__annotate__(("split")))) // 基本块分割
__attribute((__annotate__(("strcry")))) // 字符串加密
// 禁用混淆
__attribute((__annotate__(("nofla")))) // 禁用控制流平坦化
__attribute((__annotate__(("nobcf")))) // 禁用虚假控制流示例:
__attribute((__annotate__(("fla"))))
__attribute((__annotate__(("strcry"))))
void sensitiveFunction() {
NSString *secret = @"MySecretKey";
// ...
}也可以通过环境变量启用混淆:
export ALLOBF=1 # 启用全部混淆
export CFFOBF=1 # 控制流平坦化
export STRCRY=1 # 字符串加密
export INDIBRAN=1 # 间接跳转
export BCFOBF=1 # 虚假控制流
export SPLITOBF=1 # 基本块分割
export SUBOBF=1 # 指令替换
export FUNCWRA=1 # 函数包装
export ADB=1 # 反调试
export ANTIHOOK=1 # 反Hook
export CONSTENC=1 # 常量加密# 设置 toolchain 路径
export TOOLCHAINS=Hikari21.2-MacXK
# 编译单个文件
clang -mllvm -enable-cffobf -mllvm -enable-strcry -c test.c -o test.o
# 使用 xcodebuild
xcodebuild -project MyProject.xcodeproj -scheme MyScheme TOOLCHAINS=Hikari21.2-MacXK- 编译时间:启用混淆会显著增加编译时间,建议仅在 Release 配置中启用
- 调试困难:混淆后的代码难以调试,建议 Debug 配置不启用混淆
- 代码体积:混淆会增加二进制文件大小
- 兼容性:某些混淆选项可能与特定代码不兼容,如遇问题可尝试禁用部分选项
解决方案:确保 toolchain 包含 lib/clang/23/lib/darwin/ 目录下的运行时库
解决方案:确保使用的是 Hikari toolchain,而不是 Xcode 默认 toolchain
解决方案:尝试减少混淆选项,或对特定函数禁用混淆
- LLVM 版本:23.0.0
- Hikari 版本:基于开源版本修改
- 构建日期:2026年4月
- 作者:MacXK
本项目基于 Hikari 开源版本修改,遵循原项目许可证。