frida一键砸壳

前两天重新给我的 iOS12 设备越狱,然后砸壳和反编译一个应用,结果又是ps命令出错、又是cycript命令出错,到处查资料,折腾了好久。后来发现竟然有一键砸壳的工具frida,这里含泪记录下来整个砸壳的流程~

纲目

frida官网:https://www.frida.re/docs/home/

1.iOS设备配置

1.1.越狱

我的设备是 iOS12.1,所以使用目前最新的越狱工具uncc0ver,版本号v3.0.3~b48,可以到 这里 下载。下载完成后启动unc0ver,点击jailbreak即可自动完成越狱并安装 Cydia 商店。

1.2.frida插件

在 Cydia 中添加”https://build.frida.re" 源并安装frida插件。

2.Mac配置

2.1.usbmuxd

通常情况下,我们调试越狱设备时会用到ssh远程登录设备,它依赖于 TCP 连接。而usbmuxd则用usb(数据线)连接代替了ssh连接,将 iOS 设备端口映射到 Mac 本地端口,使得在没有网络的情况下也可以连接设备。

  • 安装 usbmuxd;
1
$ brew install usbmuxd
  • 设备通过数据线连接到 Mac 上;

  • 端口映射;

1
$ iproxy 2222 22

将设备上22端口号映射到电脑上2222端口。

2.2.pip

pip是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。

1
$ sudo easy_install pip

2.3.frida

安装和升级frida

1
$ pip install --user frida
1
$ sudo easy_install --upgrade frida

2.4.frida-tools

这是frida的命令行界面(CLI),后面我们正是使用它自带的一些命令来查看或者调试应用。

1
$ pip install frida-tools

2.5.frida-ios-dump

在桌面新建文件夹Frida

1
$ mkdir Frida

frida-ios-dump克隆到刚才的文件夹中:

1
$ git clone https://github.com/AloneMonkey/frida-ios-dump Frida/

安装依赖:

1
2
$ cd Frida
$ sudo pip install -r requirements.txt

修改dump.py配置:

1
2
3
4
User = 'root'
Password = ‘alpine’
Host = 'localhost'
Port = 2222

这里的Password要与越狱后root身份的密码一致,默认为alpine。一般越狱后考虑到 ssh 的安全问题,一般都要修改rootmobile身份的密码,所以这里要根据你自己的设置而修改。

3.砸壳

3.1.查看进程

接下来就可以进入实战阶段了,你可以使用frida指令查看正在运行的或者全部已安装的进程的信息。

1
2
3
4
5
6
7
8
9
10
11
# Connect Frida to an iPad over USB and list running processes
$ frida-ps -U

# List running applications
$ frida-ps -Ua

# List installed applications
$ frida-ps -Uai

# Connect Frida to the specific device
$ frida-ps -D 0216027d1d6d3a03

比如我查看当前设备中已经打开的应用:

1
2
3
4
5
6
7
8
9
10
11
$ frida-ps -Ua
PID Name Identifier
---- ------ -------------------------
1509 Filza com.tigisoftware.Filza
1250 微信 com.tencent.xin
1251 支付宝 com.alipay.iphoneclient
1441 斗鱼 tv.douyu.live
1525 照片 com.apple.mobileslideshow
1246 百度手机卫士 com.baidu.security
1501 网易新闻 com.netease.news
1249 邮件 com.apple.mobilemail

第一列是进程ID,第二列是进程名称,第三列是进程bundle id

3.2.开始砸壳

重点 lei 了~砸壳时我们使用的是刚才克隆而来的frida-ios-dump中的./dump.py这个 Python 脚本文件。使用方法:

1
2
$ cd Frida
$ ./dump.py 微信

