iOS Swift 应用安全加固(公测)

随着破解、分析技术的发展,苹果自身的 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"
}
说明

安装加固工具

下载安全加固工具,公有云&私有云最新合并版本如下:

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)

解压后进入到目录,如下图所示:

image.png执行下列命令:

./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 加入钉钉群进行咨询交流。