iOS通过通过shell脚本批量修改属性脚本批量修改属性
背景背景
公司需要做一系列的壳版本,壳版本如果内容雷同提交到App Store会有被拒绝的风险,除了我在上一篇文章中说道的在壳版本中注入混淆
的代码,防止被苹果检测到内容太过雷同而导致审核被拒绝。还有另一种可行的方法是批量修改源文件中的类名、属性、方法名称等会在二
进制文件中留下符号标记的信息,绕过苹果的机器审核。
这篇文章介绍的是如何使用脚本批量修改属性名称,后续还有系列的包括使用脚本批量修改类名称、方法名称等信息的文章。
结果
下面是执行脚本替换了属性的结果图,脚本把所有需要替换的属性添加了abc后缀,当然依然是可以正常编译运行的
源码:https://gitee.com/dhar/YTTInjectedContentKit
分析
原理分析原理分析
objc代码中的类名、属性、方法、源文件路径等信息最终会被打包到二进制文件中,保存在二进制文件中的.sym符号表段中,可以使用
objdump -t命令查看二进制符号信息,以下的命令把objdump -t的结果写入到文件InjectedContentKit_Example_Symbols中去。
objdump -t InjectedContentKit_Example > InjectedContentKit_Example_Symbols
文件的内容会很大,所以选择了几个代表性的内容说明:
0000000100026350 l d __TEXT,__text __text
# 这里保存的是类源文件的路径符号信息
0000000000000000 l d *UND*
/Users/aron/PuTaoWorkSpace/project/sscatch/DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/PubSearchDataComposer.h
# 这里保存的是属性对应的var信息
0000000000000000 l d *UND* _OBJC_IVAR_$_TextCardItem._title
0000000000000000 l d *UND* _OBJC_IVAR_$_TextCardItem._showReact