一、简介
MonkeyDev是基于iOS OpenDev的升级,是一个为越狱和非越狱开发人员准备的工具,主要包括四个模块:
Logos Tweak
使用theos提供的logify.pl
工具将*.xm
文件转成*.mm
文件进行编译,集成了CydiaSubstrate
,可以使用MSHookMessageEx
和MSHookFunction
来Hook
OC函数和指定地址。
CaptainHook Tweak
使用CaptainHook提供的头文件进行OC 函数的Hook以及属性的获取。
Command-line Tool
可以直接创建运行于越狱设备的命令行工具
MonkeyApp
这是自动给第三方应用集成Reveal、Cycript和注入dylib的模块,支持调试dylib和第三方应用,支持Pod给第三放应用集成SDK,只需要准备一个砸壳后的ipa或者app文件即可。
MonkeyDev安装完成后,打开Xcode并新建工程,效果如下:
- If you have a jailbreak device, you can use it to write a
CaptainHook Tweak
、Logos Tweak
orCommand-line Tool
。 - If you don't have a jailbreak device, you can create a
MonkeyApp
project to debug and hook third-party application.
二、安装
1、环境要求
使用工具前确保如下几点:
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
复制代码
- 安装ldid(如安装theos过程安装了ldid,跳过)
brew install ldid
复制代码
安装theos完成后,配置下环境,打开终端执行下面的命令:
vim ~/.zshrc
复制代码
打开配置文件后,添加:
export THEOS="/opt/theos"
export PATH="/opt/theos/bin:$PATH"
复制代码
wq保存并关闭文件,刷新使文件生效:
source ~/.zshrc
复制代码
- 配置免密码登录越狱设备(如果没有越狱设备,跳过)
ssh-keygen -t rsa -P ''
ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip //ip为越狱手机的ip地址
复制代码
2、安装MonkeyDev
你可以通过以下命令选择指定的Xcode进行安装:
sudo xcode-select -s /Applications/Xcode.app
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
复制代码
默认安装的Xcode为:
xcode-select -p
复制代码
执行安装命令:
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"
复制代码
由于防火墙的原因,安装有时会失败,报错如下:
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
Failed to download https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.py to /opt/MonkeyDev/bin/dump.py
Failed to download https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.js to /opt/MonkeyDev/bin/dump.js
复制代码
我们使用本地安装的方式,clone代码到本地:
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
复制代码
在bin目录下,打开md-install文件,注释掉下载frida-ios-dump的代码:
#下载frida-ios-dump
#echo "Downloading frida-ios-dump from Github..."
#downloadFile "https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.py" "$MonkeyDevPath/bin/dump.py"
#downloadFile "https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.js" "$MonkeyDevPath/bin/dump.js"
复制代码
新建一个目录,clone frida-ios-dump
代码到本地:
git clone https://github.com/AloneMonkey/frida-ios-dump.git
cd frida-ios-dump
复制代码
手动将frida-ios-dump
文件夹下的dump.py
和dump.js
拷贝到/opt/MonkeyDev/bin
目录下
copy完成后,进入MonkeyDev/bin
目录,执行MonkeyDev的安装:
sudo bash md-install
复制代码
如果安装时报错:
File /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Package Types.xcspec not found
复制代码
是因为新版的Xcode12上文件目录发生了改变,我们需要修改它,命令行执行:
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications
复制代码
到此,安装应该没有什么问题了,进入MonkeyDev/bin
目录,执行MonkeyDev的安装:
sudo bash md-install
复制代码
3、应用脱壳
使用工具:frida-ios-dump
- 准备一台越狱手机,在手机里打开
cydia
应用,添加源:https://build.frida.re
,安装Frida插件。打开Mac电脑终端,输入:
ssh root@越狱手机ip地址
复制代码
如果提示输入密码,则输入alpine
,登录进入手机命令行终端,查看手机中frida-server版本:
frida-server --version #输出:14.2.3
复制代码
- Mac电脑安装frida,打开电脑终端,输入:
brew install usbmuxd
pip3 install frida==14.2.3 #安装与越狱手机相同版本的frida
复制代码
- 上面安装MonkeyDev过程中,下载过frida-ios-dump源码,进入
frida-ios-dump
文件夹
cd frida-ios-dump
sudo pip3 install -r requirements.txt --upgrade
复制代码
安装完成后,添加环境变量:
vim ~/.zshrc
复制代码
添加alias dump.py="/opt/dump/frida-ios-dump/dump.py"
到文件末尾,wq进行保存。刷新生效:
source ~/.zshrc
复制代码
- 执行脱壳:
打开电脑终端,执行端口映射:
iproxy 2222 22
复制代码
再新开一个Mac终端,查看手机安装的应用列表:
cd frida-ios-dump
python3 dump.py -l #查看手机里的应用列表
复制代码
选择一个应用进行脱壳,比如设置:
python3 dump.py 设置
复制代码
或者
python3 dump.py com.apple.Preferences
复制代码
脱壳完的应用ipa包会存放在frida-ios-dump
文件夹下
4、新建工程
打开Xcode,如果发现崩溃,解决方法是打开下面路径的文件:
/Applications/Xcode.app/Contents/PlugIns/IDEiOSSupportCore.ideplugin/Contents/Resources/Embedded-Device.xcspec
复制代码
文本编辑,删除<array>
标签内中的起始的两个空<dict>
,即删除<dict/> <dict/>
,保存,即可。
新建Xcode项目,选择MonkeyApp模板:
点击Next
新建项目,如下:
给Targets:MonkeyAppDemo``MonekyAppDemoDylib
设置合适的证书,完成后开始编译,报错如下:
解决办法是:删除TargetMonkeyAppDemoDylib
Other Linker Flags的一些配置,如下图
删除3
出红框内的配置即可
连接上iPhone手机,运行工程
1.不添加ipa包,直接运行,运行结果如下图所示,说明MonkeyDev插件安装成功了:
- 添加通过
frida-ios-dump
脱壳过的应用程序ipa包,放入Xcode工程:
编译运行,如果报错:
目前还没有找到很好的解决办法,每次运行前执行一下清理,快捷键Shift + Command + K
,可以暂时解决这个问题。执行清理后,运行工程,就可以以新的bundleId运行添加的ipa程序了。
class-dump 使用
下载 class-dump.dmg 并解压,将解压后的class-dump
文件放入 /usr/local/bin
目录下,打开Mac命令行,执行:
sudo chmod 777 /usr/local/bin/class-dump
class-dump --version
复制代码
输出如下,说明class-dump
安装成功:
解压xxx越狱app的ipa包,获取mach-o文件,执行:
class-dump -H xxx -o Headers
复制代码
获取到该app的全部头文件,分析头文件里的方法,打开一个头文件,比如:
在MonkeyAppDemo工程里进行Hook,比如我想hook App的applicationDidBecomeActive:
方法,在MonkeyAppDemoDylib.xm
里按照 Logos语法 编写hook代码,添加打印并断点,代码编写如下:
连接iPhone设备运行起来后,可以看到Xcode断点在了方法里,图中也打印出了applicationDidBecomeActive:
方法arg1的参数值。
至此整个MonkeyDev简易的流程就介绍完了,你可以根据自己的喜好去hook关心的方法,并进行分析和处理。