背景:
如果手機(jī)通過PP助手或者Cydia等越獄軟件下載的ipa文件,并不能通過MachOView枢纠、class-dump、Hopper Disassembler当辐、ida等途徑進(jìn)行靜態(tài)分析
分析微信的Mach-O文件:
只有一個頭文件,不能分析,原因是通過AppStore下載的應(yīng)用是經(jīng)過了加殼操作的
加殼
-
什么是加殼抖僵?
利用特殊的算法,對可執(zhí)行文件的編碼進(jìn)行改變(比如壓縮瀑构、加密)裆针,以達(dá)到保護(hù)程序代碼的目的
image.png
脫殼
什么是脫殼?
摘掉殼程序寺晌,將未加密的可執(zhí)行文件還原出來(有些人也稱為“砸殼”)-
脫殼主要有2種方法:硬脫殼世吨、動態(tài)脫殼
image.png
如何驗(yàn)證可執(zhí)行文件是否已經(jīng)脫殼?
1>可以利用MachOView進(jìn)行分析 (cryptid 0 為脫殼, 1為沒有脫殼)
2>通過終端命令行
通過otool命令行也可以:otool -l 可執(zhí)行文件路徑 | grep crypt
iOS中的脫殼工具
1>Clutch
Clutch配置
建議去掉版本號,修改文件名為Clutch
將Clutch文件拷貝到iPhone的/usr/bin目錄
如果在iPhone上執(zhí)行Clutch指令呻征,權(quán)限不夠耘婚,賦予“可執(zhí)行的權(quán)限”
-
列出已安裝的APP:
Clutch -i
(列出的程序都是沒有脫殼的程序)
image.png -
輸入APP序號或者Bundle Id進(jìn)行脫殼操作:
Clutch -d APP序號或BundleId
image.png -
脫殼成功后會生成一個ipa文件
image.png
驗(yàn)證已經(jīng)脫殼
image.png
即可分析微博內(nèi)部工程頭文件
image.png
2>dumpdecrypted
下載源代碼,然后在源代碼目錄執(zhí)行make指令進(jìn)行編譯陆赋,獲得dylib動態(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í)行文件
在使用過程中攒岛,可能會遇到以下錯誤
- 原因:對dylib所在的文件夾權(quán)限不夠
- 解決方案:將dylib放在用戶所在文件夾赖临,比如
如果是root用戶,請將dylib放在/var/root目錄
如果是mobile用戶灾锯,請將dylib放在/var/mobile目錄