iOS Guard 符号混淆配置

符号混淆用于处理 OC Method, property, Swift func, var 等符号名称的重命名混淆。
使用该功能必须要安装 Xcode 应用, 符号分析过程中会使用 Xcode 编译项目,分析项目中的符号名称。

设置说明

config.png

启用符号混淆 (默认开启)

默认符号混淆配置是开启的,所有可以直接点击 分析 按钮,会先自动检测环境,展示需要执行的 xcodebuild 编译命令,点击 确定 执行分析。

符号生成器

符号生成类型

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

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

每次生成新符号

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

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

  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 文件中的数据

词库路径

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

其他分析配置

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

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

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

处理结果参考

oc 代码

obf_compare.png

storyboard, xib 文件

obf_compare_nib.png

info.plist 文件

obf_compare_info_plist.png

swift 代码

obf_compare.png

storyboard, xib 文件

obf_compare_nib.png