本文需要参考之前的文章
本节所需要的工具
- yololib
- MachOView
我们知道一个应用执行代码的部分包括MachO、Framework以及系统库,首先我们不能更改系统库,而且MachO修改的话需要写二进制比较麻烦,我们首先从Framework入手。
一个应用是如何知道我需要加载哪些Framework的呢?
我们借助一个工具去看一下可执行文件到底包含了哪些内容,打开MacOView,将微信的可执行文件拖到MacOView打开。
Load Commands
我们可以看到他有一个叫做Load Commands的列表,这个列表标示了,如果要加载这个可执行文件,需要注意的事项,比如我的代码段有哪些,数据段有多大以及我所依赖的三方库有哪些,dyld会按照这个顺序去将不再内存中framework加载到我们的内存中,我们看到了其中微信所需要的OpenSSL,ProtobufLife等等,所以是不是我们在这个列表里面添加一条我们自己的LC_LOAD_DYLIB命令,让他去加载我们自己的写Framework是不是就能成功注入了呢?
实施我们的想法
- 创建一个自己的Framework。
- 修改Macho文件中Load Commands。
首先第一步,我们创建一个自己的Framework。
点击+号
选择创建Framework
在自己创建的Framework中创建一个类,并实现里面的+(void)load方法,用以检测我们的Framework是否加载成功。
随便创建一个类
实现load
编译一下工程,目的是让我们自己的Framework放到Frameworks中。
编译后的Frameworks
然后我们准备开始第二步,第二步我们借用一个工具去修改MachO文件,叫做yololib。
解压我们的微信ipa,找到可执行文件,cd到可执行文件的文件夹
然后执行
yololib命令
由于我将yololib放到了usr/local/bin下,所以可以直接调用,大家也可以放到该目录下。
执行结果
我们再分析一下修改完后的MachO文件
加完后
由于我们之前使用的脚本第一步是解压,所以我们先把我们刚刚解压的ipa压缩,cd到之前存放ipa包的位置,然后使用zip -ry WeChat *进行压缩,最终保证是这样子的,删除或将没必要文件移动到其他文件夹。
最终结果
然后连接手机运行项目
断点
确实是进入了我们自己写的Framework中的load方法。
后续我们将讲解如何Hook微信的事件。