iOS 上架 4.3a 全面解读 【编译产物】

没错, 这段时间没有写博客,  我进入了一个更深层次的研究 ,苹果总是让人捉摸不透

在长达一个月的时间的研究中,我有了一项重大发现,  请你先点赞或者收藏此文章,随时被库克发现!

你是否发现你的混淆工具时而好用, 时而不好用? 

目前有些经验的开发者, 或者公司大部分都会有自己认为比较实用的一款混淆工具, 来处理代码.

使用混淆工具混淆了代码,等一系列处理,提交过审, 非常开心, 你认为你得到了一个宝藏工具, 但是在你的第二次尝试混淆其他项目或者代码时却发现, 被拒4.3a了, 为什么? 


 

我们来解读一个常规的二进制文件

也许对二进制结构不太了解的开发者难以看懂上面的图, 我可以做一个简单的阐述

你编写的代码 oc,swift , 以及一些静态库, 被编译到可执行文件中, 可执行文件是苹果查重的一个重要依据. 我们通常把这个文件成为"二进制",也叫 Mach-O

这个Mach-O 并不是苹果发明的, 并且代码在编译成二进制的过程是不可逆的, 也就是说会优化,或者摒弃一些数据,  最重要的就是, 即便是苹果也无法将编译后的二进制还原成源码, 

上面都是一些简单的介绍, 我们进入主题:   我们继续看这张图的概述部分

这个二进制总共有19M的大小,  _text段 占据主要体积17M, 其他段占据了较小体积,  那么我们首先关注_TEXT 段

没错, 这个text段中存储了你的大部分的代码实现, 内部经过解析后是这样的


 

我们发现了一个GC_Chart_Controller, 这个就是源代码当中的类文件 

介绍这么多我想表达什么? 重点来了

你混淆的代码最终将会改变_text段, 比如比大面积混淆了源码,  text段的静态特征可能会发生较大变化 

但是, 他的结构不会变化

来看我们混淆了类名和方法名的二进制结构对比情况

我们发现结构高度相似,这也是你们做了一些简单的混淆, 但是无法过审的根本原因, 你的代码表面做了改变,但是内在没有变化, 就像一个人整了容那种感觉

那么上述说的是其中一种比较简单的情况, 有的开发者会说
 

我不仅混淆了类名,方法名, 属性名,  还大面积调整了代码结构, 跳转逻辑, 混淆的自己都不认识了 , 但是还是被4.3了?  啥原因

这是不同的二进制结构不同导致的,我们来看一个特殊的二进制

我们发现这个二进制稍有不同, 似乎还有一个段占据了非常大的体积?  那么里面又存储了什么呢 ?  


我们发现这个段中有一个__gopclntab占据了较大体积, 几乎高达8M

那么到这里你是否有所感悟? 


当然不同的二进制构造不同需要具体分析

我们看到这个二进制又有些不同的地方, 这个__LINKEDIT段高达5M, 甚至比text段还有大,  那么里面有存储了什么

我们继续来探讨一些关于审核的问题

在众多的客户与我描述他们的问题时, 我往往能从他们的口中得到重要的信息, 如果你也有4.3的问题, 你也可以找到我, 我们来分析和探讨你的情况, 我们来针对每一种语言做一个大致的介绍, 让你们处理4.3的问题中更有方向

下面描述每种语言的编译产物的位置, 希望你收藏好改文章, 以便及时回顾

1:  OC 和 Swift

1: 开发者代码全部集成在可执行文件中(xib除外)

2: 基本由可执行文件和动态库组成

3: 改动源代码直接影响可执行文件

4: 一般可执行文件会比较大

5: 混淆程度需要处理的较深

2: flutter

1: flutter 代码编译后为 Flutter.framework 框架代码, 和 App.framework 开发者代码 以及其他三方库组成

2: 可执行文件几乎是空的, 只有几十K, 由静态库占据

3: 改动flutter代码直接影响App.framework 内部结构

4: 如果源代码较少, 非常有可能由于基础框架导致4.3

5: 混淆是否要处理flutter端dart代码?

3: uniapp

1: 代码集成在ipa 中的Pandora 下,  所有代码被 集中编译,  类似整合到一起, 非源代码

2: 资源文件 还是在assets 文件夹下, 所有都是可见的

3:  uni_modules 文件夹下是 具有资源文件的插件的 资源文件 , 如果插件没有资源文件这个文件夹将没有,所有uniapp 的开发者的相关的文件 都在Pandora 的www文件夹下

4: 打包后的ipa包 , uniapp基础引擎在 动态库文件夹下 DCUniBase

5:uniapp 提审4.3a概率极高, 可能都是基础库导致的,因为他们几乎完全相同

4: cocos

1: assets/ 目录:这是项目的主要源代码目录,包含了场景、脚本、预制体等。

2: 开发者代码被编译成编译为字节码(.jsc

3: 可执行文件基本由cocos框架组成, c语言编写的

4:混淆主要侧重方向可执行文件

5: unity

 1: unity 空包大概20M ,基础包较大

2: 可执行文件几乎是空的, 只有几十K

3: UnityFramework 包含了基础框架 

4: data/raw/aa/ios  路径包含所有开发者创建的资源文件

掌握了各种开发语言的编译产物, 可能对于你在处理4.3a的问题中,找对方向, 如果你看了这篇章, 还是比较迷茫, 你可以轻松的找到我, 我来给你进行一下透彻的分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值