脱壳背景
我们日常开发提交给Appstore
发布的App
都经过官方保护加密,这样可以保证机器上跑的应用是经过苹果审核过的,也可以管理软件授权。经过App Store
加密的应用,我们无法通进行反编译静态分析,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是所谓的脱壳(砸壳)。
iOS
脱壳工具目前主要有一下3种:
Clutch
dumpdecrypted
frida-ios-dump
由于Clutch
脱壳不太稳定,frida-ios-dump
环境配置比较复杂,所以本文以dumpdecrypted
这个工具做为脱壳工具。
脱壳环境
- iPhone 6
- iOS 11.4.1
dumpdecrypted
下载安装
下载地址:https://github.com/stefanesser/dumpdecrypted
下载后打开终端进入该砸壳工具的路径,输入make
命令开始编译文件
1 | atxdeMac-mini:dumpdecrypted-master atx$ make |
执行成功后会生成文件dumpdecrypted.dylib
如果出现如下报错说明xcode-select
配置路径不对。1
2
3`xcrun --sdk iphoneos --find gcc` -Os -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c
/bin/sh: /Applications/Xcode: No such file or directory
make: *** [dumpdecrypted.o] Error 127
解决方案:重新配置xcode-select
路径。
1 | atxdeMac-mini:dumpdecrypted-master atx$ sudo xcode-select --switch /Applications/Xcode.app |
重签名
首先查询可用证书
1
2
3
4
5atxdeMac-mini:dumpdecrypted-master atx$ security find-identity -v -p codesigning
1) C9C1B7D09BC10EA24339xxxxD7E2 "iPhone Developer: xx (WKQZHDVG49)"
2) EDBEF3DF258E0C8E93Exxxxx "iPhone Developer: xxx@xx.com (953S5US289)"
3) 5FF97332735E86982AD562xxxx "navicat"
3 valid identities found进入
dumpdecrypted.dylib
所在目录,执行签名命令。
1 | atxdeMac-mini:dumpdecrypted-master atx$ codesign --force --verify --verbose --sign "iPhone Developer: xxx@mgtv.com (953S5US289)" dumpdecrypted.dylib |
脱壳操作
设备环境要求
- 使用越狱手机务必在
Cydia
中安装cycript
、adv-cmds
、pstree
。 - 远程连接手机,在设备上打开要脱壳的应用,本文以微信为例。
dumpdecrypted文件拷贝
- 远程
SSH
连接设备将签名之后的dumpdecrypted.dylib
拷贝到设备/usr/lib
目录。
1 | λ scp C:\Users\Shuqing\Desktop\dumpdecrypted.dylib root@127.0.0.1:/usr/lib |
- 进入
/usr/lib
目录查看文件dumpdecrypted.dylib
是否拷贝成功。
1 | klygteki-iPhone: root# cd /usr/lib |
从上面文件路径可以看到dumpdecrypted.dylib
拷贝成功。
3.打开微信应用执行命令ps aux | grep "WeChat"
查看进程信息
1 | klygteki-iPhone:~ root# ps aux | grep "WeChat" |
4.如上面执行结果所示,在最后可以看到微信的进程和bundle
信息。确保手机已经下载了cycript
工具,首先使用命令cycript -p 进程id/进程名称
,进行进程关联。
5.然后使用命令[NSHomeDirectory() stringByAppendingString:@"/Documents"]
获取沙盒路径。如下所示,/var/moible/xxx就是沙盒路径
1 | klygteki-iPhone:/usr/lib root# cycript -p 8328/(WeChat) |
- 拷贝签名之后的
dumpdecrypted.dylib
到应用沙盒目录。1
2
3scp C:\Users\Shuqing\Desktop\dumpdecrypted.dylib root@127.0.0.1:/var/mobile/Containers/Data/Application/978087D3-6F1A-431E-A431-4A9D5023DB3E/Documents
root@127.0.0.1's password:
dumpdecrypted.dylib 100% 244KB 7.6MB/s 00:00
脱壳执行
- 首先将用户切换到
mobile
,然后进入到沙盒路径
1 | klygteki-iPhone:/ mobile$ su mobile |
- 在该沙盒路径下指定环境变量
DYLD_INSERT_LIBRARIES
,然后执行脱壳。
1 | DYLD_INSERT_LIBRARIES=/usr/lib/dumpdecrypted.dylib 可执行文件的路径(即之前获取到的Bundle路径) |
脱壳过程如下:
1 | klygteki-iPhone:/ mobile$ DYLD_INSERT_LIBRARIES=/usr/lib/dumpdecrypted.dylib /var/containers/Bundle/Application/D597E9A7-A9A4-45A0-886B-E7079A87FC64/WeChat.app/WeChat |
- 脱壳完成之后,可以在沙盒目录看到脱壳后的文件:
WeChat.decrypted
1 | klygteki-iPhone:/ mobile$ cd /var/mobile/Containers/Data/Application/AC83D268-2FE9-434E-8D76-0935AACB2AC3/Documents |
- 可以将该脱壳文件拷贝出来,用于解析。
1 | scp root@127.0.0.1:/var/mobile/Containers/Data/Application/978087D3-6F1A-431E-A431-4A9D5023DB3E/Documents/WeChat.decrypted C:\Users\Shuqing\Desktop |
Class-dump解析
砸壳之后的.decrypted
文件是不可读的,使用Class-dump
可以将Objective-C
编写的二进制文件反编出头文件。
下载安装
- 下载地址:http://stevenygard.com/projects/class-dump/ 下载
.dmg
的文件即可。 - 打开工程选择
class-dump
运行,把class-dump
放在/usr/local/bin
下,在终端输入class-dump
查看是否安装成功。
1 | atxdeMac-mini:dumpdecrypted-master atx$ class-dump |
执行解析
解析命令:class-dump -H Mach-O文件路径 -o 头文件存放目录
- -H表示要生成头文件
- -o用于制定头文件的存放目录
1 | atxdeMac-mini:~ atx$ class-dump -H /Users/atx/Downloads/WeChat.decrypted -o /Users/atx/Desktop/wechat |
解析完成后,如下图所示可以看到微信App的头文件。
视频演示
参考资料
- https://www.jianshu.com/p/2d38f036990d
- https://blog.csdn.net/boring_cat/article/details/79422086
- https://iosre.com/t/ios-10-2-dumpdecrypted-file-system-sandbox-blocked-mmap-abort-trap-6/13878/2
- https://blog.csdn.net/qq_35734499/article/details/106681521
- https://iosre.com/t/ios-9-3-3-dumpdecrypted-killed-9/4489/13
- https://www.jianshu.com/p/d139e7246c83