iOS逆向工程(六):使用frida-ios-dump工具,一键脱壳

mac端配置:

brew cleanup

附:使用brew install xxx如果一直卡在Updating Homebrew… 可以control + z结束当前进程再新开一个终端安装此时可以跳过更新


  • ②安装python3: brew install python3或者brew reinstall python@3.*
  • 升级pip: sudo -H pip3 install --upgrade pip
  • 安装wget: brew install wget
  • 安装点:
    • wget https://bootstrap.pypa.io/get-pip.py
    • sudo python3 get-pip.py

方法二:Mac使用HomeBrew安装Python3.*并设为默认版本

方法一:升级最新版系统后使用系统自带的python3
升级到Mac 10.15后,安装最新版的Xcode,系统中有Python3,只需要创建软连接将/usr/local/bin/python指向系统的python3即可,其实/usr/bin/python3使用的是Xcode中的python(/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.*/Resources/Python.app/Contents/MacOS/Python)

ln -s /usr/bin/python3 /usr/local/bin/python
ln -s /usr/bin/pip3 /usr/local/bin/pip
ls -al /usr/local/bin/pip

lrwxr-xr-x 1 wood admin 13 12 24 18:15 /usr/local/bin/pip -> /usr/bin/pip3

ls -al /usr/local/bin/python

lrwxr-xr-x 1 wood admin 16 12 24 18:14 /usr/local/bin/python -> /usr/bin/python3


Mac安全地升级Python3,不会删除Mac自带的Python2.x,homebrew安装新版本Python后,通过软连接来设置python访问的是python3。
Mac自带的python是2.7.x,这个太老了在运行python命令时会提示建议用python3,下面介绍两种方式安全地升级python3。

Mac升级Python3

mac删除自己安装的python3.8


(相关知识拓展)
/usr/bin 下面的都是系统预装的可执行程序,会随着系统升级而改变。
/usr/local/bin 目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。
如果两个目录下有相同的可执行程序,谁优先执行受到PATH环境变量的影响,比如我的一台服务器的PATH变量为。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

可以看到 /usr/local/bin 是优先 /usr/bin 的,所以如果which python出现多个选项,则会受PATH的影响。



  1. frida-ios-dump是基于frida的,所以先要在手机和电脑上安装frida,命令如下:(注意,手机和电脑上的frida的版本需要保持一致)

Mac上安装frida的命令:

pip3 install frida
pip3 install frida-tools

升级frida

pip3 install -U frida
pip3 install -U frida-tools

对应的服务终端可以在这下载

iPhone上安装frida的方法:
打开Cydia->软件源->编辑->添加,输入build.frida.re,添加软件源后,搜索安装Frida即可(iPhone 7 ↑ 对应的是Frida for pre-A12 derices)

  • 在越狱手机和mac开发机都安装了frida之后,需要保持版本号一致,否则会出现:
    Failed to enumerate applications: unable to communicate with remote frida-server;

测试方法①
在mac开发机上查看版本号:

$ frida --version

在越狱手机查看版本号:

iPhone-7:~ root# frida-server --version

测试方法② A quick smoke-test
Now, back on your Windows or macOS system it’s time to make sure the basics are working. Run:

$ frida-ps -U

配置frida-ios-dump环境:
从Github下载工程:

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

安装依赖:

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

修改dump.py参数:
vim /opt/dump/frida-ios-dump/dump.py
找到如下几行(32〜35 ):
User = 'root'
Password = 'alpine'
Host = 'localhost'
Port = 2222

按需修改 如把Password 改成自己的
ps:如果不习惯vim 用访达打开/opt/dump/frida-ios-dump/dump.py手动编辑。

设置别名:
在终端输入:

vim ~/.bash_profile

在末尾添加以下一段:
alias dump.py="/opt/dump/frida-ios-dump/dump.py"
注意:以上的/ opt / dump可以按需更改。
使别名生效:

source ~/.bash_profile

砸壳演示

步骤:
iOS 设备,USB 连接电脑。
打开Mac终端,输入

$ iproxy 2222 22

把当前连接设备的22端口(SSH端口),映射到电脑的2222端口。

新建终端页面,输入

$ ssh -p 2222 root@127.0.0.1

连接iOS设备。密码默认是:alpine

手机上打开你要脱壳的应用(打开皮皮虾)
新建终端窗口 cd 到frida-ios-dump-master目录下(/opt/dump/frida-ios-dump)执行

$ python3 ./dump.py -l

可以查看项目的bundle id.

然后执行

$ python3 ./dump.py 应用名或者bundle id 开始砸壳

脱壳成功后,在./dump.py所在目录里或者用户目录就会有脱过壳的.ipa了.

注意:

  • 由于通过SSH的方式连接手机,所以请先确保已将公共密钥添加到目标设备的〜/ .ssh / authorized_keys文件中,具体方法请看iOS逆向工程(二):Mac远程登录iPhone

  • 如果运行./dump.py命令后,手机出现了崩溃重启,可以这样解决:从frida-releases下载相应版本的frida-server,替换手机里 /usr/sbin/frida-server文件,重启手机,再越狱,就可以修复。

  • 如果发生了设备重启、失去了连接等错误,尝试在./dump.py之前打开要脱壳的App

  • 请确保你要脱壳的App是从AppStore下载的App,否则可能会出现莫名其妙的卡住不动

  • Generating "皮皮虾.ipa"
    zip I/O error: Permission denied
    zip error: Could not create output file (/opt/dump/frida-ios-dump/皮皮虾.ipa)
    Command '('zip', '-qr', '/opt/dump/frida-ios-dump/皮皮虾.ipa', './Payload')' returned non-zero exit status 15.
    ------文件夹权限不够,升级权限.
    sudo chmod -R 777 opt

验证

判断是否脱壳成功:
1.使用mach-o工具查看
load-command/LC-Encryption_INFO/cryptid的值,
0代表未加密,非0代表加密.

2.使用otool命令,
xxx:~ gn$ otool -l Super | grep crypt
cryptoff 55992320
cryptsize 4096
cryptid 0

通过frida-ios-dump砸壳后的ipa无论是内置动态库的还是有extension扩展的都能正常重打包运行。亲自测试过,对应用进行重签名后,可以正常安装到相关型号的手机上面

推荐阅读更多精彩内容