網(wǎng)上關(guān)于 iOS 應(yīng)用砸殼相關(guān)的博客让虐,非常多,但都存在一些問題罢荡。
- 年代久遠赡突,砸殼的方法早已過時
- 比較新的文檔,不夠完整区赵,不夠詳細惭缰,對于一些過程都是一帶而過,缺乏詳細的描述笼才,對小白來說非常不友好漱受。
故,我將最近實踐成功的經(jīng)驗詳細地記錄下來骡送,希望對小白們有所幫助吧昂羡,如果文中有說得不對的地方,也希望大家能指出摔踱。
預備知識
教材:主要學習了一下慶哥(劉培慶)的書《iOS應(yīng)用逆向與安全》虐先,小伙伴們可以去買一本正版紙書,支持一下~
越獄設(shè)備
本次學習派敷,選擇的是 iOS 13.3.1 的 iPad mini4蛹批, A8 芯片 ARMv8 架構(gòu)
其中要注意兩點
- checkra1n 屬于不完美越獄,與完美越獄的區(qū)別是如果設(shè)備重啟了篮愉,將會回到未越獄狀態(tài)腐芍,需要重新越獄。
- 注意越獄成功后试躏,在手機上使用 checkra1n app下載 cydia 時猪勇,可以使用 4G 網(wǎng)絡(luò),可以大幅加快下載速度冗酿。
frida 砸殼
為什么要砸殼埠对?
這是因為應(yīng)用上傳至App Store后,蘋果會對應(yīng)用的代碼部分進行加密裁替,當應(yīng)用運行時才會動態(tài)解密项玛, 在這樣的情況下是無法直接使用后面講到的class-dump和IDA進行分析的。所以弱判,在分析應(yīng)用之前襟沮,要把應(yīng)用加密的內(nèi)容解密,然后把應(yīng)用和解密后的可執(zhí)行文件導出到計算機中。
這里我不會使用網(wǎng)上經(jīng)常出現(xiàn)的 dumpdecrypted
开伏、Clutch
膀跌,而是使用了 frida
。
1 iOS 端配置
- 在越獄設(shè)備上固灵,打開 cydia捅伤,添加源
https://build.frida.re
- 打開添加的源,找出
frida
進行安裝巫玻,其中會列出 3 個軟件丛忆,分別是Frida for 32-bit devices
、Frida for A12+ devices
仍秤、Frida for pre-A12 devices
三個熄诡,請根據(jù)越獄設(shè)備的實際 CPU 類型,進行選擇诗力,本文中使用的 iPad mini 4 是 A8 芯片凰浮,所以安裝了第三項 - 安裝完成后,可在ssh終端運行
frida-ps -U
查看苇本,是否成功(實測袜茧,command not found 應(yīng)該也不影響后續(xù)的使用)
2 MAC 端配置
Anaconda
這個軟件的主要作用是可以配置多種不同的 Python 環(huán)境,避免在 MAC 上安裝多個 Python 版本圈澈,導致的管理混亂惫周,其他功能可以自己去了解一下。
這里采用 Anaconda 的原因是康栈,在用普通方式(在自己的 mac 下安裝不同版本的 Python,并安裝依賴庫)踩了很多坑喷橙,實在趟不過了......
- 搜索并安裝
Anaconda
軟件 - 安裝完成后啥么,建議不使用軟件自帶的 Python,而是自己 create environment贰逾,這里配置環(huán)境 Python 3.7悬荣,并為環(huán)境取名 zyy
- 配置完成后,點擊對應(yīng) zyy 環(huán)境的三角箭頭疙剑,打開終端氯迂,這個終端就會有你安裝的 Python 版本
安裝 frida-ios-dump
- 克隆慶哥(劉培慶)改造過的倉庫,代碼如下
git clone https://github.com/AloneMonkey/frida-ios-dump
- 使用前面提到的
Anaconda
打開的終端言缤, cd 到前一步下載的目錄 frida-ios-dump - 安裝需要的依賴
sudo pip install -r requirements.txt --upgrade
- 如果在上一步出現(xiàn) six 導致的問題嚼蚀,請忽略 six 這個庫
sudo pip install six --upgrade --ignore-installed six
- 如果安裝的過程比較慢,可以切換成清華源進行安裝 (如果存在因為這個源而導致某些庫安裝不成功管挟,可以通過修改
requirements.txt
中的依賴庫名單來分批下載轿曙,使用原本的源下載不成功的庫)
sudo pip install -r requirements.txt --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
電腦和 iOS 設(shè)備的端口映射
- 使用 USB 將設(shè)備與電腦相連
- 進行映射,在終端輸入
iproxy 2222 22
(其中 2222 代表電腦端的端口,22 是 iOS 設(shè)備的端口號导帝,如果發(fā)現(xiàn)電腦端端口號已被占用守谓,可以使用新的端口號進行映射,打開在frida-ios-dump
目錄下的dump.py
您单,并將 2222 修改為新的端口號斋荞,端口號注意不要超過四位數(shù)) - 終端顯示
waiting for connection
,看到這兒虐秦,抓緊時間看下一步的砸殼喔譬猫,否則連接就會超時
砸殼
- 確保 iOS 設(shè)備一直保持 USB 連接,并將想要砸殼的應(yīng)用打開羡疗,保證顯示在前臺染服,否則可能出現(xiàn)找不到應(yīng)用,導致砸殼失敗
- 使用
Anaconda
的 zyy 環(huán)境另開一個新的終端 - cd 到之前下載的 frida-ios-dump 目錄
- 執(zhí)行
./dump.py 微信
(這里將微信改成你想砸殼的應(yīng)用名即可) - 如果發(fā)現(xiàn)應(yīng)用名稱重復了怎么辦叨恨?終端執(zhí)行
./dump.py -l
可以查看已安裝的應(yīng)用名稱和對應(yīng)的 bundle Id
PID Name Identifier
----- ------------------------- ----------------------------------------
9661 App Store com.apple.AppStore
16977 Moment com.kevinholesh.Moment
1311 Safari com.apple.mobilesafari
16586 信息 com.apple.MobileSMS
4147 微信 com.tencent.xin
10048 相機 com.apple.camera
7567 設(shè)置 com.apple.Preferences
- CrashReporter crash-reporter
- Cydia com.saurik.Cydia
- 通訊錄 com.apple.MobileAddressBook
- 郵件 com.apple.mobilemail
- 音樂 com.apple.Music
- 執(zhí)行如下命令柳刮,對指定的 bundle id 應(yīng)用進行砸殼,
./dump.py -b com.tencent.xin
- 砸殼成功痒钝,可以在
frida-ios-dump
目錄下找到 xxx.ipa
如何判斷 ipa 是否有殼
- 將 ipa 文件后綴改為 zip 進行解壓
- 找到 xx.app 包內(nèi)容下的 xx 二進制可執(zhí)行文件(abc 是我隨便取的)
- 在終端執(zhí)行
otool -l xx | grep crypt
- 找到
cryptid
這一行秉颗,有殼為 1,已脫殼為 0
如果能成功走到這一步送矩,恭喜蚕甥,砸殼成功啦。