美文网首页iOS--逆向
Framework & 代码注入

Framework & 代码注入

作者: Superman168 | 来源:发表于2018-07-21 00:48 被阅读0次

前言

经过上一次的 App 重签名,大概过程都熟悉了,现在开始新的练习,代码注入,其实过程很简单,就是重签名 App ,注入动态库。

环境配置

依照上次的步骤,只不过把 上次的 脚本保存下来,以后可以不用编辑,使用罢了。

但是,编译会报错,如下:

image.png

可以看到是因为脚本的执行权限问题,因为脚本内有很多文件读写的操作

赋予其执行权限:

chmod +x XcodeSignApp.sh

出了一个小插曲:

image.png

因为 文件路径的问题,开始没察觉出来,新建的是 APP 文件夹,但是 脚本中写的是 TargetApp,一定要和脚本一致,低级错误!

编译,OK!

注入原理

有一个问题:我们怎么注入代码呢?我们的工程已经把 app 包给替换了,怎么修改它的代码呢?

Mach-o 文件。

动态注入:在程序运行过程中,通过一些底层的函数去注入。
静态注入:修改 Mach-o 文件 注入。

都是改变的 二进制执行文件,要么把相关的源码打包进二进制文件中,要么动态加载库,系统的 dyld 加载的 如:dylib。

如:查看 WeC 的 Mach-o 文件,可以看到:

image.png

有很多的 dylib 文件,这些动态库,在程序启动的时候,Load Commands 列表中的字段,dyld 工具 都会去一个一个的去加载。

那我们注入代码可不可以在 二进制 文件中,添加一个动态库呢???

注入过程

  1. 新建 library
image.png
  1. 在 库中创建 类,开发逻辑代码。
image.png
  1. 添加依赖关系,编译。
image.png

其实,这没添加依赖关系的,Xcode 自动做的,不添加也可以注入成功。

app 包所在目录中的 app 包 中的 Frameworks

正向开发,只需在代码中导入,但我们要改的是 Mach-o 文件,修改的工具:yololib

这个工具的作用就是:将我们 的动态库路径写入 Mach-o 文件中。

因为经常使用,放入/usr/local/bin 下使用更方便。

image.png
  • 使用:

yololib WeChat Frameworks/QCHook.framework/QCHook
指令 Mach-o 文件 动态库路径,相对于可执行文件来说的路径。

image.png image.png

即代表修改注入成功。

但是运行,你会发现并不会执行注入的代码,因为一开始每次会替换掉你修改的 二进制文件,所以从根源上修改:

image.png

修改这一个,Mach-o 文件,解压

image.png
  • 打包:

zip -ry WeChat.ipa Payload

打包完成删除 Payload
  • 运行成功:
image.png

Mach-o 文件中,loadCommands 中注入的动态库。

image.png

开不开心???现在就可以随便玩了

注入小结

  1. 首先是环境的配置,重签名 APP。
  2. Target 下创建 Framworks ,依赖关系添不添加都可以,Xcode 自动将 Framworks 打包进 App 包 同级目录和 Mach-O 文件里面。
  3. 但是运行,是不会执行我们注入的动态库中的代码的,但是我们知道 Mach-o 文件中,loadCommands 中的动态库就是 目标 APP 运行需要加载的动态库,所以修改Mach-o 文件,告诉 Mach-O 我们要执行的动态库的路径,就可以执行我们的代码。
    即Mach-o 文件中,loadCommands 中注入的动态库。
    使用 yololib 工具修改 Mach-o 二进制文件。

image list 查看 项目依赖的库。

  1. 修改之后 ,Xcode 又会重新打包,签名。

这其中 Xcode 其实做了很多的事情,就是 忽悠 Xcode。

相关文章

  • Framework & 代码注入

    前言 经过上一次的 App 重签名,大概过程都熟悉了,现在开始新的练习,代码注入,其实过程很简单,就是重签名 Ap...

  • iOS开发逆向之代码注入(上)

    本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入 代码注入 一般修改原始的程序,是利用代码注...

  • 代码注入&MethodSwizzle

    一、代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方...

  • 2018-12-30

    代码注入 一般修改原始的程序,可以利用代码注入的方式。注入代码可以选择利用FrameWork或者Dylib等三方库...

  • MethodSwizzle

    新建工程,注入 Framework后,注入简单测试代码,利用 Runtime 特性交换方法

  • iOS逆向-代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的...

  • 代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的...

  • 代码注入(11)

    代码注入(11) framework注入 假工程里写代码不会走,是因为APP(MachO)文件整个都被替换了 通过...

  • 代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等第三方库...

  • IOS 非越狱代码注入(dylib)

    前言 由于dylib注入方式和framework注入方式很像,所以下面直接演示使用脚本来注入 首先代码注入思路: ...

网友评论

    本文标题:Framework & 代码注入

    本文链接:https://www.haomeiwen.com/subject/doqqmftx.html