iOS
端APP
在上线之前,会经过苹果商店进行FairPlayDRM
数字版本加密保护,俗称 “加壳”,如果想对应用进行分析,就必须进行 “脱壳”,从而得到未加密的二进制文件
一、检测是否加壳
介绍两个常用的方式
1、使用 otool
检测
执行如下命令
otool -l Twitter | grep crypt
在得到的结果中,如果 cryptid
的值为 1
,则说明已加壳,如果为 0
则说明未加壳
2、使用 MachOView
检测
使用 MachOView
打开目标文件后,展开 Load Commands
找到 LC_ENCRYPTION_INFO_64
,右侧可以看到 Crypt ID
,同上,1
为已加壳,0
为未加壳
二、脱壳
以下罗列常用的脱壳工具,推荐度从上到下依次递减
1、CrackerXI
CrackerXI
的安装和使用都较为简单,是目前为止最为傻瓜式的脱壳工具
在 Cydia
中添加源地址 http://cydia.iphonecake.com/
,添加完成后搜索 CrackerXI
,找到后安装即可。
在进行脱壳前,需要进入 Settings
页面进行配置,配置如下图所示
切回 AppList
页面,点击需要脱壳的 App
,在弹出的对话框中选择 YES,Full IPA
即可。
2、Clutch
https://github.com/KJCracks/Clutch
在 Release
页面找到最新版本的可执行文件,下载后改名为 Clutch
,执行下方命令,将 Cluth
文件复制到 iOS
设备的 /usr/bin
目录下
scp -P 2222 -r ./Clutch root@localhost:/usr/bin/
登录到 iOS
设备,给 Cluth
文件添加执行权限
lxf-iPad:~ root# chmod +x /usr/bin/Clutch
至于怎么通过端口 2222
就可以从 Mac
上传输给 iOS
设备,以及如何登录到 iOS
设备,请查看本人的另一篇文章:Mac远程登录到iOS设备
执行 Clutch
可查看帮助信息
lxf-iPad:~ root# Clutch
Usage: Clutch [OPTIONS]
-b --binary-dump <value> Only dump binary files from specified bundleID
-d --dump <value> Dump specified bundleID into .ipa file
-i --print-installed Print installed applications
--clean Clean /var/tmp/clutch directory
--version Display version and exit
-? --help Display this help and exit
-n --no-color Print with colors disabled
-i
参数可以打印从 AppStore
上下载安装的 App
lxf-iPad:~ root# Clutch -i
Installed apps:
1: Twitter <com.atebits.Tweetie2>
...
-d
参数可以进行脱壳,这里以 Twitter
为例
Clutch -d com.atebits.Tweetie2
脱壳后的 ipa
文件会存放至 /private/var/mobile/Documents/Dumped/
目录下
3、dumpdecrypted
https://github.com/stefanesser/dumpdecrypted
下载源码,在 dumpdecrypted
目录下执行 make
命令编译生成 dumpdecrypted.dylib
进入 dumpdecrypted 目录
cd xxx/dumpdecrypted
# 进行编译
make
编译完成后,目录下就有了 dumpdecrypted.dylib
文件
.
├── Makefile
├── README
├── dumpdecrypted.c
├── dumpdecrypted.dylib
└── dumpdecrypted.o
将 dumpdecrypted.dylib
文件复制 iOS
设备
scp -P 2222 -r ./dumpdecrypted.dylib root@localhost:/usr/bin/
使用 ps
命令查看目标文件的完整路径
lxf-iPad:~ root# ps -ax | grep Twitter
15153 ?? 0:00.00 /var/containers/Bundle/Application/3A7C3480-C30B-40D7-A0A4-6C313E42B793/Twitter.app/Twitter
15161 ttys000 0:00.02 grep Twitter
使用 DYLD_INSERT_LIBRARIES
环境变量将 dumpdecrypted.dylib
注入就可以脱壳。
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/3A7C3480-C30B-40D7-A0A4-6C313E42B793/Twitter.app/Twitter
执行完成后会在将脱壳后的文件存放到当前目录下
4、frida-ios-dump
https://github.com/AloneMonkey/frida-ios-dump
下载源码后,安装其 python
脚本所需依赖包
pip install -r requirements.tx
-h
参数查看帮助
python dump.py -h
-l
参数查看本机已应用 App
./dump.py -l
三、取出脱壳文件
1、爱思助手
以 CrackerXI
为例,按此路径便可找到脱壳后的文件
/private/var/mobile/Documents/CrackerXI/
找到后选中目的文件,点击左上角的 导出
按钮,或者右击文件,在弹出的菜单中选中 导出
按钮即可。
2、SCP
scp -P 2222 -r root@localhost:/private/var/mobile/Documents/CrackerXI/Twitter_8.61_LXF.ipa ./
四、验证
正如文章开头所说的,使用 otool
或 MachOView
查看 cryptid
的值,为 0
即为脱壳成功。
原文始发于微信公众号(FSA全栈行动):iOS逆向 – 应用脱壳