這個系列,是很早聽 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 列出應用
列出已經安裝的應用
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-225456.png#align=left&display=inline&height=173&margin=%5Bobject%20Object%5D&originHeight=173&originWidth=500&status=done&style=none&width=500)
### 3.2.2 脫殼
根據上面列出的,輸入app序號或者bundle id進行脫殼操做:
複製代碼
Clutch -d app序號 Clutch -d bundleidpost
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-233036.png#align=left&display=inline&height=130&margin=%5Bobject%20Object%5D&originHeight=362&originWidth=1388&status=done&style=none&width=500)![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-233400.png#align=left&display=inline&height=63&margin=%5Bobject%20Object%5D&originHeight=132&originWidth=524&status=done&style=none&width=250)
### 3.2.3 脫殼完成
脫殼完成以後,會顯示路徑:
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-233228.png#align=left&display=inline&height=66&margin=%5Bobject%20Object%5D&originHeight=66&originWidth=1240&status=done&style=none&width=1240)
去對應路徑,將脫殼頭文件拷出便可。
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-234118.png#align=left&display=inline&height=46&margin=%5Bobject%20Object%5D&originHeight=74&originWidth=562&status=done&style=none&width=350)![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-234156.png#align=left&display=inline&height=95&margin=%5Bobject%20Object%5D&originHeight=150&originWidth=554&status=done&style=none&width=350)
固然也可能會脫殼失敗:
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-233510.png#align=left&display=inline&height=100&margin=%5Bobject%20Object%5D&originHeight=100&originWidth=830&status=done&style=none&width=830)
那麼,有**兩種方案**:
1. 再次嘗試脫殼;
2. 利用dempdecrypted嘗試脫殼。
# 4、dumpdecrypted
## 4.1 編譯
下載源代碼,而後在源代碼目錄執行make指令進行編譯,得到dylib動態庫文件
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-231328.png#align=left&display=inline&height=159&margin=%5Bobject%20Object%5D&originHeight=255&originWidth=800&status=done&style=none&width=500)![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-231349.png#align=left&display=inline&height=138&margin=%5Bobject%20Object%5D&originHeight=198&originWidth=358&status=done&style=none&width=250)
將dylib文件拷貝到iPhone上(若是是root用戶,建議放/var/root目錄)
![](http://blog-1251606168.file.myqcloud.com/blog_2018/2018-10-29-234718.png#align=left&display=inline&height=484&margin=%5Bobject%20Object%5D&originHeight=892&originWidth=922&status=done&style=none&width=500)
## 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放在用戶所在文件夾,好比