声明
本文仅仅是自己学习逆向的记录,承诺不作任何危害社会的事情!
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,后面便可直接在终端用命令行使用
2、目标ipa包
3、注入的代码(framework)
开始
1、解压ipa包---->显示包内容---->替换包内证书配置文件(embedded.mobileprovision)
2、将要注入的代码(Hook.framework)拷贝到包内的Frameworks文件夹中
3、使用yololib去添加动态库依赖(修改目标App文件夹的ipa包中的MachO),将Hook.framework(添加到Frameworks文件夹内的)加到ipa包中MachO文件
解压ipa,找到MachO文件
cd到App所在文件夹下
使用命令
yololib TestApp Frameworks/Hook.framework/Hook
第一个参数指定被修改的mach-o文件的路径,第二个参数指定动态库的路径
主要,这边的TestApp后面不要带上.app,比如TestApp.app,只要写TestApp
看到complete! 说明添加动态库依赖成功
接下来将Payload压缩生成一个Payload.zip,接着将Payload.zip后缀名改成.ipa,生成Payload.ipa,并对Payload.ipa重签名
重签名成功后,将App安装到手机上运行
推送过来了,说明代码注入成功了!