iOS 应用代码注入

本文需要参考之前的文章

本节所需要的工具

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

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

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

Load Commands

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

实施我们的想法

  1. 创建一个自己的Framework。
  2. 修改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微信的事件。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能、代码健壮相关的问题,我们有时还需要考虑到应用安全...
    喵喵唔的老巢阅读 863评论 0 0
  • 在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能、代码健壮相关的问题,我们有时还需要考虑到应用安全...
    iOS猿_员阅读 3,055评论 1 4
  • 在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能、代码健壮相关的问题,我们有时还需要考虑到应用安全...
    _小迷糊_997阅读 7,399评论 3 41
  • 推荐阅读:iOS开发——BAT面试题合集(持续更新中) 在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应...
    iOS开发之家阅读 425评论 1 2
  • 一位共事了5年的同事离职时,问他基于我过去的工作,未来有什么建议时,他说“性子太急没有耐心,不需要太着急的事情,你...
    Doris_Wong阅读 243评论 0 0