OC逆向11:代码注入(上)
前言
本文主要讲解代码注入的两种方式: Framework注入、dylib注入
代码注入
一般修改原始的程序,是 利用代码注入
的方式,注入代码就会选择利用 Framework
或者 dylib
等三方库的方式注入
- 查看Mach-O文件
在了解注入前,我们首先需要了解 ipa包 中的静态库是如何注入的,有以下两种方式查看Mach-O可执行文件
* 终端命令:otool -l Demo
* MachOView 二进制文件分析工具(注:分析时可能出现无法分析的情况,可以通过CMD + O打开)
Mach-O
文件中主要看 load Commands(即加载命令集)
,从这里可以看出动态库的加载等,其中大部分格式为:LC_LOAD_DYLIB(xxx),是在指定路径下加载xxx,如下所示
所以,综上所述,如果需要注入代码,是 以动态库的形式注入
方式一:Framework手动注入
- 第一步:动态库进入App包,即Framework注入
- 创建一个
Framework
,命令为ZJHook(创建位置:target -> + -> ios -> Framework
)
- 在 ZJHook中创建
inject
文件,在声明周期方法load函数中写注入代码
1 | +(void)load{ |
- 编译工程
Demo
(注:这里的工程依然需要重签名),然后查看工程的可执行文件Demo,查找其中的Frameworks
,从这里可以看到ZJHook
,但是此时并不会执行其中的load函数
load不会执行的原因
:查看此时的Mach-O文件中的 Load Commands,并没有发现ZJHook,随意此时是不会执行其中的load函数的
- 第二步:yololib手动注入,修改Mach-O字段
- 通过yololib工具修改Mach-O字段:./yololib Demo Frameworks/ZJHook.framework/ZJHook(注:需要将Demo可执行文件拷贝过来)
方式2:dylib注入
准备工作:创建一个空工程,并进行Demo的重签名,可以参考这篇文件iOS逆向10:应用重签名(下)
dylib注入
选择
target -> + > mac os -> Library
,命名为ZJHook
在
Build Setting
中配置ZJHook
Base SDK
改为ios
Code Signing identify
改为iOS Developer
当前工程拷贝 lib
- Post title:OC逆向11:代码注入(上)
- Post author:张建
- Create time:2022-02-08 16:03:52
- Post link:https://redefine.ohevan.com/2022/02/08/OC逆向/OC逆向11:代码注入(上)/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.