iOS(十五)几种App砸壳工具对比
0x0 概述
由于App Store下载的APP全都是经过苹果加密过的ipa包,由于App Store使用Apple ID相关的对称加密算法,因此加密后的ipa包,是无法对其进行反编译的,也无法class-dump,需要对其进行解密才能反编译。
APP程序运行起来都会直接在内存解密出原始代码,所以可以在越狱的设备里面通过内存dump方式提取解密后的程序,这种解密又称为砸壳,以前写过一个blog手工实现了这个工作过程:iOS(九)内存dump应用&手动解密,不过解密之后还需要手动恢复mach-O头信息才能运行。
由于手工解密操作繁琐,所以出现了一些自动化的工具来实现这个过程,常见的解密工具有以下几种:dumpdecrypted、clutch、frida-ios-dump、bfinject。
另外,由于高版本非完美越狱里面,都没有删掉签名验证,所以直接运行都会出现
killed 9
,需要手动签名之后才能使用,详情参考:iOS(十四)高版本越狱的坑 & killed 9。0x1 dumpdecrypted
dumpdecrypted是最早出现也是最基础的砸壳方式,使用稍微复杂,通过手工注入动态dylib库文件方式来实现,绕过方式较多,比如添加编译参数禁用动态加载dylib库(而且dumpdecrypted也已经5年多未曾更新了)。
dumpdecrypted源码地址:https://github.com/stefanesser/dumpdecrypted
0x11 编译dumpdecrypted
由于dumpdecrypted未提供release版本,故需要自行下载编译:
$ git clone https://github.com/stefanesser/dumpdecrypted.git
$ cd dumpdecrypted
$ make
直接make编译得到dumpdecrypted.dylib文件通常都是胖Mach-O结构,导入iOS设备之前需要使用lipo瘦身,并添加签名。
0x12 dumpdecrypted使用方式
- 拷贝进越狱设备
$ scp dumpdecrypted.dylib [email protected]:~/
- 连接设备
$ ssh [email protected]
- 寻找目标App路径
# ps -A ... 7279 ?? 0:00.94 /var/containers/Bundle/Application/C438C976-2657-46F1-83BE-07F2DFBAF5A7/SYHDAppPayProject.app/SYHDAppPayProject ...
- 找出对应APP的documents目录
可以使用cycript:$cycript -p <pid> cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] @[#"file:///var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/"]
- 注入砸壳,需要将dumpdecrypted.dylib拷贝到APP documents目录下执行
砸壳成功后会在目标目录下生成# cp dumpdecrypted.dylib /var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/ # cd /var/mobile/Containers/Data/Application/BB2EB568-851B-42F4-AD1F-B9B4D5295755/Documents/ # DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/C438C976-2657-46F1-83BE-07F2DFBAF5A7/SYHDAppPayProject.app/SYHDAppPayProject
SYHDAppPayProject.decrypted
文件。
0x2 clutch
0x21 clutch简述
clutch是之后出现的全自动化砸壳工具,使用简单方便,但失败率较高,尤其arm64版本问题很多。
0x22 使用clutch
- 下载并编译生成clutch执行文件
- 编译生成的clutch也是胖Mach-O结构,需要瘦身并签名
- 将clutch执行文件拷贝到手机里
scp Clutch [email protected]:/usr/bin
- 查看当前手机程序未砸壳的应用
Clutch -i
- 对列出的正版应用砸壳
使用对应列表号或bundleID进行砸壳Clutch -d <com.diary.mood>
或者Clutch -d 12
0x3 frida-ios-dump
0x31 frida-ios-dump简述
frida-ios-dump是基于frida开发的一键砸壳工具,需要配置frida环境,配置过程较为复杂,且有一定失败率。
frida-ios-dump源码:https://github.com/AloneMonkey/frida-ios-dump
0x32 安装frida
macOS:
$ sudo pip install frida
$ sudo pip install frida-tools
0x33 iOS设备植入frida-server
选择对应firda版本和iOS设备cpu型号的frida-server,如本次为frida-server-12.6.0-ios-arm64.xz
将frida-server拷贝到iOS设备的/usr/bin目录下,并
chmod a+x frida-server
后启动frida-server
(frida-server
已经签名过)0x34 配置frida-ios-dump
执行
sudo pip install -r requirements.txt --upgrade
即可,会自动安装依赖
如果设备上的module版本不对,可以手动指定版本安装,如:
pip install frida==12.6.0 --user
0x35 使用frida-ios-dump砸壳
- usb链接iOS设备
- mac公钥
~/.ssh/id_rsa.pub
导入iOS设备/var/root/.ssh/authorized_keys
- 启动iOS设备上的
frida-server
- 修改frida-ios-dump的
dump.py
文件,指定iOS设备ip、端口、账号名、密码 - 打开目标app
- mac上执行
$ python dump.py -l
查看ios app list - mac上执行
python dump.py [BundleID]
即可一键砸壳
0x4 bfinject
bfinject在CydiaSubstrate不再支持更新之后出现的hook框架,目前只支持iOS 11,最开始主要用于cycript,后来发现里面内置的砸壳工具使用效果不错(成功率比以上三种都高)。使用参考:iOS(十三)使用 bfinject 注入iOS 11_cycript & 砸壳
0 评论:
发表评论