iOS--逆向

Framework & 代码注入

2018-07-21  本文已影响0人  Superman168

前言

经过上一次的 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。

上一篇 下一篇

猜你喜欢

热点阅读