You are on page 1of 56

梆梆安全|BANGCLE

北京梆梆安全科技有限公司

梆梆安全 IOS 应用加固 V4.5.0

用户使用手册
(源到源加固版)

北京梆梆安全科技有限公司
梆梆安全 IOS 应用加固用户使用手册

目录
1. 引言....................................................................................................................5

1.1. 目的.............................................................................................................................................5

1.2. 范围..........................................................................................................................................5

1.3. 运行环境..................................................................................................................................5

1.4. 术语和定义..............................................................................................................................5

2. 桌面客户端(GUI)使用说明...........................................................................6

2.1. 安装与运行..............................................................................................................................6

2.1.1. 安装注意事项..................................................................................................................6

2.1.2. 安装客户端......................................................................................................................6

2.1.3. 运行客户端......................................................................................................................6

2.2. 登录..........................................................................................................................................7

2.2.1. 登录梆梆安全 SaaS 服务平台.......................................................................................7

2.2.2. 登录本地部署的加固系统..............................................................................................8

2.2.3. 离线登录..........................................................................................................................9

2.3. IOS 应用加固.........................................................................................................................11

2.3.1. 创建/打开加固任务......................................................................................................11

2.3.2. 创建新任务....................................................................................................................11

2.3.3. 高级配置说明................................................................................................................15

2.3.3.1. 加固策略配置......................................................................................................................15

2.3.3.2. 扩展策略配置......................................................................................................................19

2.3.3.3. 文件范围配置......................................................................................................................24

2.3.3.4. 符号混淆配置......................................................................................................................26

2.3.4. 提交加固........................................................................................................................27

2.3.5. 停止加固........................................................................................................................28

2.4. 任务列表管理........................................................................................................................28

2.4.1. 重新加固........................................................................................................................31

2.4.2. 删除任务........................................................................................................................31

/ 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2.4.3. 任务详情........................................................................................................................31

2.5. 客户端设置...............................................................................................................................32

2.5.1. 修改登录语言................................................................................................................32

2.5.2. 修改登录密码................................................................................................................33

2.5.3. 更新说明........................................................................................................................34

3. 命令行(CLI)使用说明..................................................................................34

3.1. XCODE 工程加固....................................................................................................................35

3.1.1. 授权文件导入................................................................................................................35

3.1.2. 加固配置........................................................................................................................35

3.1.3. 加固配置文件格式........................................................................................................36

3.1.3.1. 示例......................................................................................................................................36

3.1.3.2. 简介......................................................................................................................................38

3.1.3.3. 节点解释..............................................................................................................................39

3.1.4. 执行加固........................................................................................................................43

3.2. 已知问题和限局性................................................................................................................44

3.2.1. 加固后工程需要做 SCM(Source code Control Management)....................44

3.2.2. Swift 的语言版本支持.................................................................................................44

3.2.3. macOS 版本版本支持.................................................................................................44

3.2.4. 符号混淆潜在风险........................................................................................................44

3.2.5. Swizzling 防护潜在风险.............................................................................................45

/ 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

1. 引言
1.1. 目的

本文档主要用于指导用户熟悉并掌握梆梆安全 iOS 应用加固产品功能和操作流程,


达到基于 PC 桌面软件或命令行流畅使用梆梆安全 iOS 应用加固产品的目的。

1.2. 范围

本文档为公开文档,适用于使用梆梆安全 iOS 应用加固产品的相关产品人员、技术人


员、测试人员、售后实施人员等。

1.3. 运行环境

梆梆安全 iOS 应用加固客户端安装运行在 Mac OS(Mojave10.14 及以后版本)上,


并支持运行在苹果 M1 芯片笔记本上。

1.4. 术语和定义

术语/定义 说明

源到源加固 输入源代码工程文件,加固处理后仍然输出源代码工程文
件。
usc.an110.com 梆梆安全 SaaS 安全云服务平台。
GUI 图形用户界面,本文档内用于指代 iOS 应用加固桌面客户端
软件。

4 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2. 桌面客户端(GUI)使用说明

2.1. 安装与运行

2.1.1. 安装注意事项

梆梆安全 iOS 应用加固客户端软件需要依赖 iOS APP 的开发编译环境,安装时请进行

如下确认:

1. 梆梆安全 iOS 应用加固客户端需要安装在 iOS APP 打包电脑上;

2. 安装前,请确认所有待加固的 iOS APP 是通过此电脑进行生产打包的;

3. 加固前,请确认待加固工程可以编译成功。

2.1.2. 安装客户端

梆梆安全 iOS 应用加固客户端为标准 MAC 软件,请安装 MAC 软件安装标准执行即

可。

具体步骤如下:

1. 获取梆梆安全 iOS 应用加固客户端压缩包文件,解压到当前文件夹;

2. 打开解压后的文件,将 SCShieldClient 拖入 Applications 中,即可成功安装客


户端。

3. 如果使用过老版本的客户端,请先手动删除 “~/Documents/SCShield”(文稿
/ SCShield)下的所有文件。

2.1.3. 运行客户端

请在 Mac 启动台里选择“SCShieldClient”应用并运行:

5 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2.2. 登录

运行梆梆安全 iOS 应用加固客户端 V4.5.0,进入登录界面:

梆梆安全 iOS 应用加固客户端 V4.5.0 支持登录梆梆安全 SaaS 服务平台、客户本地部


署的服务器以及离线使用等多种方式。

2.2.1. 登录梆梆安全 SaaS 服务平台

此登录方式仅适用于登录访问梆梆安全 iOS 应用加固 SAAS 服务平台。

具体步骤:

1、运行“SCShieldClient”应用;

2、点击“设置”,配置梆梆安全 SaaS 服务器地址:

IP 地址:https://usc.an110.com,端口为:443。

6 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

3、配置正确会返回服务器平台版本信息,点击“确定”保存。

4、输入用户名、密码,点击“登录”按钮,即可登录梆梆安全 SaaS 平台。

温馨提醒:梆梆安全 iOS 加固的处理操作完全在客户端软件内完成,登录梆梆安全

SaaS 平台,不会提交源代码到梆梆安全的 SaaS 平台,无需担心代码泄露风险。

2.2.2. 登录本地部署的加固系统

此登录方式仅适用于登录访问部署在客户本地环境内的梆梆安全 iOS 应用加固系统。

具体步骤:

1、运行“SCShieldClient”应用;

2、点击“设置”,配置本地部署的服务器地址:

例如:IP 地址:http://192.168.139.47,端口为:8000。

输入过程,软件会自动测试配置参数是否正确,错误的信息无法连通。

7 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

3、配置正确会返回服务器平台版本信息,点击“确定”保存。

4、输入用户名、密码,点击“登录”按钮,即可登录部署在本地的 iOS 应用加固系

统。

2.2.3. 离线登录

此登录方式主要适用于仅需要安装梆梆安全 iOS 应用加固客户端,但不需要部署或登

录梆梆安全 iOS 应用加固系统的情况下使用。

具体步骤:

1、运行“SCShieldClient”应用;

2、点击“离线登录”按钮直接进入离线使用模式,无需设置、无需输入用户名和密

码。

温馨提醒:离线模式下,需要在该机器上导入 license 授权才能使用加固服务。

离线模式下,更新 license 的步骤如下:

1)点击“设置与帮助”按钮

8 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2)点击“更新授权文件”按钮,导入我公司发给您的离线 license 文件。会提示


“恭喜,成功导入授权文件!”的提示框。

