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 相似度对比脚本, 深度检测可执行文件, 这将是一个量化工具, 不再让你漫无目的的去提审


​​​​​​​

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

图像 小部件

相关推荐
cup113 小时前
[开源] Meta Assistant / 告别命令行,我为一堆 Python 脚本做了一个 Windows 任务栏的“家”
windows·python·工具·nuitka·脚本运行
小小编程路4 小时前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
Samooyou5 小时前
RAG项目案例--02在线检索&过滤流水线
人工智能·python·ai·全文检索·检索
动能小子ohhh5 小时前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi
ab_dg_dp5 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
夏语灬5 小时前
cryptography:Python 密码学标准库的终极选择
开发语言·python·密码学
CTA终结者6 小时前
期货开仓前保证金够吗:get_account 可用与占用字段对照
python·区块链
开源量化GO6 小时前
夜盘白盘衔接几分钟误下单:天勤交易时段与行情过滤
python·区块链
辣椒思密达6 小时前
Python公开数据采集实战:如何解决请求高频拦截与Session会话中断问题
开发语言·python
Albart5757 小时前
Python 实战教程:用 30 分钟学会解决真实问题
开发语言·python