本文目录
在上马甲包的过程中最重要的一环就是要让苹果全方位的感觉到这是一款新app,跟其他应用没有关联,这需要修改工程,代码,资源,界面,交互等
本篇将针对iOS上包过程中涉及到的代码修改相关内容进行一些总结,其他方面将在其他总结内分别介绍
主要分为如下几个方面
工程相关信息,类名混淆,方法名混淆,无用的功能引入,违规功能屏蔽,关闭bitcode,界面更改,交互更改
工程相关信息修改
修改项如下:
- bundle id, display name,版本号,编译号
- 工程名,打开XCode,直接重命名工程文件,XCode会自动检查附带需要修改的内容,直接点击Rename即可
- 修改工程名后需要修改项目的文件夹名,info.plist的路径,以及其他需要手动修改的内容
- 所有的entitlements全部删除重建(结合bundle id修改)
类名混淆
类名混淆有两种方式,加前缀后缀和替换类名
类名替换需要注意不能只是简单的乱码加密,会被苹果认为有明显目的性
解决方案是使用代码常用单词进行随机组合,并生成唯一类名后进行替换
这里推荐一种方式:
先将需要替换的类名整理出来,放到一个sqlite表中
新建6个数组,每个数组放10个单词,每次随机从每个数组中随机取一个词出来,6个词组成一个类名(可以带上自定义的前缀),在工程中做全局替换,然后将对应关系用sqlite保存起来以便还原和去重,这样会有60466176种组合
全局替换代码如下
1 2 3 4 5 | # 搜索并替换,包含xib和storyboard的类名都会被替换 # $current_class_name 需要被替换的类名 # $project_path 需要替换的目录 # $class_name_for_replace 替换后的新类名 grep -rl {$current_class_name} {$project_path} | xargs sed -i "" "s/{$current_class_name}/{$class_name_for_replace}/g" |
方法名混淆&垃圾代码添加
方法名混淆跟类名混淆比较类似,如果代码比较规范的话,根据相应的规则梳理出相应的方法列表,然后根据上面的生成规则进行替换即可
垃圾代码主要是在类中添加无用的代码,可以写个脚本来生成,随便调用一下即可
无用的功能引入
引入一些跟自身app无关的功能并放置入口,能够正常使用,例如文件浏览器,视频播放器等,冲抵app本身代码的占有率
几个可用的功能代码:
https://github.com/aidevjoe/SandboxBrowser
https://github.com/imlifengfeng/FFRouter
https://github.com/realm/realm-cocoa
违规功能屏蔽
违规功能屏蔽需要结合服务器以及一些其他特征进行功能屏蔽
服务器屏蔽主要是通过服务器请求接口,如果当前版本正在审核中,屏蔽掉相应的违规功能
其他特征目前有WiFi信息和审核人员的经纬度
苹果审核人员无论什么语言都在美国,我们可以根据审核人员的经纬度,在他们那一圈都屏蔽掉相关内容,审核人员经纬度121.92014312744140000000,37.45272827148437500000
WiFi信息屏蔽详见:iOS马甲包上包总结-网络篇
关闭bitcode
由于开启bitcode以后,app源码等于向苹果完全开放,所以如果条件具备的话,关闭bitcode比较保险。
另外如果有Apple Watch extension,则不能关闭bitcode
界面&交互修改
界面修改需要注意几项必须修改的内容:
- 图标
- 启动页
- 登录注册页面
- 主框架
以上内容修改时务必调整布局,更换色调,让苹果认为这是一个新app,如果只是单纯的修改色调可能连机审都没有办法通过
交互修改主要是调整交互控件的位置,以及转场动画,功能位置等,跟原有app差距越大越好,必要时可对不必要的功能进行一些删减或挪动位置
其它上包相关总结内容详见:
如不能点击,说明还没写完(我懒),😝
iOS马甲包上包总结-银行信息和内购篇
iOS马甲包上包总结-更新篇
iOS马甲包上包总结-元数据篇
iOS马甲包上包总结-资源篇
iOS马甲包上包总结-网络篇