2.3. iOS 应用加固

IOS 源到源加固系统,通过混淆引擎会把接收的文件生成抽象语法树 (AST)去进行


分析和变换。这就需要客户端引擎将文件预编译(目的是出来头文件和宏定义产生可以生
成完整 AST 的文件),因此我们会调用本地开发环境对工程做编译。

9 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

源代码层面的混淆技术,可以有效防止单点绕过,增加对加固后代码的安全审阅能力,
可以快速实现基于源代码的问题定位分析。

2.3.1. 创建/打开加固任务

登录后会默认打开“创建加固任务”窗口,用户可以创建新任务或者打开近期使用的

任务,如下图所示:

2.3.2. 创建新任务

点击“创建新任务”按钮,则会进入新建加固任务界面,如下图所示:

10 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

选择平台 iOS 或者其他平台

任务名称 输入的任务名称仅支持英文、数字、下划线和括号,长度不超过
15 个字符,且任务名称不可重复

选择 iOS 平台,输入并提交加固任务名称后,跳转至加固任务配置界面,如下图所示 :

11 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

工程路径 是您需要加固的 iOS 工程文件根目,可以通过点击浏览按钮来填


入,选择后会自动匹配出 project/workspace、scheme/
target。

选择 Project/ 您工程文件的 Project/workspace,位于您需要加固的 iOS 工程


workspace 文 件 根 目 录 下 , 选 择 工 程 路 径 后 会 自 动 匹 配 出 project /
workspace 、 scheme/target 。 若 未 匹 配 出 project /
workspace 可手动输入设置路径。
工程路径加上输入的 project/workspace 值,需要能定位到工程
文件。
您工程文件的 Project/workspace 的名称包括后缀名,例如你工
程 为 .xcodeproj , 并 位 于 子 目 录 MySubDir , 则 这 里 就 是 填
MySubDir/ocproject.xcodeproj。
注:推荐工程路径和文件名均为英文,不推荐使用中文路径或使
用特殊符号(如:括号()、空格、特殊字符(如: ¥$%)
等)。
如果工程路径中包含的文件工程数太多,可能会导致解析超时,
如不想手动输入,还可采用如下方法避免超时:
在工程路径目录下创建文件 xctool_skip.flg,并在目标工程所在

12 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

的目录下创建文件 xctool_parse.flg。

选择 scheme/target 为您工程文件下的 scheme/target,可点击下拉框进行修改。


注意:
1、 如果没能自动解析出上述参数,请手动录入与工程匹配
的 scheme/target 参 数 。 格 式 为 : [scheme]+ 工 程
scheme 名称的拼接,均为英文,例如你工程 scheme 为
myScheme,则这里就是填[scheme]myScheme。
2、 优先选择 Scheme,极少数特殊情况选择 Target。

配置 configuration 您 工 程 中 所 配 置 的 configuration , 选 择 您 所 需 要 加 固 的
configuration,如果不确定,则可以不填写,默认 Release 模
式。

输出路径 是您加固后输出的工程文件路径,格式为:工程路径/工程文件
名_sec,路径名称只能为英文。(不支持修改)

高级配置 高级配置包括加固策略配置、扩展策略配置、文件配置、符号混
淆配置。
1、加固策略配置,包括设定加固强度、选择高级功能(完整性
保护、防调试、字符串加密、防 hook、防注入等)、选择附加
功能(生成加固日志、验证加固结果、原位置混淆、优化编译时
间);
2、扩展策略配置 ,包括防二次打包 、防设备越狱 、防 Frida
hook 增强、app 模糊化、防日志泄漏、防 AirPay 投屏、Fish
hook 关键函数防护,防代理,防模拟器,防虚拟定位,https 证
书校验等;
3、文件配置,包括文件过滤列表、文件混淆列表。文件过滤列
表表示对列出的文件不被加密;文件混淆列表表示对列出的文件进
行加密;
4、符号混淆,用于对 object-c 函数类名、方法名、属性名、类
别进行混淆。

2.3.3. 高级配置说明

通过加固任务配置界面的“高级配置”功能,可以进行 iOS 应用加固策略、保护范围

进行配置。

2.3.3.1. 加固策略配置

点击“加固策略”标签,可以打开 iOS 应用加固策略配置界面,如下图所示:

13 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明 对客户端的影响 潜在风险 配置建议

控制流混淆 功能:通过把代码的执 会增加代码量,对 包 无 设置控制流


行控制逻辑(if… else 语
体大小、性能有影响 混淆范围:
句、for 语句)等效变换

14 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

为平坦的控制逻辑 建议合理配置,数值 支持设置范


(switch…case 语句),
越高,对体积和性能 围为 0-
这样就隐藏了程序原始
的层次结构。 影响越明显。 100%,0 为

不开启。
原理:混淆器读入代码
文件,生成抽象语法树 建议数值为
(AST),根据 AST 分
60-80
析代码的控制流并拆分
出代码块(block),然
后对代码块进行重排,
放 入 switch case 结 构
中,从而实现控制流平
坦化。

基本块分割 功能:把顺序执行的代 会增加代码量,对 包 无 暂无单独配


码进行等效转换,拆分
体大小、性能有影响 置项,随控
成若干块,每个代码块
制流混淆功
都添加执行控制逻辑 暂无单独配置项,随
能而生效
原 理 : 在 控 制 流 混 淆 控制流混淆功能而生
前,把 AST 中的基本块 效
进行拆分

字符串加密 功能:可以对代码中的 对包体大小、性能 无 如遇极特殊情况,字 建议开启


敏感字符串进行加密, 符串加密会引发崩
影响
会为字符串自动随机产
溃。第一次使用,此
生一个字符串解密函
数,避免攻击者通过逆 情况需全量测试排
向分析发现字符串快速
查。后续根据功能变
定位到系统
化进行增量测试
原理:替换代码位置的

字符串为随机字符串解

密函数

静态防调试 功能:防止程序被调试 会增加代码量,对 包 如检测到程序被调 建议开启

15 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

体大小、性能 有一定 试,则程序主动崩溃

影响 (不支持客户自定义
原理:撒点的方式,对

ptrace、sysctl 系统函数 响应事件)。

的调用相关代码进行嵌

入,当运行到此处时,

进行检查

静态完整性 功能:防止程序逻辑被 会增加代码量,对 包 如检测到完整性被破 建议开启


篡改
保护 体大小、性能 有一定 坏,则程序主动崩溃

原理:通过在源代码的 影响 (不支持客户自定义

c、oc 函数内添加完整性 响应事件)。

校验代码(对代码段分

段进行校验),防止恶

意篡改 APP 代码。

静态防注入 功能:防止程序逻辑被 会增加代码量,对 包 如检测到注入行为, 静 态 防 注


inline hook 、 Cycript 注 则程序主动崩溃(不 入,建议开
体大小、性能 有一定
支持客户自定义响应 启
入 、 Reveal 注 入 以 及
影响 事件)。
swizzling hook 防 cycript
注入(包含
原理:通过在源代码的
防 Reveal
c、oc 函数内添加防注入
注入),按
校验代码(包含对 需开启

frida、Cycript、Reveal SwizzlingH

的特征检测),保护 ook 功能,


请确认后按
APP 运行时该函数不被
需 开 启 。
动态注入分析。 注:如用户
本 身 使 用
Swizzling
Method ,

16 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

应将此项取
消勾选。

防 Cycript
注入功能,
请 按 需 开
启。

