概述
通過iOS逆向系列-逆向App中使用class-dump
工具導出App的Mach-O文件所有頭文件、Hopper工具分析App的Mach-O文件代碼大概實現。但是這些前體是App的Mach-O沒有被加殼的。通過pp助手下載安裝的App都是經過脫殼的如果我們從Appstore下載安裝的App都是蘋果加殼的。
加殼就是利用特殊的算法,對可執行文件的編碼進行改變(比如壓縮、加密),以達到保護程序代碼的目的。
我們編寫的程序的Mach-O文件上傳到蘋果后台,蘋果會對我們的程序的Mach-O文件進行做加密處理並且外部添加一個殼程序。
機加載App時外部的課程序會對加密的應用的Mach-O文件進行解密,然后執行。
判斷程序是否加殼
-
通過otool命令:otool -l 可執行文件 | grep crypt
-
查看Load Commands -> LC_ENCRYPTION_INFO-> Crypt ID的值,
0代表未加密
脫殼方式
"脫殼"就是摘掉殼程序,將未加密的可執行文件還原出來(有些人也稱為“砸殼”)。
脫殼主要有2種方法:硬脫殼
、動態脫殼
。
動態脫殼的原理:是當程序加載進內從外部的殼程序會對加密的執行文件解密,這個時候我們從內從導出這個解密的執行文件。這個比較復雜,我們下面介紹通過硬脫殼的方式。
硬脫殼就的原理:是直接就是通過解密算法進行解密。
iOS中有很多的脫殼工具AppCrackr、Crackulous都已經過時了,下面我們使用最新的常用脫殼工具Clutch、dumpdecrypted。
Clutch方式脫殼
- 下載最新的ClutchRelase版本:https://github.com/KJCracks/Clutch/releases
- 將下載下來的Clutch的文件名版本號去掉。將Clutch拷貝到IPhone的/usr/bin/目錄下。可以行命令拷貝
scp -P 端口 Clutch文件路徑 root@localhost:/usr/bin/Clutch。
- 最好在IPhone上給Clutch添加權限
chmod +x /usr/bin/Clutch
- 列出手機當前安裝的需要脫殼的應用
- 輸入APP序號或者Bundle Id進行脫殼操作:
Clutch -d APP序號或BundleId
dumpdecrypted方式脫殼
- GitHub下載dumpdecrypted源碼。然后在源代碼目錄執行
make
指令進行編譯,獲得dylib動態庫文件
- 將dylib文件拷貝到iPhone上(如果是root用戶,建議放/var/root目錄
- 使用環境變量
DYLD_INSERT_LIBRARIES
將dylib
注入到需要脫殼的可執行文件(可執行文件路徑可以通過ps -A查看獲取)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib
可執行文件路徑
生成的脫殼的可執行文件在dumpdecrypted.dylib
所在的目錄下,也就是/var/root
可將生成脫殼的.decrypted后綴名去掉。