iOS 逆向工程(十三)之加壳与脱壳/砸壳
加壳:利用特殊算法,对可执行文件的编码进行改变(压缩、加密),达到保护程序代码的目的
脱壳:去掉壳程序,将未加密的可执行文件还原出来,或者称砸壳
脱壳方式:硬脱壳、动态脱壳
脱壳工具:Clutch(弃用)、dumpdecrypted(弃用)、frida、crakerx、flexdecrypt、bagbak
手机安装App的ipa文件位置:/var/containers/Bundle/Application/
判断是否加密: otool -l Mach-O文件名 | grep crypt
flexdecrypt安装:
下载地址:https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb
安装方式一:
1.下载flexdecrypt.deb文件;
2.将flexdecrypt.deb 拷贝到手机的 /var/root/Media/Cydia/AutoInstall目录;
3.在手机上通过Filza资源管理工具定位到 /var/root/Media/Cydia/AutoInstall ,点击安装;
4.远程登录iPhone5s,输入 killall SpringBoard (重启手机桌面)回车;
5.登录手机终端条件下,输入 flexdecrypt 回车;
安装方式二:
1.登录手机终端后,直接输入 wget https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb
2.输入安装指令 dpkg -i flexdecrypt.deb 回车;
脱壳/砸壳操作:
1.登录iPhone5s后,输入 ps -A 回车,寻找要脱壳的的软件;
2.输入指令 flexdecrypt /var/containers/Bundle/Application/1EB14B56-6B19-442F-8289-A7A5D8290E5E/MobileMail.app/MobileMail 回车;
3.将 /tmp/MobileMail 路径下的 MobileMail 拷贝到Mac 工作文件夹, 用Hopper Disassembler 查看脱壳后的Mach-O文件
a.在Mac终端输入 scp -P 10010 root@localhost:"/tmp/MobileMail" ~/Desktop/jail_work 回车
b.Hopper Disassembler 查看Mach-O文件
Tips:不是所有的App都能使用flexdecrypt脱壳:WeChat、Aweme、唱吧脱壳失败,后续查找原因
另一种脱壳方式:frida-ios-dump
涉及设备:MacBook、iPhone5s(越狱,A7处理器,ARM64)
下载地址:https://github.com/AloneMonkey/frida-ios-dump
安装步骤:
iPhone端准备:
1.打开Cydia 【软件源】-->【编辑】-->【添加】,输入 https://build.frida.re 完成;
2.在软件源下,点击 【bulid.frida.re 】-->【全部软件包(或者开发)】选择 【Frida for pre-A12 devices】(根据手机CPU型号选择,5s是A7小于A12) 安装;
3.安装完成后,在Mac终端登录iPhone端,输入 killall SpringBoard (重启手机桌面)回车
注意:不需要在手机终端输入frida-ps -U ,会报 -sh: frida-ps: command not found 错误,frida-ps -U 检查安装成功指令是在Mac终端使用的
Mac端准备:
1.在终端输入 sudo pip install frida 回车,安装完成后输入 frida-ps -U 回车检测;
2.下载 frida-ios-dump 到 /opt/dump/ 文件夹下,输入 sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump 回车;
3.添加firda-ios-dump 的依赖,输入 sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade 回车;
4.修改 dump.py 的iPhone端关于USB端口号(22)映射到Mac端的端口(10010)和登录用户名及密码,输入 vim /opt/dump/frida-ios-dump/dump.py 回车;
5.设置指令别名;
a.在终端输入 vim ~/.bash_profile 回车;
b.在 alias python 下面添加 alias dump.py="/opt/dump/frida-ios-dump/dump.py”,按 “:”键后 输入 wq 回车;
c.生效配置文件,输入 source ~/.bash_profile 回车
注意:在设置指令别名的时候,由于我的bash_profile 文件是指向python3版本,所以在使用dump.py 指令的时候会报 ModuleNotFoundError: No module named 'frida' 错,python3 版本下 dump.py 依赖frida出了点问题(默认安装的是python2 版本的frida), 解决思路有两种:a.重新配置bash_profile 文件的Python 执行版本路径,b.使用python2 来执行dump.py
报错:
脱壳/砸壳操作:
1.在Mac终端输入 cd /opt/dump/frida-ios-dump/ 回车;
2.打开iPhone上需要脱壳的程序;
3.在终端输入 python2 dump.py 【App Name】回车
Hopper Disassembler 查看Mach-O文件:
注意:由于 frida-ios-dump 文件夹是readonly 属性,在脱壳后会报 zip I/O error: Permission denied 错误
Permission denied解决方式:
1.将 /opt/dump/frida-ios-dump/ 下文件 dump.py 的内容拷贝一份出来,新建一个dump.py文件并粘贴拷贝的内容;
2.新建一个保存路径放在43行后,内容为 SAVE_PATH = os.path.join(os.path.expanduser("~"), 'Desktop') 将存储路径指向桌面;
3.修改生成ipa文件的路径为SAVE_PATH;
4.将新建的dump.py文件替换 /opt/dump/frida-ios-dump/ 下的dump.py文件