MonkeyDev使用

一、简介

MonkeyDev是基于iOS OpenDev的升级,是一个为越狱和非越狱开发人员准备的工具,主要包括四个模块:

Logos Tweak

使用theos提供的logify.pl工具将*.xm文件转成*.mm文件进行编译,集成了CydiaSubstrate,可以使用MSHookMessageExMSHookFunctionHook OC函数和指定地址。

CaptainHook Tweak

使用CaptainHook提供的头文件进行OC 函数的Hook以及属性的获取。

Command-line Tool

可以直接创建运行于越狱设备的命令行工具

MonkeyApp

这是自动给第三方应用集成Reveal、Cycript和注入dylib的模块,支持调试dylib和第三方应用,支持Pod给第三放应用集成SDK,只需要准备一个砸壳后的ipa或者app文件即可。

MonkeyDev安装完成后,打开Xcode并新建工程,效果如下:

image.png

  • If you have a jailbreak device, you can use it to write a CaptainHook TweakLogos Tweak or Command-line Tool
  • If you don't have a jailbreak device, you can create a MonkeyApp project to debug and hook third-party application.

二、安装

1、环境要求

使用工具前确保如下几点:

  • Mac需先安装Homebrew,参考Homebrew官网 brew.sh

  • 安装最新的theos

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.pydump.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
复制代码

image.png 再新开一个Mac终端,查看手机安装的应用列表:

cd frida-ios-dump
python3 dump.py -l  #查看手机里的应用列表
复制代码

image.png 选择一个应用进行脱壳,比如设置:

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模板:

image.png 点击Next新建项目,如下:

image.png 给Targets:MonkeyAppDemo``MonekyAppDemoDylib设置合适的证书,完成后开始编译,报错如下:

image.png 解决办法是:删除TargetMonkeyAppDemoDylib Other Linker Flags的一些配置,如下图

image.png 删除3出红框内的配置即可

连接上iPhone手机,运行工程

1.不添加ipa包,直接运行,运行结果如下图所示,说明MonkeyDev插件安装成功了:

image.png

  1. 添加通过frida-ios-dump脱壳过的应用程序ipa包,放入Xcode工程:

image.png

image.png 编译运行,如果报错:

image.png
目前还没有找到很好的解决办法,每次运行前执行一下清理,快捷键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安装成功:

image.png

解压xxx越狱app的ipa包,获取mach-o文件,执行:

class-dump -H xxx -o Headers
复制代码

获取到该app的全部头文件,分析头文件里的方法,打开一个头文件,比如:

image.png

在MonkeyAppDemo工程里进行Hook,比如我想hook App的applicationDidBecomeActive:方法,在MonkeyAppDemoDylib.xm里按照 Logos语法 编写hook代码,添加打印并断点,代码编写如下:

8b17c6dda5bf4538b51f7f4f0a5a51c7_tplv-k3u1fbpfcp-watermark.png

连接iPhone设备运行起来后,可以看到Xcode断点在了方法里,图中也打印出了applicationDidBecomeActive:方法arg1的参数值。
至此整个MonkeyDev简易的流程就介绍完了,你可以根据自己的喜好去hook关心的方法,并进行分析和处理。

猜你喜欢

转载自juejin.im/post/7040745521715101709