找「iOS 保护」的团队经常把两件事混在一起。加固的目标是提高逆向成本:反调试、完整性校验、面向攻击者的字符串加密。混淆的目标是改变程序在另一套程序或审核流程里的样子:名字、布局、资源、调用栈,让两次构建不再一眼能看成双胞胎。小蟹做的是后一件事,而且做在编译系统上,归档后即可提审,不必长期维护一套被改得很难读的源码树。
加固通常在做什么
常见加固 SDK 会注入运行时,检测调试器,加密一部分字符串,偶尔虚拟化少量函数。这会提高破解成本,但不会自动给你一套新的审核指纹。同一个工程打出来的两个加固包,只要类列表、资源名、插件目录没变,看起来仍然像一家。
编译级混淆会改什么
语言混淆会处理 C、C++、Objective-C、Swift、Dart 的类型、字段和函数,并可做源码膨胀和常量加密。调用栈混淆改变踪迹形态。资源混淆负责改名、破坏签名和加密载荷。双符号表保留可还原的 dSYM,崩溃工具还能用。隔离的运行时 SDK 让每个包带着与上一份构建不同的支撑文件。
这些改动发生在编译和打包链路里,而不是让你在 Xcode 里手工替换几千个符号。这也是为什么工具能覆盖 Unity、Flutter、Cocos 导出工程:导出之后的 Xcode 树才是审核和用户真正安装的东西,混淆应对准那一棵树。
怎么选型
如果问题是「这个 IPA 长得像上个月那个,或像我们另一个在架应用」,先做混淆,并保证商店元数据诚实。如果问题是「要提高 dump 二进制的成本」,把加固当成另一层来谈。两层同时开又没有排除规则,容易打坏反射、Flutter Channel 或崩溃符号化。小蟹的排除列表就是为了让引擎和插件约定保持稳定。打开全部开关之前,先读 4.3、常见问题 和 在线文档。
不要把混淆理解成对审核隐藏功能的手段。2.3.1 仍然要求 listing 和二进制一致。用工具做特征分离和代码保护,然后提交一个名实相符的产品。Uni-app 走 IPA 加固,不是 Xcode 工程混淆。IR 级保护(类似 OLLVM)走小蟹定向加固:SDK 用 Framework 加固,App 主程序用 App 加固。试用按 Bundle Id 和工程类型申请,收费见 收费方式。