安装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 步骤。如果有安装 xia0LLDB
和 Logos-Xcode11
这样的插件,也需要重装。
Logos代码提示插件
使用 Logos-Xcode
插件可以让 Xcode 支持 Logos 语法高亮和代码补全,但插件作者已经不维护了,插件不兼容当前最新版本 Xcode。找到一份修改好支持 Xcode11 和 Xcode12 的版本,地址:https://github.com/brendonjkding/Logos-Xcode11。
先安装 coreutils
工具,安装完后可以使用 realpath
、grealpath
等:
➜ ~ 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-Defined
,CODE_SIGNING_ALLOWED=NO
,bitcode
设置为 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"