MonkeyDev安装与使用

/ 10

安装MonkeyDev

MonkeyDev 是原有 iOS OpenDev 的升级,越狱/非越狱插件开发整合工具。

官方地址:https://github.com/AloneMonkey/MonkeyDev/
文档地址:https://github.com/AloneMonkey/MonkeyDev/wiki/安装

1.MonkeyDev 依赖 theos,需要先安装 theos,之前笔记有安装流程。

2.选择指定的 Xcode:

sudo xcode-select -s /Applications/Xcode.app

3.默认安装的 Xcode:

xcode-select -p

4.Xcode12 路径改变,需要链接一下,否则 MonkeyDev 安装脚本会提示错误下面错误:

File /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Package Types.xcspec not found

建立软链接:

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

5.安装 MonkeyDev:

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

6.卸载 MonkeyDev:

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-uninstall)"

7.更新 MonkeyDev:

sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-update)"

8.macOS Big Sur + Xcode 12 编译 MonkeyApp,会提示编译错误 ld: file not found: /usr/lib/libstdc++.dylib。解决办法:

sudo git clone https://github.com/devdawei/libstdc-.git  && cd libstdc- && ./install-Xcode_12.sh

网友提示也可以通过删除下图这2个条目解决:

9.安装 libimobiledevice 和 ideviceinstaller 工具:

brew install libimobiledevice
brew install ideviceinstaller

10.如果要使用 Reveal 则替换为自己的 RevealServer.framework,路径 /opt/MonkeyDev/frameworks

11.安装完成后重启 Xcode 并新建项目:

每次更新 Xcode 版本后,都需要重新执行 4、8 步骤。如果有安装 xia0LLDBLogos-Xcode11 这样的插件,也需要重装。

Logos代码提示插件

使用 Logos-Xcode 插件可以让 Xcode 支持 Logos 语法高亮和代码补全,但插件作者已经不维护了,插件不兼容当前最新版本 Xcode。找到一份修改好支持 Xcode11 和 Xcode12 的版本,地址:https://github.com/brendonjkding/Logos-Xcode11

先安装 coreutils 工具,安装完后可以使用 realpathgrealpath等:

➜  ~ brew install coreutils

先关闭 Xcode,然后备份下面两个目录:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
/Applications/Xcode.app/Contents/SharedFrameworks/SourceModel.framework/Versions/A/Resources

下载安装命令:

git clone https://github.com/brendonjkding/Logos-Xcode11 && cd Logos-Xcode11/src && python3 xclangspec_generator.py && ./add_current_uuid.sh && sudo ./install.sh

安装日志:

➜  git clone https://github.com/brendonjkding/Logos-Xcode11 && cd Logos-Xcode11/src && python3 xclangspec_generator.py && ./add_current_uuid.sh && sudo ./install.sh
Cloning into 'Logos-Xcode11'...
remote: Enumerating objects: 98, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 98 (delta 11), reused 26 (delta 9), pack-reused 64
Receiving objects: 100% (98/98), 1.53 MiB | 1.50 MiB/s, done.
Resolving deltas: 100% (33/33), done.
Reading File...
Parsing File...
Inserting Logos Keywords Into New File...
Saving New File...
XClangSpec Generator was successfully runned.
Password:
Checking Permissions...
Checking Xcode...
Finding Logos.xclangspec...
It's highly recommended that, if you are installing for the first time, you make a backup of the folder /Applications/Xcode.app/Contents/SharedFrameworks/SourceModel.framework/Versions/A/Resources
Do you wish to continue? (Y)es, (N)o    y
Sucessfully Installed.
Syntax coloring must be manually selected from the Editor - Syntax Coloring menu in Xcode.

开启语法高亮:

Frida脱壳工具

Mac端

安装 python 版本管理工具 pyenv:

brew install pyenv

安装 python 指定版本:

pyenv install 3.8.2

macOS Big Sur 安装失败用下面命令:

CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" \
pyenv install --patch 3.8.2 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

全局设置版本,设置后重新打开终端生效:

pyenv global 3.8.2

查看系统支持的 python 版本(*号表示当前使用的版本):

~ pyenv versions
  system
* 3.8.2 (set by /Users/feng/.pyenv/version)

检查 pip 和 python 版本:

➜  ~ pip -V
pip 19.2.3 from /Users/feng/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pip (python 3.8)
➜  ~ python -V
Python 3.8.2

如果提示 Apple Command Line Tools 未安装,去 https://developer.apple.com/download/more/ 手动下载对应版本进行安装。