动态防调试 功能:防止程序被调试 此为静态库提供的功 如检测到调试行为, 建议开启

原理:开启线程,全局 能,对包体大小、性 则程序主动崩溃(支

的方式,对 能无影响 持客户自定义响应事

ptrace、sysctl 系统函数 件)。

的调用,进行是否被调

试检查。

动态完整性 功能:防止程序逻辑被 此为静态库提供的功 如检测到破坏完整性 建议开启


篡改
保护 能,对包体大小、性 行为,则程序主动崩

原理:开启线程,全局 能无影响 溃(支持客户自定义

的方式,进行完整性检 响应事件)。

查(对整个代码段进行

校验)。

动态防 功能:防止程序被 inline 此为静态库提供的功 如检测到 hook 行为, 建议开启


hook
hook 能,对包体大小、性 则程序主动崩溃(支

原理:开启线程,全局 能无影响 持客户自定义响应事

的方式,进行是否被 件)。

hook 检查(检测函数开

头的字节码)

生成加固日 生成全部加固日志,便 增加加固时间 无 默认关闭。

17 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

志 于定位问题 按需开启

验证加固结 混淆完成之后再编译一 增加总体混淆时间 无 默认开启。

果 次,
按需关闭

原位置混淆 开启此功能,将在原位 减少加固时间 无 默认关闭。

置进行混淆。
按需开启

优化预编译 开启此功能,预编译流 减少加固时间 无 默认关闭。

时间 程不再进行生成汇编指
按需开启
令、链接、生成 macho

等流程。

打开编译签 开启此开关,则编译中 消除加固时的 签名错 无 默认关闭。

名 使用签名,用于消除加 误
按 需 开 启
固时发生签名的错误
(仅在加固

发生签名相

关错误时打

开)

静态防调的优势:添加防调试校验因子到各个函数内,即使攻击者破解了某个函数,也不

会导致 APP 防调试能力被屏蔽,有效对抗单点绕过攻击。

动态防调的优势:添加全局守护校验因子,在 APP 运行时第一时间启动,实时对抗调试攻

击、hook 攻击,与静态防调搭配,建立双层立体防调、防 hook 保障体系。

18 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2.3.3.2. 扩展策略配置

点击“扩展策略”标签,可以打开 iOS 应用加固扩展策略配置界面,如下图所示:

相关说明如下:

选项 说明 对客户端的影响 潜在风险 配置建议

防二次打包 功能:支持绑定 此 为 静 态 库 提 供 的 功 发现二次打包,默认按闪 按需开启

app 包名、签名 能,对包体大小、性能 退处理,客户可以在回调

(teamid),防止二 无影响 函数里自定义处理行为

次打包:

绑定的包名、签名

必须同时配置,只

19 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

支持绑定当前工程

app 的包名签名。

原理:获取包名和

签名,判断与客户

指定的是否一致

防设备越狱 功能:检测设备是 此 为 静 态 库 提 供 的 功 检测到越狱设备,默认按 按需开启

否被越狱 能,对包体大小、性能 闪退处理,客户可以在回

无影响 调函数里自定义处理行
原理:通过权限、
为。
路径等特征检测是

否 root

防 Frida 功 能 : 检 测 frida 此 为 静 态 库 提 供 的 功 发现 hook 行为,默认按 按需开启

Hook 增强 hook 行为并进行阻 能 , 对 包 体 大 小 无 影 闪退处理,客户可以在回

断 响; 调函数里自定义处理行

为。
原理:基于内存深 此功能会损耗性能

度扫描 frida 特征

防日志泄漏 功能:支持对 C/C+ 此 为 静 态 库 提 供 的 功 此功能仅存在生效与否状 按需开启

+ 、 Objective- 能,对包体大小、性能 态,不做任何其他处理。

C、Swift 内的系统 无影响

日志输出进行屏

蔽 ,防 止敏 感信 息

泄漏。

20 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

原 理 : 对

stdout 、 stderror

进行重定向

防 屏 幕 共 享 功能:1、实现对多 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 按需开启

/AirPlay 种远程会议/协同控 能,对包体大小、性能 以在回调函数里自定义处

制 软 件 的 共 享 阻 无影响 理行为。

断 。测 试过 的软 件

包括爱思助手投

屏,腾讯会议投

屏 ,向 日葵 远程 投

屏 , Todesk 远 程

投 屏 。 2、支 持阻

断 AirPlay 投屏,防

止信息泄漏。

原理:1、通过遍历

AVAudioSession

的 通道 ,检 测是 否

存在屏幕共享通

道 ,并 根据 屏幕 捕

获 相关 方法 ,来 判

断 是否 存在 第三 方

sdk 的 录 屏 投 屏 行

为。

2 、 通 过 遍 历

AVAudioSession

的 通道 ,检 测是 否

存在 AirPlay 通道,

21 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

并 根据 相关 系统 消

息 通 知 , 通 报

AirPlay 投屏行为。

App 模糊化 功能:支持 App 后 此 为 静 态 库 提 供 的 功 此功能仅存在生效与否状 按需开启

保护 台 切换 过程 的屏 幕 能,对包体大小、性能 态,不做任何其他处理。

模 糊化 ,防 止信 息 无影响

泄漏。

原 理: 根据 系统 通

知 , 判 断 app 状

态 ,并 添加 相应 的

UI

功能:检测
Fish hook 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 按需开启
getenv、open、s
关键函数保 能,对包体大小、性能 以在回调函数里自定义处
ysctl、dlsym、sys
护 无影响 理行为。
call 等 5 个常用的

关键系统函数,对

Fish hook 行 为 进

行阻断。

原 理: 检测 函数 地

址 是否 在系 统库 的

代码段

https 证书 功 能: 服务 器地 址 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 按需开启

校验 和 ca 证书必须同时 能,对包体大小、性能 以在回调函数里自定义处

配 置, 防止 中间 人 无影响 理行为。

攻击。

22 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

原理:对本地 ca 证

书 以及 服务 器获 取

到 证书 的公 钥进 行

匹配

防代理 功能:保护 APP 无 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 按需开启

法 通过 代理 方式 对 能,对包体大小、性能 以在回调函数里自定义处

app 的 通 信 请 求 进 无影响 理行为。

行 抓包 分析 。禁 止

网 络代 理 ,可 以有

效 对抗 抓包 分析 攻

击。

原 理: 系 统提 供了

CFNetworkCopyS

ystemProxySettin

gs 函数,可以获取

到 系统 代理 配置 信

息。

*说明:仅对抓包代

理 进行 了防 护, 对

VPN 代理没有做防

护。

防模拟器 功 能: 防止 应用 安 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 按需开启

装到 xcode 模拟器 能,对包体大小、性能 以在回调函数里自定义处

并 运行 (实 际上 加 无影响 理行为。

固 后工 程并 不支 持

以 ios Simulator

23 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

target 运 行 , 这 里

指 防止 运行 到 包 括

x86 以 及 M1/M2

芯 片 Mac 设 备

上 ), 以防 止运 行

到 Mac 设备上后带

来 的一 系列 风险 ,

包 括数 据泄 露, 伪

造运行轨迹等。

原 理: 根据 运行 时

环 境变 量以 及硬 件

设 备信 息判 断当 前

是 否运 行于 模拟 器

( 任 意 架 构 的

Mac)环境。

*说明:首先说明加

固 后的 工程 不支 持

以 ios Simulator 为

target 运 行 , 防 模

拟器的是对 app 在

