随着苹果审核越来越细致,对APP管控愈发严格,马甲包的上线也越来越困难。那么,是不是曾经叱咤风云的群狼战术已经行不通了呢?答案是否定的!还是有很多同行,与苹果审核人员斗智斗勇,你方唱罢我登场,多点开花,马甲齐飞,产品做得有声有色。
这就说明这条路是可行的,而我们被拒只是我们没有找到方法。既然确定了这一点,那么我们要做的就是反思自己的马甲包是否处理到位了。
一、前事不忘,后事之师
所谓失败是成功他妈。首先,我们可以先分析下以往被苹果拒绝的原因。目前苹果被拒的反馈主要有4.3和2.1大礼包。
Guideline 4.3 - Design
We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.
Guideline 2.1 - Information Needed
This type of app has been identified as one that may violate one or more of the following App Store Review Guidelines. Specifically, these types of apps often:
1.1.6 - Include false information, features, or misleading metadata.
2.3.0 - Undergo significant concept changes after approval
2.3.1 - Have hidden or undocumented features, including hidden "switches" that redirect to a gambling or lottery website
3.1.1 - Use payment mechanisms other than in-app purchase to unlock features or functionality in the app
4.3.0 - Are a duplicate of another app or are conspicuously similar to another app
5.2.1 - Were not submitted by the legal entity that owns and is responsible for offering any services provided by the app
5.3.4 - Do not have the necessary licensing and permissions for all the locations where the app is used
我们知道,苹果的审核过程主要分为:预审核--- 扫描api,及plist文件字符缺失等;机审--- 此处扫描支付SDK等,及马甲情况,机器扫描主要看代码块,可参考百度蜘蛛抓取网站模块原理;如遇部分无法过机审情况可尝试加速绕过机审(不是100%成功; 人工审核--- 此处主要检测功能或者App体验测试,例如用测试账号登录App体验功能,或其他是否明显bug等,ipv6也在此处检测;而通常得到这样的反馈,是在进入审核后,很短的时间就被拒了。这也佐证了马甲包的审核主要靠机器审核。
机器审核,主要能检测什么,代码比对?资源特征值抓取?函数名索引?这些在以往都被大家针对性的进行了应对。网上有人总结了从时间上,复杂程度上经历的处理过程:
1.UI不变,代码不变,新开发者账户送审
2.UI不变,代码混淆,新开发者账户送审
3.UI套壳,代码不变,新开发者账户送审,苹果审核看到固定页面
4.UI套壳、代码混淆,新开发者账户送审,苹果审核看到固定页面
5.UI套壳、代码混淆,全新类名、函数名,新开发者账户送审,苹果审核看到固定页面
6.UI全新、代码重构,全新类名、函数名,新开发者账户送审,打包设备、全新IP送审,等同全新产品。
但是苹果审核系统经过这么长时间的学习进化,我们发现1-4都已经失效,5,6主要看代码处理得是否彻底以及运气了。也就是说,简单的代码混淆,函数名修改,代码加密,资源名字特征值修改,改改UI已经很难逃得过苹果审核系统的火眼金睛了。当然,并不是说这些处理没用了,只是它们能提升过审的概率降低了。就好像苹果对你代码的重复率有一个打分机制,有一个阈值。上面的这些处理只能打50,60分,而阈值可能在70分以上。而且,按照AI的发展趋势,审核应该不仅仅只对代码层面进行检测了,甚至还会抓取应用界面截图进行图像对比。对比视频图片内容网站的监黄系统,百度、谷歌图片识别系统;这样的技术对于苹果来说不要太容易。
二、他山之石,可以攻玉
网上有大牛针对更严格的审核机制,讲解了一些处理方法,这里整理如下:
1.换皮。换皮就不是简单的改改UI了,而是设计全新的皮肤,页面结构。重点是首页面一定要有差异化,页面质量要尽量精良。
2.换框架。换代码框架,可以是第三方类库,也可以是苹果的系统框架。如果实在换不了,这导入几个无用的框架。
3.减少设备、IP、开发者账户、联系人、绑定银行卡等其他信息的关联。具体而言,有这些点需要注意:
开发者账号避免处理:同一款类似的产品不放在一个送审账号上;同一个开发者账号尽可能不关联几个马甲包产品
打包电脑设备处理:如有条件最好不要用同样的MAC打包,如无条件,尽可能不超过5个克隆包
上传包IP处理:上传克隆包IP,尽量避免与其他克隆包的IP相同
联系人、收款银行卡信息处理:过多克隆包,尽量避免同一银行卡信息、联系人关联
技术网站、隐私协议用独立域名处理:如果有条件,尽可能使用一个独立的域名,技术网站尽可能复杂点,有产品信息,有联系信息,有公司信息等等。以往,做马甲包时候,经常使用类似上线了的工具搭建官网。
App内关于产品能直接访问技术网站官网,在官网上能找到隐私协议等,虽然不知道会不会影响,作假作全套。
4.有很多加固混淆的工具声称可以提高过包率(他们也不敢打包票说一定可以过)。分析他们的处理方式,主要包括:项目代码的自动翻新(混淆)、支持文件夹名称、文件名、修改资源文件hash值、类名、方法名、属性名、添加混淆函数方法体、添加混淆属性、自动调用生成的混淆方法、字符串混淆加密等。他们的功能逻辑图可以参考下:


三、实践是检验真理的唯一标准
前面对以往的失败经历进行了总结,也在网上搜集了很多更严格的处理方式。最后我们制定具体的实施条例来进行检验。
1.UI设计层面:设计全新的UI,特别是注意主页的差异性以及精致度,能用苹果的新功能新特性就尽量用
2.代码层面:
修改文件夹名称、文件夹的结构、文件名;修改资源文件hash值、类名、方法名、属性名;
添加混淆函数方法体、添加混淆属性、自动调用生成的混淆方法、字符串混淆加密(优化现有的脚本处理,添加这些自动化处理功能);
如果某个文件代码量比较大,就需要多去修改里面的方法名,变量名,以及顺序;
国际化的宏,通知的宏,打包的宏,广告宏,Key值宏,静态字符串全部进行修改;
换代码框架,可以是第三方类库,也可以是苹果的系统框架。如果实在换不了,则导入几个无用的框架(3个苹果框架,3个第三方类库)。
3.垃圾代码:
添加垃圾代码,垃圾代码量占总代码的30% - 40%(垃圾代码生成脚本,增加随机性,降低其自身的重复率,也要注意不同马甲包之间垃圾代码的重复率)
加减代码注释(优化现有脚本)
4.服务器层面:
技术网站、隐私协议用独立域名处理;
域名修改
5.账号,证书,打包等方面:
申请证书时使用不同电脑
申请证书时添加不同测试设备
登录账号的IP和传包的IP保持一致
有条件最好不要用同样的MAC打包,如无条件,尽可能不超过5个克隆包
上传克隆包IP,尽量避免与其他克隆包的IP相同
6.如果前面的方式还不能通过审核,则可以逐步尝试下面的方式:
代码加密混淆(审核时可能需要勾选加密选项)https://github.com/chenxiancai/STCObfuscator
采用swift重写工程(暂不考虑,时间成本太高)
服务器接口名修改
收费工具:https://zfj1128.blog.csdn.net/article/details/95482006(传说通过率挺高)
四、写在最后
不要迷信苹果,不要自我怀疑。上架 App 是商业行为,App Store 拒绝你上架不能说明任何问题。苹果公司能力极强,但是 App Store 的审核团队并不神圣。
不服就干,App Store 让你上架,你就是合理的;App Store 不让你上架,说明你能力不够,搞赢 4.3 条款,你就是赢家,千万不要因为被拒就觉得问题出在你自身,上有政策,下就有对策