随着破解、分析技术的发展,苹果自身的 IPA 加密已聊胜于无,攻击者可以很轻易的将 App 进行砸壳和逆向分析,如果没有进行安全防护,App 等同于裸奔,很容易被破解攻击,从而造成一系列安全问题,而采用安全编译器的方式可以对核心代码进行加固,从而有效防护攻击者的分析行为,大大增加破解难度。
注意事项
加固的功能主要是保障安全性,建议相关待加固代码采用 C、C++ 编写;
加固会带来性能损耗和理论上的稳定性风险提高,建议只对核心需要保护的代码进行加固。
使用前准备
Mac 机器
目前支持 X86/M1 机器,可通过 Mac 机器左上角 > 关于本机 > Processor 查看,显示 Intel 相关信息表明是 X86 机器。
Xcode 兼容范围
Xcode 14.2,iOS 加固针对编译器进行处理,对特定 Xcode 进行适配,故使用 mPaaS 加固需要使用特定版本 Xcode,如需要高版本 Xcode,请 提交工单 或联系 mPaaS 技术支持人员。
Build System
要求使用 New Build System,检查位置为 Xcode > File > Project Setting > Build System
。
配置环境文件
生成 MSAConfig.json 放到 $HOME
目录下,在 Mac 机器下打开命令行输入 echo $HOME
,即可得到 $HOME
目录,使用时替换为真实值即可,字段如下:
{
"appId": "应用 appId",
"workspaceId": "应用 workspaceId",
"accessKeyId": "阿里云账号accessKeyId",
"accessKeySecret": "阿里云账号accessKeySecret",
"tenantId":"mPaaS租户Id",
"domain":"xxx"
}
domain 值为:cn-hangzhou。
其他字段值获取方式请参考 iOS 加固配置文件信息获取方式。
安装加固工具
下载安全加固工具,公有云&私有云最新合并版本如下:
swiftplugin-x86_64-5.7.2.zip Xcode 14.2 + Mac X86(操作系统建议 13.2.1)
swiftplugin-arm64-5.7.2.zip Xcode 14.2 + Mac M1(操作系统建议 13.2.1)
解压后进入到目录,如下图所示:
执行下列命令:
./install.sh
该命令会自动查找与替换 /Applications/Xcode.App/ 的编译器,如需要恢复可执行下列命令:
./uninstall.sh
使用加固
打开之前安装加固工具时对应的 Xcode,然后打开 Framework/ipa 工程,执行 Build/Archive
即可,暂不支持动态库,处理完成后可进行反编译查看加固效果。
报错信息
emit-localized-strings
emit-localized-strings-path
修改方案
project -> targets -> Build Settings -> Localization
将Localized String SwiftUI Support 改成NO
将Use Compiler to Extract Swfit Strings 改成NO
混淆配置
Swift 语言支持函数级,局部化启用混淆,在需要进行混淆的目标源代码中添加如下代码:
#if __obfuscator__
@_silgen_name("__obfuscator_function_flags") func __obfuscator_function_flags(flags: Int)
#else
func __obfuscator_function_flags(flags: Int) {}
#endif
在加固的函数中调用 __obfuscator_function_flags(flags: 1)
,如下:
func test1() {
// 启用混淆保护,强度默认
__obfuscator_function_flags(flags: 1)
...
}
加固效果
(可选)推荐使用 hopper 查看加固效果,登录网站 https://www.hopperApp.com,将加固后的二进制文件拖入 hopper 中,全局搜索加固的方法,对比加固前后二进制中的相关实现来验证加固效果。
后续步骤
加固后,请务必检查关键组件功能是否正常,如果安装包在加固后功能异常,请 提交工单 或搜索群号 33417739 加入钉钉群进行咨询交流。