美文网首页
iOS逆向工程 - 代码注入

iOS逆向工程 - 代码注入

作者: 异想天不开_9950 | 来源:发表于2018-05-17 11:20 被阅读0次

    本文主要介绍利用动态库对第三方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目录底下都增加了新添加的动态库。


      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逆向工程 - 代码注入

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