OC逆向11:代码注入(上)

张建 lol

前言

本文主要讲解代码注入的两种方式: 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手动注入

  1. 第一步:动态库进入App包,即Framework注入
  • 创建一个 Framework,命令为ZJHook(创建位置:target -> + -> ios -> Framework

  • 在 ZJHook中创建 inject 文件,在声明周期方法load函数中写注入代码
1
2
3
+(void)load{
NSLog(@"CJLHook ------ 注入成功");
}
  • 编译工程Demo(注:这里的工程依然需要重签名),然后查看工程的可执行文件Demo,查找其中的Frameworks,从这里可以看到ZJHook,但是此时并不会执行其中的load函数

load不会执行的原因:查看此时的Mach-O文件中的 Load Commands,并没有发现ZJHook,随意此时是不会执行其中的load函数的

  1. 第二步: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.
On this page
OC逆向11:代码注入(上)