ipa注入dylib

本文最后更新于:2021年2月7日 下午

实现在未越狱设备上使用越狱插件

准备工作

1.砸壳

奥德赛越狱不支持插件砸壳,会有bug,所以我们采用电脑端砸壳软件:frida-ios-dump

需要安装python

如果已经安装python3,使用pip却提示找不到指令可以使用pip3安装

安装frida

打开终端使用pip安装frida:

pip install frida-tools

安装iproxy

在mac端使用brew安装:

pip install frida-tools

克隆代码到本地

python3可以使用分支里另一个py3版本

git clone [git@github.com](mailto:git@github.com):AloneMonkey/frida-ios-dump.git

cd到文件夹,使用pip安装依赖

sudo pip install -r requirements.txt --upgrade

新建一个终端,使用iproxy连接ssh到手机

iproxy 2222 22
显示:
*waiting for connection*

上面指令意思是将手机的22端口映射到本地2222端口上

切回刚才那个终端,使用应用bundle id开始砸壳

./dump.py (bundle id)

#如果提示找不到组件frida,请使用python3运行

python3 dump.py (bundle id) 

#如果还是提示找不到组件frida,卸载重装python

布拉布拉一堆代码跑过,砸壳完成,ipa文件在终端所在的当前文件夹内

2.insert_dylib工具

使用在GitHub上开源的insert_dylib工具可以吧动态库注入到应用的二进制文件中

克隆代码

git clone [git@github.com](mailto:git@github.com):Tyilo/insert_dylib.git

双击打开xcodeproj后缀文件,点击xcode左上角有一个开始的符号开始编译,将编译好的二进制文件放入/usr/local/bin/路径下

App Signer

用于打包签名,下载地址

3.准备工作:

新建一个文件夹,将ipa包,需要的插件的dylib文件,Substrate文件放进去

如果有已越狱设备,可以去 /Library/MobileSubstrate/DynamicLibraries/ 路径下找到想要插件的dylib

Substrate文件也可以在越狱设备中找到:/Library/Frameworks/CydiaSubstrate.framework路径内

教程开始

解压ipa,解压出一个后缀为app的文件,我这里以bilibili为例,插件是bilidownloader,一个可以下载版权番剧的下载器

使用Mac自带工具otool检查dylib依赖

otool -L BiiliDownloader.dylib

可以发现中间有两行有对CydiaSubstrate依赖,但这玩意只有越狱设备才有,我们希望他可以在未越狱设备上运行,将CydiaSubstrate的路径修改为ipa包内Substrate的路径

install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @executable_path/Substrate BiliDownloader.dylib

再次使用otool命令检查,依赖路径已经变为
@executable_path/Substrate

然后我们使用insert_dylib把库注入到应用二进制文件中,右键app后缀文件,查看包内容,找到一个叫做“bili-universal”的文件,种类是“Unix可执行文件”

把Substrate和BiliDownloader.dylib复制到这里面,使用终端cd到app包内

insert_dylib @executable_path/BiliDownloader.dylib bili-universal

执行步骤:

Binary already contains a load command for that dylib. Continue anyway? [y/n] y
LC_CODE_SIGNATURE load command found. Remove it? [y/n] n
Added LC_LOAD_DYLIB to /Users/bailu/Documents/test/bili-universal.app/bili-universal_patched

在app内会发现多出一个后缀带patch的二进制文件,将两者改名替换一下即可

使用app signer打包签名,直接选中app文件,它会自动打包,不会使用的可以找一下我前面转载的文章,很详细的讲述了如何申请证书,下载及签名

最后使用爱思或Xcode装到手机上即可,检查一下打开是否闪退,闪退即表明依赖路径没有处理好,可以将@executable_path改为@loader_path后重试

我不是很清楚到底该用@executable_path还是@loader_path,下面我会放上网络上的解释,注入安装后闪退基本就是这两个路径的问题

1@executable_path

可执行文件的路径,例如/Applications/WeChat.app/Contents/MacOS。

 

2@loader_path

被加载的二进制的路径,若该二进制是可执行文件,则@loader_path等价于@executable_path。

适用于非可执行二进制嵌套的场景,例如frameworkA包含frameworkB,frameworkB的加载路径就可以根据frameworkA的@loader_path给出。