前两天重新给我的 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 本地端口,使得在没有网络的情况下也可以连接设备。
将设备上22
端口号映射到电脑上2222
端口。
2.2.pip
pip
是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。
2.3.frida
安装和升级frida
:
1
| $ pip install --user frida
|
这是frida
的命令行界面(CLI),后面我们正是使用它自带的一些命令来查看或者调试应用。
1
| $ pip install frida-tools
|
2.5.frida-ios-dump
在桌面新建文件夹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 的安全问题,一般都要修改root
和mobile
身份的密码,所以这里要根据你自己的设置而修改。
3.砸壳
3.1.查看进程
接下来就可以进入实战阶段了,你可以使用frida
指令查看正在运行的或者全部已安装的进程的信息。
1 2 3 4 5 6 7 8 9 10 11
| $ frida-ps -U
$ frida-ps -Ua
$ frida-ps -Uai
$ 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
来启动目标应用,所以我猜它的原理应该也是在应用二进制文件启动加载阶段,注入自己的动态库并开始砸壳。
懒人改变世界~~
相关参考:
#©frida官网
#©AloneMonkey - 一条命令完成砸壳