前言:之前几篇讲了一些背景知识,这一篇进入正题,来讲一下动态注入的基本理论和流程。我们这里通过动态添加运行库的方式来实现动态注入。
ipa包结构
还记得我们之前介绍Math-O文件时,提到了Load commands嘛?其中有一部分是加载第三方库的:
注意其中的:LC_LOAD_DYLIB(AFNetworking)。那么,能否通过修改Math-O文件来加载我们需要动态注入的库呢?答案是肯定的。
实际上,我们打包的ipa文件本质上是一个压缩包,通过修改ipa文件的后缀(ipa->zip),然后解压缩,就能看到ipa文件中的内容:
Payload就是Hello.ipa解压缩后的内容,其中只有一个文件Hello.app。右键点击app文件,选择显示包内容,就能看到app文件的内容:
里面的有些内容是不是感觉很熟悉?注意其中名叫Hello的Unix可执行文件,这个就是我们ipa包中的Path-O文件。但有了这些还不够,我们还需要了解另一个知识:重签名
重签名机制
每一个ipa文件在装到手机中运行前,都需要进行签名(第二篇中有介绍)。实际上,ipa中加载的每一个库在打包进ipa中时,都会进行一次签名。
那么,我们如果想要通过添加自己的三方库来实现动态注入,除了要修改Math-O文件,还需要搞定签名机制。
iOS的重签名机制其实并不神秘,很