Frida-iOS-dump无法安装在Catalina的解决方案

原理很简单:
Python.framework -> /System/Volumes/Data/System/Library/FrameworksStash/Python.framework

Catalina启动的时候挂载顺序如下

/dev/disk2s6 on / (apfs, local, read-only, journaled)
/dev/disk2s2 on /System/Volumes/Data (apfs, local, journaled, nobrowse)

Catalina恢复模式挂载如下

/dev/disk2s6 on /Volumes/macOS
/dev/disk2s2 on /Volumes/macOS\ -\ Data

Solution: 进入恢复模式或者从U盘启动,开个终端进uid0

#创建临时文件夹
mkdir -p /System/Volumes/Data/System/Library/FrameworksStash/Python.framework
#移动这个framework到数据分区
mv /System/Library/Frameworks/Python.framework\
⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ /Volumes/macOS\ - \ Data/System/Library/FrameworksStash/Python.framework
#链接framework到临时文件夹也就是启动以后会挂载的目标文件夹
ln -s /System/Volumes/Data/System/Library/FrameworksStash/Python.framework
⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠ ⁠/System/Library/Frameworks/Python.framework
#删除临时文件夹防止挂载冲突
rm -rf /System/Volumes/Data/System/Library/FrameworksStash/Python.framework

然后再按照标准过程安装就不会有问题了,安装完成记得修改一下访问权限 如果后续再出现No module named的话可以考虑指定python版本


11

2 Likes

@AloneMonkey 你可以考虑GitHub啥地方贴一下问这个问题的娃挺多的

收下了 谢谢

建议题主不要这样做去影响 macOS 自带的 Python 环境。对目前大家入门时,普遍遇到的 Python 找不到模块的问题,建议看一下这边。

环境:

  • macOS Catalina 10.15.1
  • Xcode 11.2
  • 测试设备:iPhone 7 (iOS 12.4)

复现方法:

  1. 安装 theos 和 MonkeyDev
  2. 新建 MonkeyApp 项目
  3. 在 Xcode 11.x 或 macOS Catalina 下直接运行 MonkeyApp 出现错误 No module named 'frida'。同理 paramiko 也会出现这样的问题。

解决步骤:

  1. dump.py 中加入 print(sys.path) 可知,Xcode 11.x 和 macOS Catalina 均自带 Python 3.7(以前的版本自带 Python 2.7,官方文档参考这里),Xcode 在 Run Script Phase 中会设置环境变量,导致 /opt/MonkeyDev/Tools/pack.sh 使用 Xcode 自带的 Python 运行 dump.py,因此找不到安装的 frida-tools
pulling decrypted ipa from jailbreak device.......
['/opt/MonkeyDev/bin', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Users/Darwin/Library/Python/3.7/lib/python/site-packages', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages']
Traceback (most recent call last):
  File "/opt/MonkeyDev/bin/dump.py", line 10, in <module>
    import frida
ModuleNotFoundError: No module named 'frida'
dump.py error
Command PhaseScriptExecution failed with a nonzero exit code
  1. 我们在 macOS Python 开发时,一般不要去动 macOS 自带的 Python 环境。你应该先用使用 Homebrew 安装 python3(默认):
> brew install python
> brew link python

# 确认 python3 路径
> which python3
/usr/local/bin/python3
  1. Homebrew 所安装的 Python 环境中安装 frida-tools,安装到了 /usr/local/lib/python3.7/site-packages
> python3 -m pip install frida-tools
Requirement already satisfied: frida-tools in /usr/local/lib/python3.7/site-packages (3.0.1)
Requirement already satisfied: pygments<3.0.0,>=2.0.2 in /usr/local/lib/python3.7/site-packages (from frida-tools) (2.4.2)
Requirement already satisfied: frida<13.0.0,>=12.6.17 in /usr/local/lib/python3.7/site-packages (from frida-tools) (12.6.18)
Requirement already satisfied: prompt-toolkit<3.0.0,>=2.0.0 in /usr/local/lib/python3.7/site-packages (from frida-tools) (2.0.9)
Requirement already satisfied: colorama<1.0.0,>=0.2.7 in /usr/local/lib/python3.7/site-packages (from frida-tools) (0.4.1)
Requirement already satisfied: six>=1.9.0 in ./Library/Python/3.7/lib/python/site-packages (from prompt-toolkit<3.0.0,>=2.0.0->frida-tools) (1.12.0)
Requirement already satisfied: wcwidth in /usr/local/lib/python3.7/site-packages (from prompt-toolkit<3.0.0,>=2.0.0->frida-tools) (0.1.7)
  1. 鉴于 Xcode 自带的 Python 和我们在 Homebrew 中安装的 Python 版本一致,所以最后在你的 MonkeyApp 的两个 Run Script Phase 分别设置一下 PYTHONPATH 环境变量即可:
export PYTHONPATH="/usr/local/lib/python3.7/site-packages:$PYTHONPATH"
/opt/MonkeyDev/Tools/pack.sh

目前 MonkeyDev 和 theos 安装到 /opt/theos 并且需要 sudo 加持 root 权限,其实是作者偷了个懒。目前看来,应该是类似 virtualenv 的做法,提供一个虚拟依赖环境,比鲁莽地去 sudo 加持 root 权限,甚至关闭 SIP 去篡改系统来得更加优雅和稳妥。

1 Like

我不否认虚拟环境会更加安全但是

Stash 一个路径并没有关闭SIP也没有关闭文件系统快照
Stash 是iOS采用APFS之前在越狱下普遍使用的可靠解决方案 除非你魔改系统文件权限

最后能偷懒为啥不偷懒~

使用pyenv,一直没遇到楼主的问题啊

推荐 https://github.com/pyenv/pyenv


使用方法:
brew install pyenv
然后修改下.zshrc

以后就随便玩耍了,
pyenv install 2.7.10
pyenv install 3.x.x
pyenv global xxx
pyenv local xxx

这几个命令就足够了


似乎我又可以水一篇文章了

2 Likes