mac m1 和 mac

m2 设 备 上 直 接 运

行进行的防护。

防虚拟定位 功 能 : 保 护 iOS 此 为 静 态 库 提 供 的 功 默认按闪退阻止,客户可 用 于 基 于 移

APP 无法在篡改 或 能,对包体大小、性能 以在回调函数里自定义处 动 位 置 场 景

模 拟地 理位 置的 设 无影响 理行为。 的业务

备上运行。

24 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

原 理: 根 据运 行时

CLLocation 类型以

及 获取 到的 地理 位

置 数据 频次 、数 值

特 征判 断当 前地 理

位置是否被修改。

*说明:通过调用

com.apple.simulat

elocation 服务,实

现 防虚 拟定 位, 例

如可以防护使用

Xcode 通过 GPX 虚

拟 定位 ,以 及使 用

爱思助手虚拟定

位 。该 功能 不会 自

行 申请 位置 权限 ,

且 防 护 仅 在 该 app

存 在位 置权 限时 才

会生效。

扩展策略的响应事件自定义方法:

以下扩展功能支持客户自定义响应事件,包括:

· 防二次打包:默认保护策略,检测到二次打包行为,APP 闪退处理。

· 防设备越狱:默认保护策略,检测到越狱设备,APP 闪退处理。

· 防 Frida hook(增强级):默认保护策略,检测到 hook 攻击,APP 闪退处理。

· 防 AirPlay 投屏:默认保护策略,检测到投屏行为,APP 闪退处理。

· Fish hook 关键函数防护:默认保护策略,检测到 fish hook 行为,APP 闪退处

25 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

理。

· https 证书校验:默认保护策略,检测到中间人攻击,APP 闪退处理。

客户可以通过修改加固配置文件,自定义相关安全功能的响应事件:

App 加固完成之后,请查找并编辑当前加固的源工程路径(根目录)下面的

SecureUtilityPlusConfig.m 加固配置文件。

配置文件里默认的处理扩展策略的代码,如下:

从安全保护目标来出发,默认安全保护策略会以 APP 闪退的方式阻断攻击行为,如客户自

身需要执行自定义的安全响应行为,比如弹出提醒信息等,请按照下来说明修改配置文件。

+(void)load{

26 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

     secureUtilityPlusRequiredParameters = [[NSDictionary alloc]

initWithObjectsAndKeys:teamID,@"teamID",bundleID,@"bundleID",disableLog,@"disableLog",sceenBlurShift,@"sceenBlurShift",

certificateName, @"certificateName", websiteUrl, @"websiteUrl", nil];

SecureUtiltityPlus *secureUtil = [SecureUtiltityPlus shareInstance];

secureUtil.shouldDoAppResignCheck = shouldAppResignCheck;

secureUtil.shouldDoJailbreakCheck = shouldJailbreakCheck;

secureUtil.shouldDoSslPinningCheck = shouldSslPinningCheck;

secureUtil.shouldDoAirPlayCheck = shouldAirPlayCheck;

secureUtil.shouldDoFridaCheck = shouldFridaCheck;

secureUtil.shouldDoDebugCheck = shouldDebugCheck;

secureUtil.shouldDoSwizzlingHookCheck = shouldSwizzlingHookCheck;

secureUtil.shouldDoInlineHookCheck = shouldInlineHookCheck;

secureUtil.shouldDoAppIntegrityCheck = shouldAppIntegrityCheck;

secureUtil.shouldDoNetworkProxyCheck = shouldCheckNetworkProxy;

secureUtil.shouldDoFishHookCheck = shouldFishHookCheck;

secureUtil.shouldDoLocationFakeCheck = shouldLocationFakeCheck;

secureUtil.shouldDoSimulatorCheck = shouldSimulatorCheck;

/*

检测到被二次打包、设备越狱、Frida Hook、AirPlay 投屏、防调试、防 Swizzling Hook、防 Inline Hook、检测 app 完整性、

检测网络代理、Fish Hook、防位置模拟功能、防模拟器运行功能,默认按闪退处理。

用户可以通过重写每个检测项对应的 handler 来自定义处理行为,以下为示例。

*/

/*

secureUtil.appResignCheck = ^(BOOL isAppResigned) {

//防二次打包功能,参数 isAppResigned,被重签名时为 YES,否则为 NO。

NSLog(@"is app resigned %d", isAppResigned);

if(isAppResigned){

for_example_showAlert(NULL,@"应用已被重签名",NO);

};

secureUtil.jailbreakCheck = ^(BOOL isRoot) {

//防设备越狱功能,参数 isRoot,运行在越狱环境为 YES,否则为 NO。

27 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

NSLog(@"is root %d", isRoot);

if(isRoot){

for_example_showAlert(NULL,@"此设备已越狱",YES);

};

secureUtil.sslPinningCheck = ^(BOOL isAttacked) {

//SSL 证书检验功能,参数 isAttacked,存在中间人攻击时为 YES,否则为 NO。

NSLog(@"is attacked %d", isAttacked);

if(isAttacked){

for_example_showAlert(NULL,@"应用运行过程中,存在被中间人攻击现象",NO);

};

secureUtil.airPlayCheck = ^(BOOL isAirPlayOutput) {

//防 AirPlay 投屏,参数 isAirPlayOutput,检测到 AirPlay 投屏时为 YES,否则为 NO。

NSLog(@"is AirPlay output %d", isAirPlayOutput);

if(isAirPlayOutput){

for_example_showAlert(NULL,@"应用运行过程中,存在 AirPlay 投屏、HDMI 投屏及其他投屏现象",NO);

};

secureUtil.fridaCheck = ^(BOOL isFridaAttack) {

//防 Frida Hook(增强级)功能,参数 isFridaAttack,监测到 Frida hook 攻击时为 YES,否则为 NO。

NSLog(@"is Frida attack %d", isFridaAttack);

if(isFridaAttack){

for_example_showAlert(NULL,@"应用运行过程中,存在被 Frida 攻击现象",NO);

};

secureUtil.debugCheck = ^(BOOL isDebug) {

//防调试功能,参数 isDebug,监测到 App 被调试时为 YES,否则为 NO。

NSLog(@"is Debuging %d", isDebug);

if(isDebug){

for_example_showAlert(NULL,@"应用运行过程中,存在被调试现象",NO);

};

secureUtil.swizzlingHookCheck = ^(BOOL isSwizzlingHook) {

28 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

//防 Swizzling Hook 功能,参数 isSwizzlingHook,监测到 App 被 swizzlingHook 时为 YES,否则为 NO。

NSLog(@"is swizzlingHook attack %d", isSwizzlingHook);

if(isSwizzlingHook){

for_example_showAlert(NULL,@"应用运行过程中,存在被 Swizzling Hook 现象",NO);

};

secureUtil.inlineHookCheck = ^(BOOL isInlineHook) {

//防 Inline Hook 功能,参数 isInlineHook,监测到 App 被 inlineHook 时为 YES,否则为 NO。

NSLog(@"is inlineHook attack %d", isInlineHook);

if(isInlineHook){

for_example_showAlert(NULL,@"应用运行过程中,存在被 Inline Hook 现象",NO);

};

secureUtil.appIntegrityCheck = ^(BOOL isIntegrityBroken) {

//检测 app 完整性功能,参数 isIntegrityBroken,监测到 App 完整性被破坏时为 YES,否则为 NO。

NSLog(@"is integrity broken %d", isIntegrityBroken);

if(isIntegrityBroken){

for_example_showAlert(NULL,@"应用运行过程中,存在代码段完整性被破坏现象",NO);

};

secureUtil.npHandler = ^(BOOL networkProxyExists) {

//检测网络代理,参数 networkProxyExists,监测到设置了网络代理时为 YES,否则为 NO。

NSLog(@"network proxy exists %d", networkProxyExists);

if(networkProxyExists){

for_example_showAlert(NULL,@"应用运行过程中,检测到网络代理",NO);

};

secureUtil.fishCheck = ^(BOOL isFishHook) {

//防 Fish Hook 功能,参数 isFishHook,监测到 App 被 fishHook 时为 YES,否则为 NO。

NSLog(@"is fishHook attack %d", isFishHook);

if(isFishHook){

for_example_showAlert(NULL,@"应用运行过程中,存在被 Fish Hook 现象",NO);

};

29 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

secureUtil.locationFakeCheck = ^(BOOL isLocationFaked) {

//防位置模拟功能,参数 isLocationFaked,监测到 App 位置定位被修改时为 YES,否则为 NO。

NSLog(@"is fishHook attack %d", isLocationFaked);

if(isLocationFaked){

for_example_showAlert(NULL,@"应用运行过程中,存在位置模拟现象",NO);

};

secureUtil.scrSimulatorCheck = ^(BOOL isRunInSimulator) {

//防模拟器运行功能,参数 isRunInSimulator,监测到 App 模拟器运行时为 YES,否则为 NO。

NSLog(@"is run in simulator %d", isRunInSimulator);

if(isRunInSimulator){

for_example_showAlert(NULL,@"应用存在模拟器运行现象",NO);

};

*/

  

2.3.3.3. 文件范围配置

点击高级配置,弹出文件过滤页面。具体见下图所示:

30 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

需要过滤的文件列表 该列表内的文件将不被混淆。

需要混淆的文件列表 1、如果该文件列表不为空,则该列表内的文件将被混淆;

2、如果该文件列表为空,则除过滤文件列表之外的文件全部混

淆,行为与全选(*)一致。

2.3.3.4. 符号混淆配置

31 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

(本功能如配置不当,可能会导致程序异常,首次使用请在技术指导下进行)

点击高级配置,弹出符号混淆页面。具体见下图所示:

相关说明如下:

1、符号混淆用于对 object-c 符号进行混淆,不支持 swift;

2、符号混淆默认对 object-c 属性相关符号进行过滤,因为符号可能用于数据模型,


在 model 与 json、xml 等数据互转时,属性名不能被替换。如希望开启属性混淆,可在加
固配置文件根结点添加<IsOBFProperty>1<IsOBFProperty>节点,并采用命令行加固的
方式进行,同时保证把不需要混淆的属性添加到黑名单;

3、符号混淆结束后,会在项目文件夹根目录,写入 SymbolobfManifest.sh 配置文


件,方便客户定位符号;如遇到异常,混淆失败,客户也可根据 SymbolobfManifest.sh
配置文件定位异常符号,并加入到黑名单过滤,并重新加固;

4、关于混淆规则的编写规则如下:

32 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

A.每行一条规则

B.规则的组成为:规则符(必填,1 字符)+通配符 1(可选,1 字符)+字符串(必填,1-


255 字符)+ 通配符 2(可选,1 字符),其中规则符第一个字符为:“!”过滤;

通配符为:“*”,可进行模糊匹配;字符串为:用户需要混淆或过滤的类名、方法名、
或类名、方法名、的一部分,区分大 小写;例如:

!*View,意为“过滤所有后缀为 View 的类名、方法名”;

!View*,意为“过滤所有前缀为 View 的类名、方法名”;

2.3.3.5. 加密配置

(本功能如配置不当,可能会导致程序异常,首次使用请在技术指导下进行)

点击高级配置,弹出加密配置页面。具体见下图所示:

33 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

证书文件加密功能原理:App 打包过程中,资源保护命令行工具对指定的文件进行加密 。
App 运行过程中,支持代码中通过特定的系统 API 进行读取加密文件。

定义证书文件加密范围:

1、配置规则:每行一个证书文件名全称(带扩展名),不需要写文件路径,不支持
通配符,示例如 test.cer。

2、证书加密适用规则:

1)Objective-C 语言,仅适用通过特定系统 API 读取文件时的加密保护;

