iOS砸壳
一、iOS砸壳思路
APP上架会经历 APP->AppStore->源码
加密过程。
应用加密:开发者向AppStore
提交应用,都将由苹果官方进行加密处理,以确保用户使用的APP
都是经过审核过的,加密后的APP
,开发人员无法通过Hopper
等反编译应用,也无法使用class-dump
。
应用加密:开发者向AppStore
提交应用,都将由苹果官方进行加密处理,以确保用户使用的APP
都是经过审核过的,加密后的APP
,开发人员无法通过Hopper
等反编译应用,也无法使用class-dump
。
应用运行:应用在磁盘中是加密状态,由于CPU
运行不会识别加密文件,因此在启动应用前需要在内核中对加密应用文件进行解密,提取可执行文件才可放入内存中运行。流程如下:
逆向需要对加密的二进制文件进行解密才可以做静态分析,解密过程即为砸壳。砸壳有两种:
1、静态砸壳 在已经掌握和了解加密应用的加密算法和逻辑后在不运行加密应用程序的前提下将壳应用程序进行解密处理,静态砸壳方法难度大,并且加密方发现应用被破解后就可能会改用更高级的复杂加密算法。
2、动态砸壳 在运行进程内存中的可执行程序映像入手,将内存中的内容进行转储处理来实现砸壳。该方法相对简单,并且不用关心应用所使用的加密技术。
砸壳工具有很多,下面只介绍使用frida-ios-dump
工具砸壳的配置流程。
二、frida配置与使用
原理:通过注入js
实现内存dump
,再由Python
自动拷贝到电脑生成ipa
包。
创建dump
文件夹,移动到opt/dump
目录下,修改dump.py
中的user、password、host、port
如下:
1 | User = 'root' |
三、越狱手机配置
1、打开cydia
添加源:http://build.frida.re
并在搜索中下载安装frida
。
2、安装完成后在Mac
端执行frida-ps -U
查看是否可以工作。
四、Mac配置
1、安装Python
:
1 | brew install python |
2、安装wget
1 | brew install wget |
3、安装pip
:
1 | wget https://bootstrap.pypa.io/get-pip.py |
4、安装frida
1 | sudo pip install frida –upgrade –ignore-installed six |
5、安装脚本依赖环境
1 | sudo pip install -r requirements.txt --upgrade |
6、安装usbmuxd
与手机通信
1 | brew install usbmuxd |
7、设置别名,设置后可以在任意路径下使用别名执行
1 | vim ~/.bash_profile |
在尾部添加如下:
1 | alias dump.py="/opt/dump/frida-ios-dump-master/dump.py" |
执行代码使生效
1 | source ~/.bash_profile |
8、通过USB
使用ssh
连接设备,将22
映射到电脑上的2222端口
1 | iproxy 2222 22 |
9、另开终端加入连接 密码为设备的登录密码alpine
,需要保持连接
1 | ssh -p 2222 root@127.0.0.1 |
10、再开终端开始砸壳微信,命令如下:dump.py
微信
脚本会将破壳后的ipa
包获取到当前路径,在哪个路径执行将会获取到哪个路径。
端口映射:
连接设备:
开始砸壳:
五、开发中遇到的问题
1、报错信息
1 | Caught exception: <class 'paramiko.ssh_exception.SSHException'>: Error reading SSH protocol banner[Errno 54] Connection reset by peer |
打开微信或重新插入USB接口,在执行以上命令即可。
2、报错信息
1 | ERROR: frida-tools 7.2.0 has requirement prompt-toolkit<4.0.0,>=3.0.3, but you'll have prompt-toolkit 2.0.10 which is incompatible |
解决:
1 | cd /opt/dump/frida-ios-dump |
再执行
1 | sudo pip install -r requirements.txt --ignore-installed six |
修改完成。
3、dump.py 微信
执行报错
1 | need gadget to attach; its default location is: /Users/hibo/.cache/frida/gadget-ios.dylib |
解决:
在越狱手机Cydia应用
中选择相应的Frida
安装包,如:iPhone6s(11.4.1)
选择Frida for pre-A12 devices
4、iproxy 2222 22
执行报错
1 | dyld: Library not loaded: /usr/local/opt/libplist/lib/libplist.3.dylib |
注意更新插:
执行:brew install usbmuxd
提示:libusbmuxd 2.0.1 is already installed To upgrade to 2.0.2, run brew upgrade libusbmuxd
执行:brew upgrade libusbmuxd
即可解决
5、缺少库
如:ModuleNotFoundError: No module named 'paramiko'
、ModuleNotFoundError: No module named 'scp'
解决:
重新安装:pip install paramiko
、pip install scp
,缺少什么安装即可
6、TypeError: can’t concat str to bytes
不能将字节类型值赋值给str类型的变量,需要将字节逆编码后再赋值。
解决: /opt/dump/frida-ios-dump-master/dump.py
文件中将if IS_PY2
修改为if IS_PY2 or isinstance(baseName, bytes)
,判断baseName是否为字节类型(进行逆编码)
1 | def progress(filename, size, sent): |
7、unable to attach to the specified process
手机iPhone6s
,14.4
。dump
报错如下:
1 | desktop dump.py 微信 |
解决:
打开Cydia
应用,搜索Frida
选择Frida for 32-bit devices
安装后,重新dump
即可。