iOS Guard 符号混淆配置

启用符号混淆

启用时,该功能会对项目中的类名,函数名等符号名称进行混淆处理

符号生成器

符号生成类型

符号生成类型,有4种模式,随机模式,前缀模式,后缀模式,字库模式,默认为随机模式,不同的模式在混淆时生成新类名,函数名的方式不同。如下

  1. 随机模式,新 类名,函数名 等符号名称使用字母随机组合生成,混淆前后对比图:
    symbol_gnr_random
  2. 前缀模式,新 类名,函数名 等符号名称在随机模式的基础上,添加一个前缀,混淆前后对比图:
    symbol_gnr_prefix
  3. 后缀模式,新 类名,函数名 等符号名称在随机模式的基础上,添加一个后缀,混淆前后对比图:
    symbol_gnr_suffix
  4. 字库模式,新 类名,函数名 等符号名称在字库模式下,由用户提供的 字库文件 中的单词随机组合生成,混淆前后对比图:
    symbol_gnr_wordLib
    字库文件如图所示
    wordLib_using

每次生成新符号

新符号重新生成or使用指定映射关系

  1. 每次混淆后,函数名,类名 等原名与混淆名的映射关系文件会自动生成,保存到原项目的工程配置文件中,文明名为 newOldSymbolNameMapping.json,路径如图:
    new_old_symbol_mapping_json

  2. 指定类名,函数名等符号名的混淆符号映射关系 (默认模式)
    符号生成器的 “每次生成新符号” 为false时,混淆时会根据 newOldSymbolNameMapping.json 中的映射关系混淆符号名称。如果工程的 类名,函数名 不在用户配置的映射关系中,会根据符号生成器的模式生成新的符号名称。
    可以编辑newOldSymbolNameMapping.json来指定 class, 函数名 等符号名称在混淆后 新的名称,指定的json格式如下

 1{
 2  "appDelegate" : "aQuestionPropertyA",
 3  "igonreTest2" : "iDiscussSeat",
 4  "sceneDelegate" : "sContinentMilkLie",
 5  "test" : "tfewdescribe",
 6  "testFunc" : "tALegIsMelodyMore",
 7  "a" : "abeadownhigha",
 8  "viewController" : "vAgoContinentA",
 9  "testAction" : "tConsonantSoAAAs"
10}

在混淆后, appDelegate 会被混淆为 aQuestionPropertyA, igonreTest2 会被混淆为 iDiscussSeat, 其他符号名称按照指定的json格式混淆。

  1. 不指定类名,函数名等符号名的混淆符号映射关系
    符号生成器的 “每次生成新符号” 为true时,混淆时会忽略newOldSymbolNameMapping.json 中的映射关系,只根据符号生成器的模式生成新的符号名称,并且会自生成新的映射关系数据覆盖newOldSymbolNameMapping.json 文件中的数据

词库路径

在词库模式下,该路径中的词库文件中的词库用于随机组合生产新的符号名称,词库文件如图所示
word_lib_custom_config_path

其他分析配置

构建设备

构建设备,指定项目编译时目标设备,设备列表中的数据由 iphone 模拟器设备和 iphone 真实设备组成,默认会从其中选中一个设备作为编译是的设备。如图
iphone_devices

忽略路径 (需要在分析之前配置才会生效)

指定项目中哪些文件或目录中的代码文件不需要混淆处理,
忽略的代码文件中的符号名称及其关联的符号名称也不会被混淆。输入路径时,每个路径以换行符号分开,
并且路径必须时在 Xcode Bundle 所在的目录下,否则会被忽略
案例:
在工程目录中有如下项目,工程中的 SubIgnoreTest 继承来自忽略路径的 IgonreTest2。在项目配置中,指定了忽略路径:
ignore_config_path
SubIgnoreTest 继承了 IgonreTest2函数,代码如图
ignore_project

  1. 没有配置忽略路径时,解析的符号结果为:
    ignore_empty
  2. 配置了忽略路径后,忽略路径中的符号不会解析出现在配置混淆的列表中,解析的符号结果为:
    ignore_not_empty
  3. 配置了忽略路径后,混淆的项目代码对比如图:
    ignore_obf_rst
    忽略路径的中的代码文件中的符号不会被混淆,并且其他的代码文件中使用或关联的代码符号也不会被混淆。