FrameWork、dylib注入ipa教程

by on under jekyll
1 minute read

FrameWork、dylib动态库注入ipa教程

          公众号: XLsnow

代码注入 一般修改原始的程序,是利用代码注入的方式,

注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。

查看Mach-O文件 在了解注入前,我们首先需要了解ipa包中的静态库是如何注入的,

有以下两种方式查看Mach-O可执行文件

1、终端命令:otool -l WeChat 2、MachOView 二进制文件分析工具 (注:分析时可能出现无法分析的情况,可以通过 Cmd + o 打开)

Mach-O文件中主要看load Commands(即加载命令集),从这里可以看出动态库的加载等。

其中大部分格式为:LC_LOAD_DYLIB(xxx),是在指定路径下加载xxx,如下所示

所以,综上所述,如果需要注入代码,是以动态库的形式注入

方式1:Framework手动注入 第一步:动态库进入App包,即Framework注入

1、创建一个Framework,命名为 XLsn0wHook(创建位置:target -> + -> ios -> Framework)

https://github.com/XLsn0w/XLsn0w.github.io/blob/master/Assets/XLsn0wHook.png?raw=true

2、在XLsn0wHook中创建inject文件,在生命周期方法load函数中写注入代码

+ (void)load {
    NSLog(@"XLsn0wHook ------ 注入成功");
}

3、编译工程(注:这里的工程依然需要重签名),然后查看工程的可执行文件Wechat, 查找其中的Frameworks,从这里可以看到CJLHook,但是此时并不会执行其中的load函数

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

第二步:yololib手动注入,修改Mach-O字段

4、通过yololib工具修改Mach-O字段:./yololib WeChat Frameworks/CJLHook.framework/CJLHook(注:需要将WeChat可执行文件拷贝过来)

第一个参数:目标可执行文件

第二个参数:CJLHook的路径

5、查看Mach-O可执行文件,可以看到已经加进来了

6、重新打包,过程如下:

解压微信-7.0.8.ipa

替换Payload中的可执行文件为上一步的Mach-O文件

重新打包:zip -ry WeChat.ipa Payload/

然后替换ipa包

7、运行程序,可以看到成功执行了 XLsn0wHook中的load

方式2:dylib注入 准备工作:创建一个空工程,并进行WeChat的重签名,可以参考这篇文章iOS逆向 10:应用重签名(下) dylib注入

1、选择target -> + -> mac os -> Library,命名为CJLHook

2、在Build Setting中配置CJLHook

1)Base SDK 改为 ios

2)Code Signing identify 改为 iOS Developer

3、当前工程中拷贝lib

1)、Build Phase -> + -> New Copy File… 2)、然后选择拷贝到的目标文件:Frameworks 3)、添加dylib

4、在CJLHook.m文件中重写load函数

#import “CJLHook.h”

@implementation CJLHook +(void)load{ NSLog(@”CJLHook —- 注入成功”); } @end 复制代码

5、脚本注入dylib,将yololib拷贝至根目录,在appSign.sh末尾添加以下命令

#注入 ./yololib “$TARGET_APP_PATH/$APP_BINARY” “Frameworks/libCJLHook.dylib” 复制代码

6、编译工程,查看Mach-O文件中的Frameworks文件,已经包含了CJLHook的dylib

7、运行程序,从日志可以看出执行了CJLHook中的load

总结

代码注入:一般会选择利用FrameWork或者Dylib等三方库的方式注入

Framwork手动注入流程:

1、通过Xcode新建Framwork,将库安装进入APP包

2、通过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库路径

3、所有的Framwork加载都是由DYLD加载进入内存被执行的

4、注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB字段中

Dylib注入流程:

1、通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改相关属性配置)

2、添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。

3、利用yololib进行注入。

XLsn0w, Blog