没错, 这段时间没有写博客, 我进入了一个更深层次的研究 ,苹果总是让人捉摸不透
在长达一个月的时间的研究中,我有了一项重大发现, 请你先点赞或者收藏此文章,随时被库克发现!
你是否发现你的混淆工具时而好用, 时而不好用?
目前有些经验的开发者, 或者公司大部分都会有自己认为比较实用的一款混淆工具, 来处理代码.
使用混淆工具混淆了代码,等一系列处理,提交过审, 非常开心, 你认为你得到了一个宝藏工具, 但是在你的第二次尝试混淆其他项目或者代码时却发现, 被拒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.3a的问题, 你可以找到我.我们一起研究吧! 当然博主过审率也是极高的!


365

被折叠的 条评论
为什么被折叠?



