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


​​​​​​​

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

图像 小部件

相关推荐
Li emily20 小时前
解决了加密货币api多币种订阅时的数据乱序问题
人工智能·python·api·fastapi
2301_7815714220 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
asdzx6720 小时前
使用 Python 为 PDF 添加页码 (详细教程)
python·pdf·页码
AI技术控20 小时前
《Transformers are Inherently Succinct》论文解读:从“能表达什么”到“多紧凑地表达”
人工智能·python·深度学习·机器学习·自然语言处理
金融大 k1 天前
Python 全球指数监控面板:TickDB + REST + WebSocket 完整方案
python·websocket
啊哈哈121381 天前
系统设计复盘:为什么 Agent 的 ReAct 循环必须内嵌确定性保护层——以 FitMind 健康助手的路由与步骤控制为例
人工智能·python·react
一颗牙牙1 天前
安装mmcv
开发语言·python·深度学习
大数据魔法师1 天前
Streamlit(二)- Streamlit 架构与运行机制
python·web
m0_470857641 天前
PHP怎么实现工厂模式_Factory模式编写指南【指南】
jvm·数据库·python
大数据魔法师1 天前
Streamlit(三)- Streamlit 多页面应用开发
python·web