"NSData 类方法:dataWithContentsOfFile"

2)Swift 语言,仅适用通过系统结构体 Data 的初始化方法读取文件时的加密保护;

“@inlinable public init(contentsOf


url:URL,options:Data.ReadingOptions=[])throws“

4、注意事项:
1) 证 书 加 密 过 程 会 绑 定 teamid 和 bundleid , 加 固 后 请 不 要 更 换 teamid 和
bundleid 进行上架。
2) 如果证书不是使用以上 API 读取的,则不能开启此功能,开启后会出现请求异常等
问题。

5、其他限制:已加密的证书文件不能再进行修改或者替换。 加固后请不要更换

teamid 和 bundleid。只支持加固后工程的编译过程中加密,不支持证书的动态更

新,但是不影响使用,因为解密失败就直接返回原文件,证书加密在热更新情况下,

功能就失效了。

2.3.4. 提交加固

配置好对应的信息,点击提交加固,对您需要加固的工程文件进行加固,具体如下图

所示:

34 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

加固进度 工程文件加固的进度百分百、加固时间等

2.3.5. 停止加固

可对当前加固的工程文件进行停止加固操作,停止后只能进行重新加固。

2.4. 任务列表管理

点击主菜单下的任务列表按钮,打开任务列表页面,具体如下图所示:

35 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

任务名称 为您已经完成加固任务的任务名称

工程平台 为您选择的工程平台,包括 Android studio、Android NDK 和

iOS

提交时间 为您工程文件提交加固的时间

任务状态 为您工程文件加固后的状态,包括加固成功、加固中、加固失

败、网络传输失败、预处理中、预处理失败等

选择单个任务列表,右键任务可进行重新加固、删除任务、完整性保护后处理、查看

任务详情、打开输出文件夹、导出加固日志等操作。具体如下图所示:

36 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

重新加固 对已完成的加固任务进行重新加固

删除任务 删除当前加固任务

任务详情 查看已完成的加固任务详情

2.4.1. 重新加固

点击重新加固,弹出确认提示框,点击确认回到当前任务的配置页,可以重新修改相关加

固内容、策略,重新提交加固。

2.4.2. 删除任务

点击删除任务,弹出提示框,确认则删除任务,取消回到上一页面。具体如下图所示:

37 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

2.4.3. 任务详情

点击任务详情,查看当前任务配置信息,具体如下图所示:

2.5. 客户端设置

点击主菜单下的设置与帮助,跳转到对应页面,包括系统信息、更新说明和关于我们。

2.5.1. 修改登录语言

点击系统信息,跳转系统信息页面,可以切换客户端默认显示语言,具体如下图所示:

38 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

相关说明如下:

选项 说明

版本信息 当前客户端版本和服务端版本,系统语言支持简体中文、繁体中

文、英文、韩文切换

账号信息 当前客户端的账号、系统服务期限,密码等

2.5.2. 修改登录密码

点击系统信息,跳转系统信息页面,可以重置登录密码。(适用于在线登录方式)

2.5.3. 更新说明

点击更新说明,可以查看客户端版本更新信息,具体如下图所示:

39 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

3. 命令行(CLI)使用说明

40 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

3.1. Xcode 工程加固

