之前做 iOS 代码保护一直走 Obfuscator-LLVM 的路,在 Xcode 编译阶段加混淆脚本。有次接了个 Flutter 二次交付的项目,对方只给了编译好的 IPA,没有完整源码。Obfuscator-LLVM 要求在工程里配编译参数,没源码就没办法。这才发现市面上针对不同场景的 iOS 代码混淆工具已经分出了好几条路线,各自解决不同的问题。

Obfuscator-LLVM

适合有完整 Xcode 工程、愿意折腾编译配置的团队。它在 LLVM 编译中间层做混淆,函数名、控制流都能动,混淆效果彻底。配置方式是在 Build Settings 里加几条编译标志,指定要启用的混淆 Pass。代价是每次 Xcode 大版本更新都得等 Obfuscator-LLVM 适配,滞后几周到一两个月是常有的事。对 Swift 的支持也一直不太完整——Swift 的前端和 LLVM 的版本绑定很深,混编项目里经常只有 OC 部分被混淆,Swift 部分绕过去了。维护一个 LLVM 分支本身也有成本,LLVM 14 到 LLVM 16 那段时间不少项目因为这个放弃了这套方案。

iOS-class-guard

基于 Mach-O 文件直接修改符号表,不需要介入编译过程。用法是在工程里加一个 Script Build Phase,跑一条命令扫描二进制里的 OC 符号,生成替换映射表。对 Objective-C 项目的效果不错,class-dump 出来的结果全是 _TtC 之类的随机前缀。局限也很明显——它只处理 OC 的方法名和类名,Swift 的符号表走的是 mangled name 体系,不在它的处理范围内。资源文件也动不了,图片、xib、配置文件还是原样暴露。如果你的项目是纯 OC 或者 OC 为主,它可以作为一个低成本的入门方案。

360 加固

上传 IPA 到云端,服务端做完加固再下载,流程最简单。加密、反调试、资源保护一次性处理,不需要本地装任何工具链。适合对安全性要求中等、不想花时间配置的团队。但 IPA 要离开本地网络,有些公司内部对代码上传有明确限制,过不了合规。加固策略也不太可调,遇到兼容性问题——比如某个版本的加固导致微信登录 SDK 初始化失败——只能等官方更新,自己排查不了。

IpaGuard

不需要项目源码,直接把 IPA 拖进去就能处理。它会自动解析 IPA 里的二进制文件,按 OC 和 Swift 分别列出类和函数。操作流程分几步:先在代码模块里选要混淆的类,工具按风险等级做了标注——低风险的基本可以全勾上,涉及动态调用或反射的地方建议先跳过。函数和方法也能单独选,支持按风险过滤和搜索定位。处理强度有几档可选,轻度混淆只改名称,开到最高会把函数内部的控制流也打乱。资源文件也在同一个工具里处理——图片、json、xib、js 的名字都能批量改,MD5 也会重新计算,防止资源被替换。所有混淆在本地完成,不上传任何文件。处理完后直接配签名证书,装到手机上跑一遍验证,看功能是不是正常。如果项目是 Flutter、Unity 或 HBuilder 这类跨平台框架打包的,它也能处理,因为这些框架最终编译出来的还是 OC 或 Swift 的二进制。

选择建议

有源码、团队有精力维护 LLVM 编译配置的,Obfuscator-LLVM 的混淆范围和深度最好。只有 IPA 或项目是 Flutter/Unity 这类跨平台打包的,IpaGuard 不需要源码这条路更省事。纯 OC 项目、只想加一层基础保护的,iOS-class-guard 够用。不介意代码上传、追求最简流程的,360 加固也不错。关键是根据项目实际情况挑一个能落地、能持续用的方案。