Skip to content

sweetloser/Cocoons

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cocoons

作茧,不是自缚,每一根丝的加持,都是为了保护!

Cocoons Logo

基于 LLVM 的 iOS / macOS 代码混淆工具链


📖 目录


💡 项目简介

Cocoons 是一个基于 LLVM (当前基于 LLVM 21.1.8) 的自定义编译工具链。通过在编译期(IR 层)对代码进行变换,有效增加逆向工程(静态分析、动态调试)的难度,从而保护 iOS / macOS 应用程序的核心逻辑和敏感数据。


✨ 功能特性

  • C/OC 字符串混淆 (String Obfuscation)
    • 动态流加密:编译期生成随机种子并对标记字符串进行流加密,连同 \0 一并混淆,彻底免疫字频分析。
    • 局部使用时解密 (Just-in-Time Decryption):摒弃了传统的启动时全局解密,转而在每个字符串的调用处利用栈(Stack)动态分配并解密。实现“阅后即焚”,彻底防御全量内存 Dump 并发竞争,且实现零“脏内存”增长。
    • 常量特征混淆:解密循环中的密钥与长度均通过数学拆解隐藏,避免逆向工具提取解密逻辑。
    • 兼容 C 数组、C 指针及 Objective-C 的 NSString(内部支持 OC 字符串去重合并处理)。
  • 指令替换 (Instruction Substitution)
    • 拦截并替换 5 种基础二元运算(加法、减法、按位与、按位或、按位异或)。
    • 随机调度机制:为每种运算提供多种等价的复杂数学位运算规则,每次编译随机选取,确保生成的二进制特征多态。
    • 多轮递归膨胀:支持指定混淆深度,对替换后生成的新指令进行二次或多次替换,令代码体积与理解成本呈指数级上升。
  • 控制流平坦化 (Control Flow Flattening):打乱原有的代码执行逻辑,将所有基本块放入一个巨大的状态机(switch-case)中循环执行,极大提高控制流图(CFG)的复杂度。(已在源码中实现)
  • 反调试 (Anti-Debugging):计划中。

🛠 环境与安装

1. 下载源代码

$ git clone https://github.com/sweetloser/Cocoons.git

2. 编译与安装

确保您的 macOS 环境已安装 CMake 和 Ninja。进入项目根目录并执行构建脚本:

$ cd Cocoons
$ ./build.sh

编译完成后,LLVM 工具链将被安装到系统的 Toolchains 目录中(通常在 ~/Library/Developer/Toolchains//Library/Developer/Toolchains/)。


🚀 使用指南

1. Xcode 配置:选择自定义 Toolchain

  1. 重启 Xcode。
  2. 在顶部菜单栏中选择:Xcode -> Toolchains -> 选择 org.llvm.21.1.8 (或类似名称的自定义工具链)。

2. 功能使用详解

在 Xcode 项目的 Build Settings -> Other C Flags 中,添加 -mllvm 并在其后紧跟开启功能的参数。

🔐 字符串加密 (-cocoons-enable-str)

配置参数Other C Flags 添加 -mllvm -cocoons-enable-str

为了兼顾性能,Cocoons 采用注解驱动的混淆方式,只对您标记的字符串进行加密。在代码中使用 __attribute__((annotate("obfuscate"))) 标记目标字符串:

// C 字符数组混淆
__attribute__((annotate("obfuscate"))) const char c_const_array[] = "C Array Hello World!";

// C 字符串指针混淆
__attribute__((annotate("obfuscate"))) const char *c_const_string = "C String Hello World!";

// Objective-C 字符串混淆
__attribute__((annotate("obfuscate"))) NSString *ocConstString  = @"OC String Hello World!";

🔄 指令替换 (-cocoons-enable-sub)

配置参数

  • Other C Flags 添加 -mllvm -cocoons-enable-sub(开启功能)。
  • (可选) 添加 -mllvm -cocoons-sub-loop=N 指定混淆深度,N 默认为 1

开启后,编译器将自动寻找并替换代码中的常见二元算术指令,若开启多轮循环(如 loop=2),生成的新指令将被再次混淆替换。

🔀 控制流平坦化 (-cocoons-enable-fla)

配置参数Other C Flags 添加 -mllvm -cocoons-enable-fla 开启后,编译器会将函数内部的控制流转化为复杂的状态机。


📝 更新日志

最近更新
版本 发布时间 LLVM 版本 更新内容
1.0.1 2026-02-10 21.1.8 修复字符串混淆在多 module 下的 bug
历史记录
版本 发布时间 LLVM 版本 更新内容
v1.0.1 2026-02-10 21.1.8 修复多模块 Bug
v1.0.0 2026-02-09 21.1.8 增加 C/OC 字符串混淆及加法指令替换

📸 演示效果

字符串混淆

混淆前 (IDA 视角) 混淆后 (IDA 视角)

指令替换

混淆前 (CFG/伪代码) 混淆后 (CFG/伪代码)

❤️ 支持与贡献

如果您觉得 Cocoons 对您有帮助,欢迎点击右上角给一个 ★ Star

🔝 回到顶部

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors