这个系列,是很早听 MJ 课程时的整理,如今分享出来。 其中一些参考资料有些有引用,有些可能忘记添加了,若是有引用部分资料,能够联系我。git
iOS 逆向(一)环境搭建
iOS 逆向(二)Cycript
iOS 逆向(三)逆向工具
iOS 逆向(四)脱壳
审核中 iOS 逆向(五)Theos工具 iOS 逆向(六)动态调试
iOS 逆向(七)重签名github
利用特殊的算法,对可执行文件的编码进行改变(好比压缩、加密),以达到保护程序代码的目的。算法
摘掉壳程序,将未加密的可执行文件还原出来(有些人也称为“砸壳”)bash
脱壳主要有2种方法:硬脱壳、动态脱壳。微信
Mach-O文件中,Crypt ID为1表明加密,即加壳。markdown
otool -l 可执行文件路径 | grep crypt
app
脱壳工具备不少,好比Clutch、dumpedcrypted。工具
另外,还有其余脱壳工具,如AppCrackr、Crackulous。oop
5s:~ root# Clutch
-sh: /usr/bin/Clutch: Permission denied
5s:~ root# chmod +x /usr/bin/Clutch
复制代码
Clutch [OPTIONS]
-b --binary-dump Only dump binary files from specified bundleID
-d --dump Dump specified bundleID into .ipa file
-i --print-installed Print installed application
--clean Clean /var/tmp/clutch directory
--version Display version and exit
-? --help Display this help and exit
复制代码
### 3.2.1 列出应用
列出已经安装的应用

### 3.2.2 脱壳
根据上面列出的,输入app序号或者bundle id进行脱壳操做:
复制代码
Clutch -d app序号 Clutch -d bundleidpost

### 3.2.3 脱壳完成
脱壳完成以后,会显示路径:

去对应路径,将脱壳头文件拷出便可。

固然也可能会脱壳失败:

那么,有**两种方案**:
1. 再次尝试脱壳;
2. 利用dempdecrypted尝试脱壳。
# 4、dumpdecrypted
## 4.1 编译
下载源代码,而后在源代码目录执行make指令进行编译,得到dylib动态库文件

将dylib文件拷贝到iPhone上(若是是root用户,建议放/var/root目录)

## 4.2 破壳
_注:如下操做均在手机端完成。_
### 4.2.1 终端进入dylib所在的目录
### 4.2.2 DYLD_INSERT_LIBRARIES
使用环境变量DYLD_INSERT_LIBRARIES将dylib注入到须要脱壳的可执行文件:
- 可执行文件路径能够经过`ps -A`查看获取,也能够经过[MJAppTools](https://github.com/CoderMJLee/MJAppTools)获取。
找到芒果TV对应的路径:
> /var/mobile/Containers/Bundle/Application/81DF5B23-4935-4E4D-81CA-03B6EE5B400F/MGTV-iPhone-appstore.app/
经过ps命令,获得的是app包的路径,还要找到app下对应的可执行文件。
此处,其对应的可执行文件为MGTV-iPhone-appstore,因此完整路径是:
> /var/mobile/Containers/Bundle/Application/81DF5B23-4935-4E4D-81CA-03B6EE5B400F/MGTV-iPhone-appstore.app/MGTV-iPhone-appstore
- DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
```bash
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/81DF5B23-4935-4E4D-81CA-03B6EE5B400F/MGTV-iPhone-appstore.app/MGTV-iPhone-appstore
复制代码
在dylib目录下找到对应的破壳程序,.decrypted
就是破壳程序,将其从新命名为.ipa
便可。
☞假如遇到下面提示
☞缘由:对dylib所在的文件夹权限不够
☞解决方案:将dylib放在用户所在文件夹,好比