一.为什么要脱壳别人的APP
1.:我们从App Store下载的应用,是有Apple进行了FairPlayDRM数字版权加密了的。
2.:作为从事app开发的人员,如果我们看到其他人的APP某个不错的效果想看看他们是怎么实现的,或者我们想看看它使用了那些第三方,或者甚至我们想要编写插件,例如去广告,变会员等等。我们就需要探索它的UI层级,使用类的类名和方法,代码编写的逻辑等等。而这些工作我们需要借助一些工具,这些工具几乎都是基于这个APP要被脱壳。
二.怎么查看自己手机上有哪些APP是脱壳的和未脱壳的
1.需要用Cydia安装下面这插件,越狱完手机一般默认已经安装了这个插件
使用电脑通过usb连接我们的手机,在终端执行
ps -A
会输出我们手机上安装的app,因为打印很多,这里只截取了部分
可以使用
ps -A | grep 你猜猜的应用的名字
例如你想看微信 你可以输入 weChat 试试,我瞎猜的 。 这样打印会少一些,方便查找。在输入里有应用在你手机文件系统里的路径,例如/var/mobile/containers/Bundle/Application/.... 。使用iFunBox将app的文件,拖到电脑上然后找到APP的可执行文件.
2.查看是否脱壳,可以使用MachOView软件和命令行查看。
MachOView查看如图
Crypt ID为1表示加壳了,为0表示未加壳.
命令行查看看使用otool -l 可执行文件 | grep crypt,如下也可以看到cryptid
otool -l 可执行文件 | grep crypt
cryptoff 16384
cryptsize 49152
cryptid 0
三.脱壳被人的APP
给APP脱壳,一般我们使用如下工具
- Clutch (iOS11以下的可以使用)
- dumpdecrypted (iOS11以下的可以使用)
- bfinject (iOS11~iOS11.2可以使用)
- CrackerXI (iOS11~iOS13可以使用)
- Frida
- ............
工具有很多,下面介绍Clutch和 CrackerXI,Frida吧
1.Clutch脱壳
这是一个全自动脱壳工具,原理是把应用运行时的内存数据按照一定格式导出,重新打包成ipa。Clutch下载地址https://github.com/KJCracks/Clutch。下载下来后,使用iFunBox打开手机目录,将Clutch文件移动到手机的Device/usr/bin 目录下,目的是为了,连接手机的时候,可以执行Clutch命令来进行脱壳
然后在mac连接我们的iPhone,执行Clutch看看有什么命令可以让我们使用,如果你遇见下面,提示权限不足
那就需要我们给文件赋予权限,执行命令:
chmod +x /usr/bin/Clutch
让后再执行Clutch,就可以看看有哪些命令了
可以看到上图,Clutch可以执行以上命令。我们使用上图一个命令:Clutch -i。查看下自己手机上有哪些app
可以看到我手机上,有12个应用可以被脱壳。比如我们使用
Clutch -d 12
//注:12表示的就是上图的最后一个应用:微软翻译,12可以用:com.microsoft.translator替代
当打印出现下面两行打印,即表示脱壳成功,且第一行表示了脱口后保存的ipa的目录
DONE:/private/var/mobile/Documents/Dumped/com.microsoft.translator.xxx.ipa
Finished dumping com.microsoft.translator in 15.1 seconds
注:犹豫大部分人手机都是iOS13了,所有dumpdecrypted和bfinject就不演示了。而CrackerXi是可以脱壳在iOS13系统上脱壳应用的
2.CrackerXi
在cydia中添加 源地址http://cydia.iphonecake.com。当添加源完成后,手机桌面会出现一个CracherXi应用,如果没有出现。点击刚刚安装的软件源->全部安装包->CrackerXi+ ->安装,如图
然后打开CracherXi,在setting如下图打开开关,然后在AppList选择你要脱壳的应用,然后选择YES,Full IPA。如图:
脱壳后的文件在/var/mobile/Documents/CrackerXI
下的一个.ipa,使用IFunBox打开找到目录,拖出来即可.如图脱壳的Translator应用
3.Frida脱壳
Frida的安装需要在手机端和Mac端都需要安装,注意:让手机端安装的Frida版本与Mac安装的Frida版本一致
ios手机端配置
- 手机端cydia 添加源:
https://build.frida.re
- 搜索Frida,进行安装
- 安装成功验证
iPhone:~ root# ps -ax | grep frida
409 ?? 0:00.89 /usr/sbin/frida-server
2050 ttys000 0:00.01 grep frida
ps -ax | grep frida 为执行命令,看到如上打印即可
Mac端
我们需要安装python ,pip ,frida ,frida-tools。由于Mac自带的Python版本为2.7.x.不建议使用了,因此我安装了Python3.7.7版本。按照如下安装
- brew install python //安装python
- brew install wget //安装wget
- wget https://bootstrap.pypa.io/get-pip.py
- sudo python3 get-pip.py //3和4安装wget
- sudo pip3 install frida //安装frida
- sudo pip3 install frida-tools //安装frida
配置frida-ios-dump环境
- 从github下载代码命令: sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump
- 根据必须插件文档equirements.txt安装依赖 :sudo pip3 install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade
- 修改/opt/dump/frida-ios-dump/dump.py 文件的32行那里,关于mac端连接iPhone端的信息:账号,地址,端口。例如
使用Frida脱壳app
在 /opt/dump/frida-ios-dump 目录下有个dump.py文件,最终我们要执行这个python文件里的代码来脱壳我们的app。
在mac连接我们的app,然后使用Clutch -i查看手机上的app,如图
Frida可以使用应用名或者BundleID来进行脱壳,例如我们对com.zol.priceApp应用进行脱壳,进入 /opt/dump/frida-ios-dump 目录,执行如下命令
python3 dump.py com.zol.priceApp -o /Users/用户名/Desktop/te/zol.ipa
然后就会在te文件下,得到一个zol.ipa。我们解压这个ipa拷贝出可执行文件ZolSoft。然后通过命令:
otool -l ZolSoft | grep crypt //查看cryptid
或者使用MachOView查看ZolSoft,如图成功脱壳