3.1.1. 授权文件导入

在 离 线 模 式 运 行 之 前 , 用 户 需 要 导 入 离 线 的 license 文 件 , 导 入 license 的 工 具
bclm(路径为: ~/Documents/SCShield/native_tools_mac_xxx/tools/bclm),导入
license 的命令如下:

cd /Users/usrxxx/Documents/SCShield/

./native_tools_mac_xxx/tools/bclm -i <yourLicense_path>

返回:

import license success!

则表示 license 导入成功,否则 license 导入失败。

示例:

3.1.2. 加固配置

待加固工程的配置信息需写入 xml 文件(客户端可以根据图形界面生成 xml 配置文件,


也可根据模版手工编辑)

1) Xcode 工程类型

对 Xcode 工程加固需要正确选择工程的编译选项,Xcode 工程有二种编译配置形式:

workspace scheme

project scheme

可通过 xcodebuild -list 命令来查看工程包含的配置

41 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

3.1.3. 加固配置文件格式

3.1.3.1. 示例

<?xml version="1.0" encoding="UTF-8"?>

<SourceShieldV3>

//客户端传输协议 默认配置

<Protocol>https</Protocol>

//服务端版本 默认配置

<ServerVersion>5.5</ServerVersion>

//服务端地址 默认配置

<IP>usc.an110.com</IP>

//服务端端口 默认配置

<Port>443</Port>

//加固客户端版本 默认配置

<Version>4.5.0</Version>

//加固账号 默认配置

<Username>test-zp</Username>

//构建类型 默认配置

<ProjectType>xcode</ProjectType>

//平台类型 默认配置

42 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

<Platform>ios</Platform>

//项目目录 根据实际填写

<SourceRoot>/Users/mac/Desktop/TEST</SourceRoot>

//xcodeproj 或者 workspace 所在目录 根据实际填写

<XcodeProject>/Users/mac/Desktop/TEST/TEST.xcodeproj</XcodeProject>

//项目 scheme 根据实际填写

<Scheme>TEST</Scheme>

//项目 configuration 根据实际填写

    <XcConfiguration>Debug</XcConfiguration>

<SafeSDK>

//安全 sdk 总开关 开启为 1,关闭为 0

        <Enable>1</Enable>

//安全 sdk 之防二次开关 开启为 1,关闭为 0

        <AppResignCheck>0</AppResignCheck>

//安全 sdk 之防模拟器运行开关 开启为 1,关闭为 0

<SimulatorCheck>0</SimulatorCheck>

//安全 SDK 之防代理开关 开启为 1,关闭为 0

<NetworkProxy>0</NetworkProxy>

//安全 SDK 之防虚拟定位开关 开启为 1,关闭为 0

<LocFakeCheck>0</LocFakeCheck>

//安全 sdk 之防越狱开关 开启为 1,关闭为 0

        <JailbreakCheck>0</JailbreakCheck>

//安全 sdk 之防屏幕截屏开关 开启为 1,关闭为 0

        <ScreenOutputCheck>0</ScreenOutputCheck>

//安全 sdk 之防 https 证书校验开关 开启为 1,关闭为 0

        <SslPinningCheck>0</SslPinningCheck>

//安全 sdk 之防 AirPlay 投屏开关 开启为 1,关闭为 0

        <AirPlayCheck>0</AirPlayCheck>

//安全 sdk 之防 Frida hook 增强开关 开启为 1,关闭为 0

        <FridaCheck>0</FridaCheck>

//安全 sdk 之防 Fish hook 增强开关 开启为 1,关闭为 0

        <FishHookCheck>0</FishHookCheck>

//安全 sdk 之防重签名需要的 teamid 信息 按实际填写

43 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

        <TeamID></TeamID>

//安全 sdk 之防重签名需要的 bundleid 信息 按实际填写

        <BundleID></BundleID>

//安全 sdk 之防 https 证书校验需要的证书地址信息 按实际填写

        <CertificatePath></CertificatePath>

//安全 sdk 之防 https 证书校验需要的 URL 地址信息 按实际填写

        <WebsiteUrl></WebsiteUrl>

//安全 sdk 之防日志泄漏开关 开启为 1,关闭为 0

        <DisableLog>0</DisableLog>

//安全 sdk 之 app 模糊化保护开关 开启为 1,关闭为 0

        <SceenBlurShift>0</SceenBlurShift>

//安全 sdk 之动态防调试开关 开启为 1,关闭为 0

        <DebugCheck>1</DebugCheck>

//安全 sdk 之动态防 hook 开关 开启为 1,关闭为 0

        <HookCheck>1</HookCheck>

//安全 sdk 之动态完整性开关 开启为 1,关闭为 0

<IntegrityCheck>1</IntegrityCheck>

//安全 sdk 之证书文件加密开关 开启为 1, 关闭为 0

<ResourceCheck>1</ResourceCheck>

<ResourceCheckList>

//需要加密的证书名称列表 按需填写

<FilePath>httpbin.org.cer </FilePath>

</ResourceCheckList>

    </SafeSDK>

<BlackList>

