iOS 逆向开发24:砸壳
目录
注意:Clutch、dumpdecrypted适用于完美越狱手机,frida-iOS-dump可用于非完美越狱手机
一、砸壳
软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(解密)。
-
应用加壳(加密)
提交给Appstore
发布的App
,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store
加密的应用,我们无法通过Hopper
等反编译静态分析,也无法Class-Dump
,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳) -
应用砸壳(解密)
静态砸壳
静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术
动态砸壳
动态砸壳就是从运行在进程内存空间中的可执行程序映像(image
)入手,将内存中的内容进行转储(dump
)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
iOS应用运行原理
二、Clutch
Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。
Clutch安装
官网: https://github.com/KJCracks/Clutch
Clutch使用
三、dumpdecrypted
Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。
安装
官网 :https://github.com/stefanesser/dumpdecrypted 直接Git Clone
四、向进程中插入动态库
- 创建
InsertDemo
项目并添加一个Inject Framework
-
将
Inject.framework
拷贝到Temp文件夹,参照上篇文章通过USB链接到手机 -
将Inject.framework拷贝到手机
cd Temp
scp -r -P 12345 Inject.framework root@localhost:/var/root
// 切到连接手机的终端界面
// 查看Inject.framework是否拷贝到手机
ls
-
找到InsertDemo的路径
ps -A | grep InsertDemo
-
将
Inject.framework
插入到InsertDemo
中
iOS9.1以后插入framework需要在mobile用户角色操作,否则会出现Killed:9
错误
//su mobile
DYLD_INSERT_LIBRARIES=Inject.framework/Inject /var/containers/Bundle/Application/7E8BE0F1-818A-4163-BD32-3D06AD600EB9/InsertDemo.app/InsertDemo
注意:非自己的APP如微信等通过以上方法不能插入。
dumpdecrypted
这个工具就是通过这种原理进行砸壳的。
五、frida-iOS-dump
该工具基于frida
提供的强大功能通过注入js
实现内存dump
然后通过python
自动拷贝到电脑生成ipa
文件。
安装frida
sudo git clone https://github.com/AloneMonkey/frida-ios-dump
sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt --upgrade
// 查看Mac进程
frida-ps
// 查看手机进程
frida-ps -U
// 进入微信调试界面
frida -U 微信
从frida-ios-dump官网可以看到:
Run usbmuxd/iproxy SSH forwarding over USB (Default 2222 -> 22). e.g. iproxy 2222 22
因此通过USB连接需要映射的端口为2222,或者可以修改dump.py
中将映射的端口修改之前的12345
。这里选择修改dump.py
文件。
使用dump.py砸壳
// USB连接手机----usbConnect.sh
cd /opt/python-client
python tcprelay.py -t 22:12345
// 砸壳-需打开微信
cd /Users/ztkj/Desktop/Temp
dump.py 微信
// 获取头文件 - 解压缩ipa包并将MachO文件拖出来 (路径中不能有中文)
class-dump -H WeChat -o WeChatHeaders/
注意:1、
dump.py
中User、Password、Host、Port必须和USB链接手机时的一致。
2、由于/opt/MonkeyDev/bin/中有dump.py
和dump.js
文件并且配置了相应的环境变量,因此dump.py
命令可以在任意目录执行。
3、dump微信时,微信必须在运行状态。
补充命令
-
显示当前命令的路径
pwd
-
清除终端连接手机时终端中的内容(
Command + K
)
clear
,如果没有这个命令,可使用Cydia
安装adv-cmds
插件 -
删除文件
rm -r 文件名
-
移动文件
mv 文件 目标路径
-
查看命令文件的路径
which dump.py
-
查看可执行文件是否加密
otool -l WeChat | grep crypt
cryptid 为0 表示为加密,已被砸壳了。