iOS 应用代码注入

本文需要参考之前的文章

本节所需要的工具

  • yololib
  • MachOView

   我们知道一个应用执行代码的部分包括MachO、Framework以及系统库,首先我们不能更改系统库,而且MachO修改的话需要写二进制比较麻烦,我们首先从Framework入手。

一个应用是如何知道我需要加载哪些Framework的呢?

我们借助一个工具去看一下可执行文件到底包含了哪些内容,打开MacOView,将微信的可执行文件拖到MacOView打开。

iOS 应用代码注入_第1张图片
Load Commands

我们可以看到他有一个叫做Load Commands的列表,这个列表标示了,如果要加载这个可执行文件,需要注意的事项,比如我的代码段有哪些,数据段有多大以及 我所依赖的三方库有哪些,dyld会按照这个顺序去将不再内存中framework加载到我们的内存中,我们看到了其中微信所需要的OpenSSL,ProtobufLife等等,所以是不是我们在这个列表里面添加一条我们自己的LC_LOAD_DYLIB命令,让他去加载我们自己的写Framework是不是就能成功注入了呢?

实施我们的想法

  1. 创建一个自己的Framework。
  2. 修改Macho文件中Load Commands。

首先第一步,我们创建一个自己的Framework。


iOS 应用代码注入_第2张图片
点击+号
iOS 应用代码注入_第3张图片
选择创建Framework

在自己创建的Framework中创建一个类,并实现里面的+(void)load方法,用以检测我们的Framework是否加载成功。


iOS 应用代码注入_第4张图片
随便创建一个类

iOS 应用代码注入_第5张图片
实现load

编译一下工程,目的是让我们自己的Framework放到Frameworks中。


iOS 应用代码注入_第6张图片
编译后的Frameworks

然后我们准备开始第二步,第二步我们借用一个工具去修改MachO文件,叫做yololib。
解压我们的微信ipa,找到可执行文件,cd到可执行文件的文件夹
然后执行

yololib命令

由于我将yololib放到了usr/local/bin下,所以可以直接调用,大家也可以放到该目录下。
iOS 应用代码注入_第7张图片
执行结果

我们再分析一下修改完后的MachO文件
iOS 应用代码注入_第8张图片
加完后

由于我们之前使用的脚本第一步是解压,所以我们先把我们刚刚解压的ipa压缩,cd到之前存放ipa包的位置,然后使用 zip -ry WeChat *进行压缩,最终保证是这样子的,删除或将没必要文件移动到其他文件夹。
iOS 应用代码注入_第9张图片
最终结果

然后连接手机运行项目


iOS 应用代码注入_第10张图片
断点

确实是进入了我们自己写的Framework中的load方法。

后续我们将讲解如何Hook微信的事件。

你可能感兴趣的:(iOS 应用代码注入)