iOS加殼與脫殼

加殼

將打包好的ipa文件上傳到App Store后會(huì)對可執(zhí)行文件進(jìn)行加殼,我們下載到iPhone的APP就是加殼后的App。所謂加殼,就是利用特殊算法,對可執(zhí)行文件的編碼進(jìn)行改變(壓縮、加密),以達(dá)到保護(hù)程序代碼的目的。

對于不加殼的APP,可執(zhí)行文件執(zhí)行的時(shí)候是直接在內(nèi)存中裝載可執(zhí)行文件。而對于加殼后的APP,可執(zhí)行文件已加密,ldyd無法直接在內(nèi)存中裝載可執(zhí)行文件,此時(shí)加密的可執(zhí)行文件實(shí)際上包裹了一層殼,兩者合成了一個(gè)可執(zhí)行的殼程序,在內(nèi)存中裝載該殼程序并解密執(zhí)行真正的可執(zhí)行文件。

脫殼

所謂脫殼,就是摘掉殼程序,將未加密的可執(zhí)行文件還原出來。脫殼有硬脫殼和動(dòng)態(tài)脫殼2種方法。

硬脫殼:殼程序執(zhí)行解密算法得到可執(zhí)行文件。

動(dòng)態(tài)脫殼:當(dāng)殼程序運(yùn)行在內(nèi)存中時(shí),直接將殼程序解密好的可執(zhí)行文件從內(nèi)存中導(dǎo)出。

使用MachOView查看Mach-O可執(zhí)行文件,在Load Commands下有一個(gè)LC_ENCRYPTION_INFO_64,里面的Crypt ID若為0說明未加密,若為其他數(shù)字則說明被加密過。也可以使用otool工具使用命令行:otool -l Mach-O文件 | grep crypt。

微信Mach-O文件

未脫殼的微信Mach-O文件的cyptid為1,很明顯的是加殼的。

Clutch

Clutch是iOS硬脫殼常用的一種工具,從https://github.com/KJCracks/Clutch/releases下載最新版,并放到iPhone的/usr/bin目錄下,注意若提示/usr/bin/Clutch: Permission denied,可以使用chmod +x /usr/bin/Clutch修改權(quán)限。

1、使用“Clutch -i”列出已安裝的APP。

Clutch -i

2、輸入APP序號或者Bundle Id進(jìn)行脫殼操作。例如:Clutch -d 8。

很可惜,用這個(gè)工具試了好多APP都脫殼失敗。

dumpdecrypted

dumpdecrypted也是iOS硬脫殼常用的一種工具。從https://github.com/stefanesser/dumpdecrypted下載源代碼,在源代碼目錄執(zhí)行make命令,獲取dylib動(dòng)態(tài)庫文件。將dylib文件拷貝到iPhone上,建議放在/var/root目錄。然后使用終端進(jìn)入dylib所在目錄,使用環(huán)境變量DYLD_INSERT_LIBRARIES將dylib注入到需要脫殼的可執(zhí)行文件:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib可執(zhí)行文件。

iOS12以上需要對dumpdecrypted.dylib進(jìn)行重簽名,可以使用“l(fā)did -S dumpdecrypted.dylib”命令在iPhone上對其進(jìn)行重簽名。

脫殼失敗

很可惜,由于我的Xcode版本過高再次脫殼失敗。若想使用dumpdecrypted進(jìn)行脫殼,需要讓Xcode SDK版本與越獄手機(jī)的iOS SDK版本一致。此時(shí)可以去下載一個(gè)能與越獄iPhone對應(yīng)的老版本的Xcode。然后打開終端執(zhí)行命令“sudo xcode-select -s 老版本Xcode所在目錄/Contents/Developer”。

還有一種方法,修改下載的dumpdecrypted目錄下的makefile,然后重新 make。具體修改:在 GCC_BASE 最后加上 -miphoneos-version-min=12.0 或更低版本,并對新生成的dumpdecrypted.dylib進(jìn)行重簽名。

frida-iOS-dump

frida-iOS-dump是一種動(dòng)態(tài)脫殼的方法,它需要讓待脫殼的APP運(yùn)行起來。

1、在越獄iPhone上安裝AFC2、AppSync這兩個(gè)依賴。并確保已經(jīng)安裝了SSH。

2、Mac端安裝Python3,然后使用命令“sudo pip3 install frida-tools”安裝frida-tools,因?yàn)閒rida-tools依賴frida,因此不需要單獨(dú)下載frida,直接安裝frida-tools就自動(dòng)會(huì)安裝上frida。

3、從https://github.com/AloneMonkey/frida-ios-dump/tree/3.x下載frida-ios-dump,在frida-ios-dump所在目錄下使用“sudo pip3 install -r ./requirements.txt --upgrade”命令安裝相關(guān)依賴庫。

4、使用命令“brew install usbmuxd”安裝usbmuxd,然后輸入“iproxy 2222 22”切換遠(yuǎn)程連接的端口號,并登錄到越獄iPhone。

5、越獄iPhone打開要脫殼的APP使其保持運(yùn)行,然后回到Mac終端,在frida-ios-dump所在目錄下使用命令“./dump.py 待脫殼APP包名”進(jìn)行脫殼。

脫殼

此時(shí),將得到一個(gè)脫殼后的ipa文件,將其中的Mach-O文件取出,再次使用otool查看。

脫殼后的Mach-O

可以看到cryptid已經(jīng)為0了,說明已經(jīng)將AppStore加的那個(gè)殼給脫掉了。

然而,當(dāng)滿心歡喜的使用class-dump想導(dǎo)出頭文件時(shí),發(fā)現(xiàn)報(bào)錯(cuò);使用Hopper Disassembler時(shí)也只比未脫殼前要多一些可利用的匯編代碼。騰訊爸爸還是做了很多代碼混淆等程序加固工作的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容