iOS逆向工程 - 代码注入

本文主要介绍利用动态库对第三方App实现代码静态注入,一般有两种注入方式:Framework,Dylib。大体包含以下几个步骤:

  1. App添加动态库,并添加工程与动态库的关联关系。
  2. 修改Mach-O文件的Load Commands。
  3. 在注入的动态库中写上自己的代码。

一、Framework注入

  1. 创建一个工程,按照文章 iOS App重签名 实现脚本自动化重签名。
  2. 添加一个Cocoa Touch Framework动态库。New Copy File Phase,新建一个Copy File文件,Destination选择Frameworks,并把动态库Add进去。这样就给动态库添加了依赖。这个依赖添加后执行编译Xcode就会将动态库打包到App包的Frameworks文件夹下面。编译后,会发现Products目录和包内容Frameworks目录底下都增加了新添加的动态库。


    iOS逆向工程 - 代码注入_第1张图片
    image.png
  3. 在动态库底下新建一个类,在类里面可以复写+ (void)load方法,注入代码。

这个时候运行工程,代码注入是不会成功的。还需要把动态库的路径写入Mach-O文件。

  1. 把Products目录下App包内容里的Mach-O文件拷贝到桌面。用 yololib 工具把动态库的路径写入Mach-O文件。它其实是去修改了Mach-O文件的二进制。
    yololib Mach-O文件名称 Frameworks/xxxFramework.framework/xxxFramework
    这个时候再看Mach-O文件的Load Commands最底下,就会发现动态库已经写入了,这样当程序启动的时候dyld就会去加载新添加的动态库了。

  2. 把工程文件所在目录下的APP文件夹里的ipa包解压,并把App包内容里的Mach-O文件替换为桌面上的Mach-O文件(要改源头)。

  3. 把ipa包解压后的Payload文件夹拖到APP文件夹下,并把Payload文件夹打包为ipa包。其余文件夹删掉。
    zip -ry xxx.ipa 要打包的文件夹

  4. 运行工程,我们会发现注入动态库的代码执行了。

注:上面的4、5、6步可以写在脚本里,这样就可以省去这些步骤。下面的Dylib注入,用脚本把动态库的路径写入了Mach-O文件。

二、Dylib注入

  1. 创建一个工程,按照文章 iOS App重签名 实现脚本自动化重签名。
  2. 添加一个Library动态库。这个Library是在macOS->Framework & Library里。New Copy File Phase,新建一个Copy File文件,Destination选择Frameworks,并把动态库Add进去。这样就给动态库添加了依赖。
  3. 由于Library动态库是在macOS平台下的,属于X86架构。所以需要在TARGETS->添加的Library库->Build Settings里设置成iOS平台。需要设置两处:
  •  Base SDK修改为Latest iOS(iOS xxx)
  •  Code Signing Identity修改为iOS Developer
  1. 在动态库底下新建一个类,在类里面可以复写+ (void)load方法,注入代码。
  2. 运行工程,我们会发现注入动态库的代码执行了。

你可能感兴趣的:(iOS逆向工程 - 代码注入)