iOS非越狱状态下对ipa包注入代码(调用自己framework)

声明

本文仅仅是自己学习逆向的记录,承诺不作任何危害社会的事情!

demo场景

创建自己的framework和测试App,将framework嵌入到目标App中,然后测试App发送推送,目标App收到推送。

使用场景

将代码注入到任意App内

代码注入原理

众所周知,iOS app 在打包的过程中将代码全部转换成了 可执行文件 Mach - O 文件,所以我们直接改源码是万万不可能的(除非你拿到的源码,话说你源码都拿到了你还逆向个啥?)。那么我们可不可以以第三方lib的方式注入呢?必须可以啊!!

那么怎么才能将第三方的lib 注入目标程序呢?这个我们要从二进制文件的结构说起,Mach-O文件的数据主体可分为三大部分,分别是头部(Header)、加载命令(Load commands)、和最终的数据(Data)。mobileloader会在目标程序启动时,会根据指定的规则检查指定目录是否存在第三方库,如果有,则会通过修改二进制的loadCommands,来把自己注入进所有的app当中,然后加载第三方库。

代码注入思路

dyld会动态加载ipa包内Frameworks中所有的动态库,那么在Frameworks中增加一个自己的动态库(framework),然后在自己动态库中写要注入的代码。

准备

1、yololib
下载地址:https://github.com/KJCracks/yololib?spm=a2c4e.11153940.blogcont63256.9.5126420eAJpqBD

下载成功后,运行工程,把工程里面的yololib拷贝出来(下图红框内文件),然后把yololib复制到/usr/local/bin,后面便可直接在终端用命令行使用


iOS非越狱状态下对ipa包注入代码(调用自己framework)_第1张图片
WeChat68da7655dfe4f0295945b7cd55bef82f.png

2、目标ipa包

3、注入的代码(framework)

开始

1、解压ipa包---->显示包内容---->替换包内证书配置文件(embedded.mobileprovision)
2、将要注入的代码(Hook.framework)拷贝到包内的Frameworks文件夹中


iOS非越狱状态下对ipa包注入代码(调用自己framework)_第2张图片
WeChatd7462d70cbf25202a106828ea65ec6e1.png

3、使用yololib去添加动态库依赖(修改目标App文件夹的ipa包中的MachO),将Hook.framework(添加到Frameworks文件夹内的)加到ipa包中MachO文件
解压ipa,找到MachO文件


iOS非越狱状态下对ipa包注入代码(调用自己framework)_第3张图片
WeChatd7462d70cbf25202a106828ea65ec6e1.png

cd到App所在文件夹下
使用命令
yololib TestApp Frameworks/Hook.framework/Hook
第一个参数指定被修改的mach-o文件的路径,第二个参数指定动态库的路径
主要,这边的TestApp后面不要带上.app,比如TestApp.app,只要写TestApp


iOS非越狱状态下对ipa包注入代码(调用自己framework)_第4张图片
WeChatd3ed1ba697ca11a731b1e4ea53e16651.png

看到complete! 说明添加动态库依赖成功

接下来将Payload压缩生成一个Payload.zip,接着将Payload.zip后缀名改成.ipa,生成Payload.ipa,并对Payload.ipa重签名

重签名成功后,将App安装到手机上运行


iOS非越狱状态下对ipa包注入代码(调用自己framework)_第5张图片
WeChatc3e2aa06653fcff50d2057bfd7aefda2.png

推送过来了,说明代码注入成功了!

你可能感兴趣的:(iOS非越狱状态下对ipa包注入代码(调用自己framework))