什么是加殼埠况?
利用特殊的算法耸携,對(duì)可執(zhí)行文件的編碼進(jìn)行改變(比如壓縮、加密)辕翰,以達(dá)到保護(hù)程序代碼的目的夺衍。
什么是脫殼?
摘掉殼程序喜命,將未加密的可執(zhí)行文件還原出來(有些人也稱為“砸殼”)沟沙。
脫殼主要有2種方法:硬脫殼河劝、動(dòng)態(tài)脫殼。
- 硬脫殼
直接對(duì)加殼程序執(zhí)行解密算法尝胆,解出原來的程序丧裁。 - 動(dòng)態(tài)脫殼
將加殼程序在內(nèi)存中跑起來,從內(nèi)存中導(dǎo)出解密后的原來的程序含衔。
如何驗(yàn)證可執(zhí)行文件是否已經(jīng)脫殼煎娇?
查看Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密贪染。
通過otool命令行也可以:otool -l 可執(zhí)行文件路徑 | grep crypt 缓呛。
iOS中的脫殼工具
- 下載最新的Release版
- 建議去掉版本號(hào),改名為Clutch
- 將Clutch文件拷貝到iPhone的/usr/bin目錄
- 如果在iPhone上執(zhí)行Clutch指令杭隙,權(quán)限不夠哟绊,賦予“可執(zhí)行的權(quán)限”
- 列出已安裝的APP:Clutch -i
- 輸入APP序號(hào)或者Bundle Id進(jìn)行脫殼操作:Clutch -d APP序號(hào)或BundleId
- 脫殼成功后會(huì)生成一個(gè)ipa文件,通常在路徑var/mobile/Documents/Dumped路徑下痰憎。
- 下載源代碼票髓,然后在源代碼目錄執(zhí)行make指令進(jìn)行編譯,獲得dylib動(dòng)態(tài)庫文件
- 將dylib文件拷貝到iPhone上(如果是root用戶铣耘,建議放/var/root目錄)
- 終端進(jìn)入dylib所在的目錄
- 使用環(huán)境變量DYLD_INSERT_LIBRARIES將dylib注入到需要脫殼的可執(zhí)行文件(可執(zhí)行文件路徑可以通過ps -A查看獲惹⒐怠)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可執(zhí)行文件路徑 - .decrypted文件就是脫殼后的可執(zhí)行文件
注意:在使用過程中,可能會(huì)遇到對(duì)dylib所在的文件夾權(quán)限不夠造成的錯(cuò)誤蜗细。
解決方案:將dylib放在用戶所在文件夾裆操,比如如果是root用戶,請(qǐng)將dylib放在/var/root目錄炉媒,如果是mobile用戶踪区,請(qǐng)將dylib放在/var/mobile目錄。