Xcode 编译报 No module named 'frida'

运行环境:macOS Big Sur + Xcode 12.4 + iOS 14.0

在 Xcode 中编译 MonkeyApp 工程,提取 ipa 报错:

pulling decrypted ipa from jailbreak device.......
Traceback (most recent call last):
  File "/opt/MonkeyDev/bin/dump.py", line 9, in <module>
    import frida
ModuleNotFoundError: No module named 'frida'
dump.py error
Command PhaseScriptExecution failed with a nonzero exit code

我直接在终端运行这个脚本正常:

 ~ /opt/MonkeyDev/bin/dump.py
usage: dump.py [-h] [-l] [-o OUTPUT_IPA] [target]

frida-ios-dump (by AloneMonkey v2.0)

positional arguments:
  target                Bundle identifier or display name of the target app

optional arguments:
  -h, --help            show this help message and exit
  -l, --list            List the installed apps
  -o OUTPUT_IPA, --output OUTPUT_IPA
                        Specify name of the decrypted IPA

我越狱机上已经安装了 Frida 插件,测试正常:

~ frida-ps -U
 PID  Name
----  -----------------------------------------------
4547  Cydia
5922  InCallService
4545  QQ
4476  ReProvision
4006  Siri搜索

别名也设置了,在终端测试正常:

# Python
alias python2='/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7'
alias python3='/usr/local/Cellar/python@3.9/3.9.1_8/bin/python3.9'
alias python=python3

# pip
alias pip='/usr/local/Cellar/python@3.9/3.9.1_8/bin/pip3'

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

frida-ios-dump 我也是拉的 3.x 分支安装的。

requirements.txt install一下

sudo pip install -r requirements.txt --upgrade

我之前安装的时候执行过这个命令,刚我又重新执行了一次。然后在Xcode里编译正常提取了我指定的MONKEYDEV_TARGET_APP的ipa包,我以为这样就是解决了。

然后我删掉提取的包,想再测试提取一次。我删掉再次编译,结果又报错了:

pulling decrypted ipa from jailbreak device.......
Traceback (most recent call last):
  File "/opt/MonkeyDev/bin/dump.py", line 9, in <module>
    import frida
ModuleNotFoundError: No module named 'frida'
dump.py error

我发现我2台 macOS big sur 里都默认有安装 python3,我用系统自带的 python3 执行 dump.py 脚本也是报错,我猜测 Xcode 默认就是这样执行的:

/usr/bin/python3 -V
Python 3.8.2

/usr/bin/python3 /opt/MonkeyDev/bin/dump.py
Traceback (most recent call last):
  File "/opt/MonkeyDev/bin/dump.py", line 9, in <module>
    import frida
ModuleNotFoundError: No module named 'frida'
系统自带的 3.8.2 版本的 python 不能执行脚本,我自己安装的一样的版本又可以:

➜  ~ /usr/bin/python3 -V
Python 3.8.2
➜  ~ /usr/bin/python3 /opt/MonkeyDev/bin/dump.py
Traceback (most recent call last):
  File "/opt/MonkeyDev/bin/dump.py", line 9, in <module>
    import frida
ModuleNotFoundError: No module named 'frida'
➜  ~ python -V
Python 3.8.2
➜  ~ python /opt/MonkeyDev/bin/dump.py
usage: dump.py [-h] [-l] [-o OUTPUT_IPA] [target]

frida-ios-dump (by AloneMonkey v2.0)

positional arguments:
  target                Bundle identifier or display name of the target app

optional arguments:
  -h, --help            show this help message and exit
  -l, --list            List the installed apps
  -o OUTPUT_IPA, --output OUTPUT_IPA
                        Specify name of the decrypted IPA

我已经解决,谢谢大家。
修改 /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"

我的 python 路径是 ~/.pyenv/shims/python ,改成你自己的。这样就能保证 xcode 编译的时候,执行这个脚本使用的是你自己安装的 python 版本。