安装 wget:

brew install wget

安装 frida:

pip install frida

下载 3.x 分支的 frida-ios-dump:

sudo mkdir /opt/dump && cd /opt/dump && sudo git clone -b 3.x https://github.com/AloneMonkey/frida-ios-dump

安装 frida-ios-dump 依赖:

sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade

设置脚本的别名,方便使用:

alias dump.py="/opt/dump/frida-ios-dump/dump.py"

手机端

Cydia 添加源:https://build.frida.re/ 并安装 Frida 插件。

在 Mac 终端测试:

~ frida-ps -U
 PID  Name
----  -----------------------------------------------
4547  Cydia
5922  InCallService
4545  QQ
4476  ReProvision
4006  Siri搜索
5803  信息
4045  微信
4233  相机
4287  笔趣阁

A12设备砸壳报错

A12 设备可能会出现以下错误,需要去官网下载和 Frida 插件版本一致的 frida-gadget 动态库文件:

➜  ~ dump.py com.xxxx
Start the target app com.xxxx
need Gadget to attach on jailed iOS; its default location is: /Users/feng/.cache/frida/gadget-ios.dylib

A12 设备安装的是 14.2.13,所以下载:https://github.com/frida/frida/releases/download/14.2.13/frida-gadget-14.2.13-ios-universal.dylib.xz

并重命名后放到指定目录即可。

其他 CPU 请自测。

手动提取砸壳后的 ipa 文件

端口数据转发,也可以用其他同类工具,比如 tcprelay.py :

iproxy 2222 22

列出应用列表:

~ dump.py -l
 PID  Name                 Identifier
----  -------------------  ---------------------------------
6949  QQ                   com.tencent.mqq
7636  QQ安全中心               com.tencent.QQ-Mobile-Token-2-0
6880  微信                   com.tencent.xin
7635  支付宝                  com.alipay.iphoneclient
7639  笔趣阁                  com.yingxiong.bense.fqhyxs
7637  美团                   com.meituan.imeituan

提取脱壳后的 ipa 文件到终端当前目录:
dump.py APP包名

自动提取砸壳后的 ipa 文件

也需要端口数据转发:

iproxy 2222 22

打开 Xcode ,创建 MonkeyApp 工程,在 Target App 输入要砸壳提取的APP的包名:

在 Xcode 的 Signing & Capabilities 下配置签名,运行项目到越狱后的手机上。如果没有发生任何错误,则会自动砸壳并提取 .app 文件到项目中的 TargetApp 目录下,并运行到手机上。

这里最容易遇到的问题就是编译报错 ImportError: No module named frida ,这是因为我们安装 frida 和执行 /opt/MonkeyDev/bin/dump.py 脚本使用的 python 版本不同导致的。

我们可以修改 /opt/MonkeyDev/Tools/pack.sh 文件里的 90 行,指定我们自己安装的 python,我的 python 路径是 ~/.pyenv/shims/python

PYTHONIOENCODING=utf-8 ~/.pyenv/shims/python ${MONKEYDEV_PATH}/bin/dump.py ${MONKEYDEV_TARGET_APP} -o "${TARGET_APP_PUT_PATH}/TargetApp.ipa" || panic 1 "dump.py error"

常见错误

1.用 flexdecrypt 脱壳后,导入 MonkeyApp 工程中,提示下面错误,用 frida-ios-dump 提取的正常,目前还不清楚具体原因:

↑↑↑ This file is encrypted! please use https://github.com/AloneMonkey/frida-ios-dump to decrypt! ↑↑↑

2.Logos Tweak 工程编译报错。在 Xcode 的 Build Settings 里添加 User-DefinedCODE_SIGNING_ALLOWED=NObitcode 设置为 NO

An empty identity is not valid when signing a binary for the product type 'Dynamic Library'.

3.Logos Tweak 工程首次编译报错。需要先在终端登录一次:ssh -p 2222 root@127.0.0.1

Host key verification failed.
ssh -p2222 root@127.0.0.1 mkdir -p "/var/root/MonkeyDevPackages"

4.MonkeyApp 报错 No module named 'frida',修改 /opt/MonkeyDev/Tools/pack.sh 第90行,指定 python 为自己安装的版本。

PYTHONIOENCODING=utf-8 ~/.pyenv/shims/python ${MONKEYDEV_PATH}/bin/dump.py ${MONKEYDEV_TARGET_APP} -o "${TARGET_APP_PUT_PATH}/TargetApp.ipa" || panic 1 "dump.py error"