我们这边文章内容较深,初学的开发者可能无法理解. 希望可以攒点收藏关注, 以便于巩固
在一个ipa包中, 我们可以通过拆解发现 有以下部分组成
1: 可执行文件
2: 动态库
3: 资源文件

那么苹果审核也是基于这几个作为主要查重指标进行4.3的判断
可执行文件
可执行文件其实是一个二进制文件,里面是由机器码组成, 通过层层反编译 我们才能得到高级代码, 也就是我们开发的oc,swift,go 等源代码

动态库
你适用的一些三方插件,比如AFN ,SD, MJ, 等等三方库插件目前大部分都是以动态库的形式存在ipa包的framework文件夹中,而不是编译到可执行文件中, 当然不是所有的插件都是动态库的形式存在,少部分以静态库的形式存在

我们看到动态库也是一个执行文件, 不错, 其实他们都属于二进制文件, 本身没有太大的差距.里面同样是机器码, 通过层层反编译得到高级代码

资源文件
资源文件就比较简单了,其实就是ipa里面的, png, gif,mp4,mp4,json,bundle,ttf, 等等我们统称为资源文件

重点来了
我们在简单的介绍了ipa的组成后, 来进行苹果的机审预测和分析
苹果在对比两个ipa包的时候, 到底是什么对比方式?
第一种猜测 : 平行对比
可执行文件 vs 可执行文件
动态库 vs 动态库
资源文件 vs 资源文件
这种平行对比是最有可能是苹果目前采用的对比方式
ipa1的可执行文件和ipa2 的可执行文件进行对比, 计算出一个可执行文件相似度
ipa1 的动态库和 ipa2 的动态库 对比 计算出一个动态库相似度
ipa1 的资源文件 和 ipa2 的资源文件 对比计算出一个资源文件相似度
三个相似度进行一个权重配比, 最后计算出一个总体相似度

那么问题来了,请注意,权重如何分配 ?
假设一种权重综合是1, 苹果是否会把权重写死 ? 不同部分分配不同的权重可能导致不同的相似度结果
比如可执行文件 0.4 , 动态库0.3 ,资源文件0.2 ?
结论: 可能行不大,苹果可能是动态分配权重的
比如两个ipa 可执行文件只有一行代码, 且是同一行代码, 那么可执行文件相似度100%, 直接拉满了相似度 . 这明显不合理,这会出现重大的误判
苹果可能是基于可执行文件和 动态库的总体代码占比, 来动态分配相似度, 这样明显最准确
如果可执行文件的代码较少, 那么他应该分配较低的权重

如果可执行文件远超于的动态库的代码量, 那么可执行文件的权重将会转移给动态库一些

如果可执行文件和动态库的代码量相当, 那么均分权重, 这才是最优对比方案
你会发现 明明是手写的全新代码 ,但是被判定4.3 ,其实是使用了大量使用了一些三方库, 导致动态库部分代码量远超于可执行文件, 动态库权重拉高, 整体相似度偏高
当然这里有一个重要的环节, 苹果会过滤常用的三方库, 以免造成误判
此处并非猜测, 是我在对接客户通过无数个电话录音确定的.