iOS 审核 上架 被拒 4.3 【深度进阶】

混淆了工程自信满满的去提审?

这可能是你混淆后的app对比:

本篇文章信息量较大, 希望先收藏回家慢慢看 , 我们将我们的ipa 大致分为两个模块,可执行文件和动态库

1: 可执行文件

编辑

可执行文件的查重目前是苹果机审的最重要依据, 普遍机审在十分钟左右, 机审也可能超过十分钟, 这是由于可执行文件的大小决定的, 因为越大的可执行文件消耗的查重时间就会越长

我们先来分析一下机审:

1: 不少开发者以前或者前几年可能都会遇到机审1分钟被打回4.3, 随着开发者对苹果机审的深入了解,和对代码混淆的处理能力和深度提升, 这种情况现在比较罕见,也不排除苹果对机审做了调整

不要简单的小瞧这一分钟, 这一分钟将是分析苹果机审的一个重要依据, 苹果的机审系统是很可能是 多阶段漏斗型架构

第一阶段:静态特征快速匹配

1: 第一个阶段很可能是对ipa 特征指纹快速匹配,哈希值对比是最精准的而且速度极快, 如果在这个阶段中,你命中了极多哈希值重复,那么你将不进入机审的第二阶段, 直接精准被打回

这里有一个问题, 若苹果有 2000万 历史应用,单节点每秒 10万次 比对,全量对比需 2000万 / 10万/秒 = 200秒 ≈ 3.3分钟,远超1分钟审核时间窗口。

苹果的算法能力可能是顶尖的,可能使用多种对比技术结合

不排除可能通过 分层过滤(Layered Filtering) + 分布式计算(Distributed Computing) 将计算量压缩 1000倍以上。

等技术实现 分钟级精准对比

第二阶段:动态行为

机审的第二个阶段可能来到代码级别的深度对比

1: 苹果可能提取符号表的信息,符号关联性分析,代码结构相似度深入分析

类名、方法名、属性名的查重可能在第一阶段通过静态哈希匹配快速完成,但更复杂的查重可能在第二阶段进行动态或更深入的分析。

如果机审的几个阶段你都通过了, 那么才能进入到人工审核, 对于人工审核, 我们本篇文章不做详细的分析 , 我们回到正题:

可执行文件解析 :

可执行文件携带信息较多 , 我只简单的概述一下,

1. 文件头信息(Mach-O Header)

2. 代码段(__TEXT)

3. 数据段(__DATA)

4. 符号表(Symbol Table)

5. 动态库依赖(Load Commands)

6. 代码签名(Code Signature)

7. Objective-C元数据

8. 资源引用特征

苹果从可执行文件中大致会提取以上信息来分析和对比你的可执行文件 , 问题来了, 我们似乎都知道混淆代码, 首先混淆类名方法属性名,硬编码, 那么你改了这几样, 到底影响了可执行文件里的哪些信息? (以下是代码展示, 看不懂直接划到结论部分)
符号表对比结果

|------------------|---------------------------------------|-----------------------------------|
| 符号类型 | 原始符号 | 混淆后符号 |
| 类名(Class Name) | ​​OriginalClass​​ | ​​Zh_Class_01​​ |
| 方法名(Method Name) | ​​originalMethod​​ | ​​zh_method_01​​ |
| 类结构引用 | ​​_OBJC_CLASS_$_OriginalClass​​ | ​​_OBJC_CLASS_$_Zh_Class_01​​ |
| 方法实现地址 | ​​-[OriginalClass originalMethod]​​ | ​​-[Zh_Class_01 zh_method_01]​​ |

Objective-C 元数据对比结果

|------------------------|--------------------------|------------------------|--------------|
| 元数据段 | 原始内容 | 混淆后内容 | 技术影响 |
| ​​__objc_classname​​ | ​​OriginalClass​​ | ​​Zh_Class_01​​ | 类名字符串被替换 |
| ​​__objc_methname​​ | ​​originalMethod​​ | ​​zh_method_01​​ | 方法名字符串被替换 |
| ​​__objc_classlist​​ | 指针指向 ​​OriginalClass​​ | 指针指向 ​​Zh_Class_01​​ | 类结构体中名称引用被修改 |
| ​​__objc_selrefs​​ | 引用 ​​originalMethod​​ | 引用 ​​zh_method_01​​ | 方法选择器绑定到新名称 |

总结: 混淆方法名和类名会直接影响 Mach-O 文件的 Objective-C 元数据段 和 符号表

本篇重点来了!!!!

你是否发现,

近年来开发者混淆代码的能力不断提升,而苹果似乎也在应对这些混淆方法,你混淆的工程是不是依然还是被4.3打回 , 苹果可能采取了一些措施来对抗代码混淆,可能包括静态分析、动态检测,更精细的代码特征提取、行为分析、运行时检测等。

为此我研发了一款much-o 相似度对比脚本, 深度检测可执行文件, 这将是一个量化工具, 不再让你漫无目的的去提审


​​​​​​​

我们下篇文章介绍什么叫 "控制流 " , "数据流", 等高进阶内容, 或者可以私信我提前了解哦

图像 小部件

相关推荐
外收内放2 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源2 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟2 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境3 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian3 小时前
python else用法
开发语言·python
Thinker QAQ3 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户8356290780513 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design4 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
weixin_417396834 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
学Linux的语莫5 小时前
python中类的常见写法
开发语言·python·状态模式