App 加固
小蟹定向加固也可以对准 App 主程序做 IR 级加固,路线同样和 OLLVM 同类:变换发生在 LLVM 中间表示上,不是改 Xcode 源码树的符号,也不是对已经打好的 IPA 做包内处理。控制流平坦化、虚假控制流、指令替换在 App 仍有 IR 时完成,把主二进制的逆向成本抬上去。只保护对外 SDK 时,请走 Framework 加固。
什么时候走这条
你要保护的是即将归档提审的 App 主 Target(原生,或 Unity / Flutter / Cocos 导出的 Xcode 工程都可以评估),而不是单独一份对外 SDK。工程还能经 Clang/LLVM 编译。你要的是 IR 级控制流保护,而不只是语言级改名。
和另外几条入口的区别
Xcode 工程混淆(Unity、Flutter、Cocos、原生)改的是符号、资源、调用栈形态。Uni-app IPA 加固吃的是已经打好的包。Framework 加固对准 SDK 的 IR。App 加固对准的是 App 主二进制的 IR,做法同样接近 OLLVM。入口混用是常见错法:把编好、没有 IR 的 Mach-O 丢进定向加固,或整包 App 却申请成 Framework 加固,都对不上目标。
仍然做不到的事
IR 加固提高逆向成本,不会单独给你一套新的审核指纹,也不会对审核隐藏功能。两个 App 看起来像一家时,仍要走编译级混淆,并保证 listing 诚实,见 4.3 和 混淆和加固。已经剥成没有 IR 的二进制,这里同样不覆盖,和工程混淆 FAQ 一致。
申请试用时写 App 的 Bundle Id,并注明「App 加固」。IR 变换说明见 Framework IR 加固与 OLLVM——pass 相同,目标换成 App。