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


​​​​​​​

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

图像 小部件

相关推荐
nwvyby_1751 小时前
用nc命令模拟一个简单的TCP-UDP客户端和服务端
编程
tjc199010051 小时前
mysql如何防止SQL注入攻击_mysql参数化查询与转义
jvm·数据库·python
盐烟1 小时前
xpath翻页爬取
python
decrba_9472 小时前
Redis与数据库一致性方案
编程
m0_741173332 小时前
MySQL导入大SQL文件报错怎么办_拆分文件与优化系统参数
jvm·数据库·python
矢志航天的阿洪2 小时前
手动安装Gurobi并配置gurobipy到Python环境(Windows/Conda)
windows·python·conda
IT空门:门主2 小时前
Python 数据类型学习笔记
python·学习
m0_588758482 小时前
如何解决Oracle启动ORA-00119错误_网络服务名与listener相关性
jvm·数据库·python
PSLoverS2 小时前
MySQL如何利用防火墙限制MySQL端口_使用iptables或安全组防御
jvm·数据库·python