//需要过滤的文件名单 按需填写

        <FilePath>Pods/*</FilePath>

    </BlackList>

<WhiteList/>

//优化预编译时间开关 开启为 1,关闭为 0

<FirstDryRunBuild>0</FirstDryRunBuild>

//控制流混淆范围 0-100 推荐 50-80

44 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

<Strength>50</Strength>

//静态防调试开关 0-100 推荐 10-30

<AntiDebug>1</AntiDebug>

//静态完整性开关 0-100 推荐 10-30

<Integrity>1</Integrity>

//字符串混淆开关 0-100 推荐 100

<StringLiteral>1</StringLiteral>

//静态防注入开关 0-100 推荐 10-30

<FridaHook>1</FridaHook>

//SwizzlingHook 开关 开启为 1,关闭为 0

<SwizzlingHook>0</SwizzlingHook>

//防 cycript、reveal 注入开关 开启为 1,关闭为 0

<AntiInject>0</AntiInject>

//验证加固结果开关 开启为 1,关闭为 0

<SkipVerifyBuild>0</SkipVerifyBuild>

//clang 版本 默认配置

<ToolsVersion>v6</ToolsVersion>

//开启预编译开关 开启为 1,关闭为 0

<ForcePreprocess>0</ForcePreprocess>

//原位置混淆开关 开启为 1,关闭为 0

<IsOBFInSrcFolder>0</IsOBFInSrcFolder>

//符号混淆开关 开启为 1,关闭为 0

    <DoSymbolObfuscate>0</DoSymbolObfuscate>

    <SymbolBlackList/>

</SourceShieldV3>

3.1.3.2. 简介

源码加固配置文件是 XML 文件格式,首先需要符合 XML 文件的规范。

除此之外,XML 根节点必须是以 SourceShieldV3 为名称的节点,

根节点下还需要有 ProjectType 和 Platform 两个节点。

其中 Platform 和 ProjectType 有对应关系,可以使用以下组合。

45 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

表 1–1 工程说明

组合含义 Platform ProjectType

Xcode 工程 ios xcode

Swift(Xcode)工程 ios xcode

Ndk(Android)工程 android ndk

Gradle(Android)工程 android gradle

Ninja(Android)工程 android ninja

3.1.3.3. 节点解释

节点 说明 对客户端影响 潜在风险 配置建议

4.5.0
Version 无 无 默认配置

https
Protocol 无 无 默认配置

IP 梆梆安全云加固服务平 无 无 默认配置
台:https://
usc.an110.com

本 地 部 署 的 iOS 应 用 加
固系统配置:
http://+部署的本地 IP 或
域名

Port 梆梆安全云加固服务平 无 无 默认配置


台:443
本 地 部 署 的 iOS 应 用 加
固系统配置:与部署的端
口号一致

46 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

CodeSig 是否需要签名证书参数加 无 无 按需配置


固过程,默认为 0(不需
n
要)

ServerV 5.5 无 无 默认配置


ersion

SourceR 源码加固源代码目录 无 无 按实际配置


oot

ninjaExe 本地 ninja 构建工具路径 无 无 已废弃


( f.g. : /Users/users
Path
/Library/Android/sdk/cm
ake/3.6.4111459/bin/ninj
a)

ninjaBuil cmake 生成的 ninja 工程 无 无 已废弃


编译路径,只能配置相对
dFolder
路 径 , 相 对 于
SourceRoot

ForcePre 是否需要在加固过程中对 无 无 默认配置


代码文件进行预处理操
process
作,默认为 0(关闭)

XcWorks XcWorkspace : 指 定 无 无 按实际配置


pace/ Xcode 工 程 的
XcodePr xcworkspace 文件
oject
XcodeProject : 指 定
Xcode 工 程 的
xcodeproject 文件

注意:如果用户工程中有
workspace , 则 必 须 选
择 XcWorkspace 作 为
xml 节点, 不能为空,必
填;如果用户工程中没有
workspace , 则 使 用
XcodeProject 作 为 节

47 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

点,必填,不能为空。

Scheme/ 为 您 工 程 文 件 下 的 无 无 按实际配置
Target scheme/target,必填。

注 意 : 优 先 选 择
Scheme,极少数特殊情
况选择 Target。

XcConfi 您 工 程 中 所 配 置 的 无 无 按实际配置
guration configuration , 填
Release/Debug

根据您的工程选择所需要
加固的 configuration ,
默认 Release 模式。

NDKPat 指 定 Ndk 工 程 所 用 的 无 无 已废弃


h NDK 路 径 (Ndk 工 程 需
填,若无留空)

NDKBuil 指定 Ndk 工程所用的用 无 无 已废弃


于构建的 (Ndk 工程需
dFolder
填,若无留空)

AntiDeb 功能:防止程序被调试 会增加代码 如检测到程序被调试, 防调设置,取值 0 为关


ug 则程序主动崩溃(不支 闭,1~99 为防调试强
原理:撒点的方式,对 量,对包体大
持客户自定义响应事 度,100 为最强调试级
小、性能有一 件) 别(数值越大,程序运
ptrace、sysctl 系统函数的
行时间开销也增加越
调用相关代码进行嵌入, 定影响 多),默认值 30。

当运行到此处时,进行检 按需调整数值。

Integrity 功能:防止程序逻辑被篡 会增加代码 如检测到完整性被破 完整性设置,取值 0 为

48 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

改 量,对包体大 坏,则程序主动崩溃 关闭,1~99 为完整性


(不支持客户自定义响 校验强度,100 为最强
原理:通过在源代码的 小、性能有一
应事件)。 完整性校验级别(同时
c、oc 函数内添加完整性
定影响 性能最低,而且还会增
校验代码(对代码段分段
加完整性补丁的时
进行校验),防止恶意篡
间),默认值 30。
改 APP 代码。
按需调整数值。

StringLi 功能:可以对代码中的敏 对包体大小、 如遇极特殊情况,字符 字符串加固设置,0~


teral 感字符串进行加密,会为 串加密会引发崩溃。第 100,设置数值越大,
性能无影响
字符串自动随机产生一个 一次使用,此情况需全 程序体积及运行时间开
量测试排查。后续根据 销也增加的越多,默认
字符串解密函数,避免攻
功能变化进行增量测试 值为 30。
击者通过逆向分析发现字
符串快速定位到系统 建议数值为 100。

原理:替换代码位置的字
符串为随机字符串解密函

Strength 功能:通过把代码的执行 会增加代码 无 加固强度设置,0~


100,设置数值越大,
控制逻辑(if… else 语
量,对包体大 程序体积及运行时间开
句、for 语句)等效变换 销也增加的越多。
小、性能有影
为平坦的控制逻辑 按需调整数值。
(switch…case 语句), 响
这样就隐藏了程序原始的
建议合理配
层次结构。
置,数值越
高,对体积和
原理:混淆器读入代码文
性能影响越明
件,生成抽象语法树
显。
( AST ) , 根 据 AST 分
析代码的控制流并拆分出
代码 块( block ), 然后
对代码块进行重排,放入
switch case 结构中,从而
实现控制流平坦化。

FridaHo 功能:防止程序被 inline 会增加代码 如检测到注入行为,则 选择该配置项开启,则

49 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

ok hook 量,对包体大 程序主动崩溃(不支持 对 代 码 进 行 inline


客户自定义响应事件) hook 的防护处理。
原理:在源代码的各函数 小、性能有一
内添加防注入校验代码 默认值为 0。
定影响
(包含对 frida 的特征检
测);通过分析汇编指令
字节码特征,判断是否被
inline hook

Swizzlin 功 能 : 防 止 程 序 被 会增加代码 如检测到注入行为,则 选择该配置项开启,则


gHook swizzling hook 程序主动崩溃(不支持 对 代 码 进 行 swizzling
量,对包体大
客户自定义响应事件) hook 的防护处理。
原理:通过 dladdr,判断运 小、性能有一
默认值为 0。
行 时 函 数 的
定影响
sname 、 fname 特 征 是 否
被篡改, 保护 APP 运行
时该函数不被动态注入分
析。

AntiInje 功 能 : 防 止 程 序 被 对包体大小、 如检测到注入行为,则 选择该配置项开启,则


ct cycript、reveal 注入 程序主动崩溃(不支持 对 cycript 、 reveal 代
性能有一定影
客户自定义响应事件) 码进行动态注入的防护
原 理 : 通 过 检 查 响 处理。
cycript 、reveal 路 径等 特
默认值为 0。
征,保护 APP 运行时不
被 cycript、reveal 动态注
入。

SkipVeri 指定跳过验证编译的步骤 无 无 按需设置


fyBuild (最后一步编译),0 为
不跳过,1 为跳过。可选
参数,默认值为 0。

ToolsVe 选择使用某一版本的加固 无 无 默认配置


rsion 引擎,根据 Xcode 版本
进行选择,此配置项客户
端会自行配置无需手动选

50 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

择,基本对应关系是:
Xcode9 以 下 ( 包 含
Xcode9 ) ~ v6 ;
Xcode10 ~ v7 ;
Xcode11~v8

IsOBFIn 是否使用原位置混淆: 无 无 按需配置


SrcFolde
0 为不使用,1 为使用。
r
可选参数,默认值为 0。

注意:

1、因为在加固过程中,
有可能出现加固失败而导
致的用户代码被污染的情
况,因此需要用户预先保
存好自己的代码备份。

2、加固一次代码后,不
论成功与否,都不可继续
执行加固操作。

BlackList 需要在加固中过滤掉的文 无 无 按需配置


件,请使用相对路径,支
持通配符

WhiteLis 选取需要加固的文件,请 无 无 按需配置


t 使用相对路径,支持通配
符 。 注 意 该 配 置 和
BlackList 配 置 互 相 排
斥 , 如 果 需 要 填 写
WhiteList , 请 保 持
BlackList 为空

SafeSDK 安 全 sdk 配 置 参 数 节 此为静态库提 检测到风险点,默认按 注意:以上参数,开启


点。 闪退处理,客户可以在 相应选项填 1;关闭相
供的功能,对
回调函数里自定义处理 应选项,填 0。默认值
Enable 子节点,是否开
包体积无影 行为。 为 0.
启安全 sdk;

51 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

AppResignCheck 子 节 响 ; 除 Frida 按需开启


点,是否开启 app 重签
hook 增强会损
名检测;
耗性能外,其
TeamID 子节点,其值为
apple 证书的 TeamID; 他检测点对性
BundleID 子节点,其值 能无影响
为 app bundleid;

JailbreakCheck 子 节
点,是否开启 app 运行
在越狱环境检测;

ScreenOutputCheck 子
节点,是否开启截屏、录
屏监听检测;

AirPlayCheck 子 节 点 ,
是否开启投屏检测;

FridaCheck 子 节 点 , 是
否开启 Frida hook 检测;

FishHookCheck 子 节
点,是否开启 Fish hook
检测;

SceenBlurShift 子 节
点,iOS 后台切换时开启
模糊效果,若切换到前台
则关闭模糊效果;

DebugCheck 子 节 点 :
动态防调试节点;

HookCheck 子节点:动
态防 Hook 节点;

IntegrityCheck 子 节
点:动态完整性防护节
点;

SslPinningCheck 子 节
点 , 是 否 开 启 验 证
HTTPS 本地证书;

52 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

CertificatePath 子 节
点,其值为签名证书的路
径,需要在项目里配置证
书文件;

WebsiteUrl 子 节 点 , 其
值为与签名证书绑定的网
址;

DisableLog 子 节点 ,是
否开启防日志泄漏;

SimulatorCheck 子 节
点,是否开启防模拟器;

NetworkProxy 子节点,
是否开启防代理;

LocFakeCheck 子节点,
是否开启防虚拟定位。

ResourceCheck 子 节
点,是否开启证书文件加
密。
ResourceCheckList 子
节点,其值为需加密的证
书文件列表(按需填
写)。

FirstDry 开启此功能,预编译流程 无 无 优化预编译时间开关。


RunBuil 默认值为 0。
不再进行生成汇编指令、
d
按需开启。
链接、生成 macho 等流

程。

默认关闭。

DoSymb 功能:对 objc 符号进行 对包体大小、 本功能适合中小型项目 符号混淆开关。默认值


olObfus 混淆。 以及符号量少的项目开 为 0。
性能无影响
cate 启。符号量大于 6000
按需开启。
原 理 : 通 过 AST 遍 历 左右,宏替换效率会变
objc 函 数 的 类 名 、 方 法 慢,符号混淆失败的概

53 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

节点 说明 对客户端影响 潜在风险 配置建议

名、类别、属性,对遍历 率增大。
到的符号进行拆分,排除
开启此功能,需把作为
与系统重合的符号,然后
数据模型转换的
生成随机符号,并最终通
model 类加入黑名
过宏替换的方式实现符号
单。
混淆。
本功能如配置不当,可
能会导致程序异常,首
次使用请在技术指导下
进行。

Symbol 1.每行规则以 ! 开头, 无 需把作为数据模型转换 按实际填写。


BlackList 表示要过滤的类名、方法 的 model 类加入黑名
名 单

2. 例如: !*View 意 需要把符号混淆之后,


为“过滤所有后缀为 致使程序异常的符号加
View 的类名、方法名 入黑名单

!View* 意为“过滤所有
前缀为 View 的类名、方
法名

Resourc 功能:对证书文件进行加 对包体大小、 具体使用有限制,参见 符号混淆开关。默认值


eCheck 密 性能无影响 2.3.3.5 加密配置 为 0。

按需开启。

Resourc 每行一个证书文件名全称 无 具体使用有限制,参见 按实际填写。


eCheckL (带扩展名),不需要写 2.3.3.5 加密配置
ist 文件路径,不支持通配
符,示例如 test.cer。

3.1.4. 执行加固

下面命令的执行目录为:~/Documents/SCShield,即当前安装了客户端应用用户的
Documents/SCShield 目录。

源码引擎有两种模式:标准模式同时支持离线登陆和在线登录两种模式;下面的示例配
置文件为当前目录下的 testios.xml, 使用<vaule>表示要被替换的内容,分别命令行如下:

54 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

在线模式:

cd ~/Documents/SCShield

./native_tools_mac_xxx/build_tools guider_v3 -i testios.xml -u <yourId> -p


<yourPasswd> --online 1 --log-level DEBUG

离线模式:

cd ~/Documents/SCShield

./native_tools_mac_xxx/build_tools guider_v3 -i testios.xml --token


offlinemode --online 0 --log-level DEBUG

3.2. 已知问题和限局性

3.2.1. 加固后工程需要做 SCM(Source code Control


Management)

加固后的工程也需要进行版本管理,需要与原始的工程进行标签式的管理。这种管理
可以在出现问题时进行良好的回溯。

3.2.2. Swift 的语言版本支持

支持 Swift 5.2 及以上的版本。

3.2.3. macOS 版本版本支持

支持 macOS 10.15 及以上版本;

3.2.4. 符号混淆潜在风险

符号混淆的本质实现原理是进行宏展开和替换,由于在 C Source Files 内的符号并非


是全部的引用所在,以及 iOS 系统符号库一直处于变动中,因此有潜在的风险会有混淆遗
漏的可能,这个遗漏包括某些符号不适合混淆而被混淆、某些符号在系统符号库而未排除
请在符号混淆后的工程生成的包上进行全面的验证(首次使用符号混淆做全量测试,再次
符号混淆做增量测试)。

如果上述的验证出现有混淆的冲突,请在加固后项目根目录找到生成的符号头文件
(符号头文件即混淆前后的符号对应表),查找到出错的符号,并加入到黑名单,并重新

55 / 56 梆梆安全 | 稳如泰山,值得托付
梆梆安全 IOS 应用加固用户使用手册

进行加固,通常就能解决这类的问题。

3.2.5. Swizzling 防护潜在风险

Swizzling 是 ObjC/ObjC++特有的运行时绑定的解决方案,由于在运行过程中很容易
被侵入干扰绑定,使用 Swizzling 防护可以将设计的原始的绑定关系固化于源代码之中。

在用户的常规代码实现逻辑内,直接使用 Swizzling 也是被容许,或者是常见的


一种设计方案;如果用户在代码里使用了 Swzziling 机制(可整个项目搜索或对
二进制 macho 文件进行符号检索,是否存在
class_replaceMethod、method_exchangeImplementations 函数,来判断是否存在
使用 Swzziling 的情况)同时又加入了 Swizzling 防护的安全策略,则会导致冲
突而引起主动崩溃。

在 加 固 过 程 中 , 本 产 品 已 经 做 了 智 能 的 识 别 ( 通 过 遍 历 AST , 查 找
swizzling 特征,如查找到 swizzling 特征且加固配置开启了防 swizzling hook,则
加固报错,并提示 swizzling 冲突),但是依然在概率上有与原 始的 Swizzling 业
务代码有冲突的可能(比如 swizzling 特征存在于动态库、静态库,未智能识别到),
所以在加固后,请做全面的测试(首次加固做全量测试,再次加固做增量测试)。

56 / 56 梆梆安全 | 稳如泰山,值得托付

You might also like