Tim Cook

专注苹果审核30年

0%

iOS-苹果审核都审些什么

一篇文章告诉你苹果审核到底审些什么,纯干货!!!(截止23年8月)

汇总

  • ipa
    • 代码
      • 类、属性、函数、协议等等
      • 字符串常量
      • 函数汇编
      • 代码量/关键字
      • 私有api
    • 资源文件
      • 文件唯一值(md5、hash)
      • 图像识别
      • 文件内明文的域名/IP
      • 连续32位16进制字符串
      • 二进制文件内的编译路径
      • 文件名
    • 网络请求
      • 域名
      • 请求url
      • 请求数据/返回数据(不确定,提的包都会处理没去验证)
  • 账号
    • 绑定的手机号码
    • 测试设备
    • 收款银行账号
    • 元数据
      • 五图
      • icon
      • 名字
      • 描述、关键词、网址等苹果后台信息(不确定,一般都随便写,网址内容需要与包体对应)
  • 提审环境
    • 提审网络
    • 提审设备
    • 打包设备(不确定,游戏研发一台电脑打n个包也可以过)

审核机制

苹果审核有机审以及人审2个阶段,机审主要审代码、资源文件、网络等方面,人审主要审App内容等方面,因此在不同的审核阶段被拒需要做不同的处理。
也有很多人认为苹果审核是基于一个评分的机制,比如4.3是因为包体多个方面跟其他包关联上了,这点我也认同。

处理

代码

代码推荐用 ReviewTools 这个工具混淆处理,工具拉取了大量的Github代码做混淆用,混出来的代码跟手写没有区别。

资源文件

苹果对资源文件的标记无非就是从资源文件内提取特征然后匹配,直接加密并且修改文件名就可以了。
可以自行实现或者直接用 ReviewTools 处理。

代码量/关键字

统计过AppStore线上的包,每个类所包含的属性函数数量都是在一个区间的,也验证过对一个项目多次混淆会导致2.3.1,因此并不建议插入过多的垃圾代码。
某些关键字也会导致2.3.1(obfuscated code),甚至有些邮件还会告诉你哪个函数有问题,但是你改了重新提还是大概率2.3.1,因为这种绝对不是因为一个函数名导致的。这种情况建议直接重新混淆。

二进制内包含的编译路径

一般是因为用了 __FILE__ 这个关键字来打印文件路径,删掉即可。

网络请求

更换域名或者审核期间不请求网络。

测试设备

一般来说不添加设备就好了,如果有内购的包并且需要测试,可以用一个专门测试的账号证书对ipa进行不完全重签名来测。

五图&icon&名字

有时候更换五图icon名字也能解决4.1、4.3和2.3.1。需要注意五图icon里面用到的元素是否已经提审过,苹果的图像识别能力真的很牛,可以尝试用Midjourney生成。

提审网络&提审设备

虚拟机+流量卡

最后

以上仅代表我个人的提审经验,部分是通过一些渠道得到的内部消息,如果你有不一样的看法或经验欢迎分享。