iOS 逆向(四)脫殼

這個系列,是很早聽 MJ 課程時的整理,如今分享出來。 其中一些參考資料有些有引用,有些可能忘記添加了,若是有引用部分資料,能夠聯繫我。git

iOS 逆向(一)環境搭建
iOS 逆向(二)Cycript
iOS 逆向(三)逆向工具
iOS 逆向(四)脫殼
審覈中 iOS 逆向(五)Theos工具 iOS 逆向(六)動態調試
iOS 逆向(七)重簽名github

1、加殼

利用特殊的算法,對可執行文件的編碼進行改變(好比壓縮、加密),以達到保護程序代碼的目的。算法

2、脫殼

摘掉殼程序,將未加密的可執行文件還原出來(有些人也稱爲「砸殼」)bash

脫殼主要有2種方法:硬脫殼、動態脫殼。微信

2.1 是否脫殼

Mach-O文件中,Crypt ID爲1表明加密,即加殼。markdown

  1. 查看Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0表明未加密

  1. 經過otool命令行

otool -l 可執行文件路徑 | grep cryptapp

2.2 脫殼工具

脫殼工具備不少,好比Clutch、dumpedcrypted。工具

另外,還有其餘脫殼工具,如AppCrackr、Crackulous。oop

3、Clutch

3.1 安裝

3.1.1 建議去掉版本號,更名爲Clutch

3.1.2 將Clutch文件拷貝到iPhone的/usr/bin目錄

3.1.3 提示權限不足,賦予可執行權限:

5s:~ root# Clutch
-sh: /usr/bin/Clutch: Permission denied
5s:~ root# chmod +x /usr/bin/Clutch
複製代碼

3.2 使用

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
複製代碼
  • 小提示:
    • 獲取對應APP的可執行文件,在找到app路徑以後,app內通常可執行文件都以MB爲單位,比較大
    • 另外,可執行文件,通常以APP應用名稱有關聯,好比微信是Wechat等。

4.2.3 破殼文件重命名

在dylib目錄下找到對應的破殼程序,.decrypted就是破殼程序,將其從新命名爲.ipa便可。

4.2.4小問題

☞假如遇到下面提示

☞緣由:對dylib所在的文件夾權限不夠

☞解決方案:將dylib放在用戶所在文件夾,好比

  • 若是是root用戶,請將dylib放在/var/root目錄
  • 若是是mobile用戶,請將dylib放在/var/mobile目錄

參考

連接

  1. Clutch
  2. Clutch Release
  3. dumpdecrypted
相關文章
相關標籤/搜索