砸壳时使用名称bundle id都可以。注意,执行$ ./dump.py xxx时,被砸壳的应用一定要是在运行状态,不能在后台,也不能锁屏。如果此应用没有在运行状态,那么执行完此命令后,该应用会自动运行起来,这时再运行一次上面的命令即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Start the target app 微信
Dumping 微信 to /var/folders/18/prkfmw9150xbt4s2b47hhff40000gn/T
start dump /var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/WeChat
WeChat.fid: 100%|██████████| 80.3M/80.3M [00:05<00:00, 16.1MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/zstd.framework/zstd
zstd.fid: 100%|██████████| 682k/682k [00:00<00:00, 3.99MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/TXLiteAVSDK_Smart_No_VOD.framework/TXLiteAVSDK_Smart_No_VOD
TXLiteAVSDK_Smart_No_VOD.fid: 100%|██████████| 5.21M/5.21M [00:00<00:00, 11.3MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/matrixreport.framework/matrixreport
matrixreport.fid: 100%|██████████| 460k/460k [00:00<00:00, 3.90MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/YTFaceProSDK.framework/YTFaceProSDK
YTFaceProSDK.fid: 100%|██████████| 13.1M/13.1M [00:01<00:00, 13.7MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/GPUImage.framework/GPUImage
GPUImage.fid: 100%|██████████| 1.21M/1.21M [00:00<00:00, 7.08MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/WCDB.framework/WCDB
WCDB.fid: 100%|██████████| 4.25M/4.25M [00:00<00:00, 11.5MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/MMCommon.framework/MMCommon
MMCommon.fid: 100%|██████████| 1.18M/1.18M [00:00<00:00, 5.37MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/MultiMedia.framework/MultiMedia
MultiMedia.fid: 100%|██████████| 7.66M/7.66M [00:00<00:00, 12.3MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/QBar.framework/QBar
QBar.fid: 100%|██████████| 2.62M/2.62M [00:00<00:00, 10.0MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/QMapKit.framework/QMapKit
QMapKit.fid: 100%|██████████| 3.79M/3.79M [00:00<00:00, 10.3MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/ConfSDK.framework/ConfSDK
ConfSDK.fid: 100%|██████████| 4.01M/4.01M [00:00<00:00, 10.8MB/s]
start dump /private/var/containers/Bundle/Application/F441A6E7-863E-4A1C-AAEB-ECD4F9555208/WeChat.app/Frameworks/mars.framework/mars
mars.fid: 100%|██████████| 8.79M/8.79M [00:00<00:00, 13.4MB/s]
Expression_46@2x.png: 211MB [00:31, 6.96MB/s]
0.00B [00:00, ?B/s]Generating "微信.ipa"

脚本会自动在当前目录中生成 dump 之后的微信.ipa文件,这就是我们想要的砸壳后的文件了~~

4.Hopper反编译

拿到砸壳后的ipa之后,使用解压缩软件将其解压后会得到一个Payload文件夹,里面就是 ipa 对应的二进制文件。打开Hopper disassembler,将二进制文件拖到其窗口中,自动开始反编译过程~

5.CrackerXI

更新:偶然发现了一个叫CrackerXI的插件。其主要作用有:

  • 应用砸壳;
  • 去掉各种软件的证书;

看到砸壳字眼,是不是眼前一亮,没错它也可以用来一键砸壳,而且从操作上来讲比frida更加便捷。

  • 在 cydiakk 中文源中搜索并安装这个插件;
  • 回到桌面打开这个应用,进入设置中打开 crackerXI Hook 开关;
  • 回到 Applist 界面点击目标应用,自动启动并跳转到目标应用;
  • 目标应用启动后会弹出是否砸壳的选项框,选择 YES 即可跳回工具开始砸壳;
  • 最终砸壳后的 ipa 文件被保存在/var/mobile/Documents/CrackerXI目录中;
  • 使用 Mac 上的 iTools等助手将文件导出,解压后即可开始反编译。

根据我的测试,被砸壳的应用一定要在非启动状态,就是说一定要由CrackerXI来启动目标应用,所以我猜它的原理应该也是在应用二进制文件启动加载阶段,注入自己的动态库并开始砸壳。

crackerXI

懒人改变世界~~


相关参考:

#©frida官网

#©AloneMonkey - 一条命令完成砸壳


frida一键砸壳
https://davidlii.cn/2019/03/31/frida.html
作者
Davidli
发布于
2019年3月31日
许可协议