從App Store上下載的ipa裏面的二進制文件是通過加密的,class-dump和Hopper Disassembler都須要用到未加密的二進制文件,須要經過砸殼獲得。網上敲殼教程仍是挺多的,幾乎都差很少,但都太舊了都沒有更新,例如在iOS10.2下,傳統的dumpdecrypted砸殼就會有問題,須要加點其它操做才能敲成功。html
使用能夠otool
來查看,otool -l 二進制文件路徑 | grep -B 2 crypt
ios
$ otool -l WeChat.app/WeChat | grep -B 2地穴
cmd LC_ENCRYPTION_INFO
cmdsize 20
cryptoff 16384
cryptsize 49463296
cryptid 1
—
cmd LC_ENCRYPTION_INFO_64
cmdsize 24
cryptoff 16384
cryptsize 53149696
cryptid 1
複製代碼
cryptid爲1時說明被加密,爲0時則是未加密。能夠看到微信已經被加密了,第一個對應的是較老的armv7架構,後者則是arm64架構。被加密的二進制文件直接拿起來就擼是沒用的,須要先敲殼。git
確保iPhone和Mac在同一個網段,個人iPhone的IP地址爲192.168.1.22.OpenSSH的root密碼默認爲alpine
。程序員
$ ssh root@192.168.1.22
root@192.168.1.22的密碼:
Dankal-Device-5s:~root#
複製代碼
這個時候已經順利獲取了iPhone的root權限,root至關於Windows中的管理員,權限最高,可讀寫。github
ssh相關的問題請看以前寫過的「iOS10.2 SSH鏈接越獄設備」,這裏就很少闡述。面試
iPhone打開微信,後臺結束其餘APP進程,控制檯輸入ps ax
或者ps -e
sass
Dankal-Device-5s:~root#ps -e
PID TTY TIME CMD
1 ?? 0:26.19 / sbin / launchd
21 ?? 0:01.77 / usr / sbin / syslogd
42 ?? 0:17.65 / usr / libexec / logd
44 ?? 0:00.08 /System/Library/PrivateFrameworks/MobileSoftwareUpdate.framework/Support/softwareupdated
...
1190 ?? 0:08.03 / 變種 /容器/捆綁/應用/ 46316B03 -5DC3- 4534 -8D40-A29FE9315E22 / WeChat.app /微信
...
1391 ?? ?? 0:00.17 / usr / local / bin / dropbear -F -R -p 22
1392 ttys000 0:00.04 -sh
1401 ttys000 0:00.01 ps -e
1020 ttys001 0:00.02 login -fp mobile
1021 ttys001 0:00.06 -SH
複製代碼
找到微信的的進程,記住PID爲1190,Bundle路徑爲/var/containers/Bundle/Application/46316B03-5DC3-4534-8D40-A29FE9315E22/WeChat.app/WeChat
安全
Dankal-Device- 5 s: ~root #cygcript - p 1190
CY#
複製代碼
看到cy#
的出現就說明,成功勾住了微信的進程。bash
經過Cycript與進程交互動態獲取應用的沙盒路徑,輸入如下任一行代碼。服務器
[NSHomeDirectory() stringByAppendingString:@"/Documents"]
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0]
cy#[NSHomeDirectory()stringByAppendingStrin g: @ 「/ Documents」 ]
@ 「/ var / mobile / Containers / Data / Application / E2ABB23B-EC66-4DA4-AD3E-E14E20D680B5 / Documents」
複製代碼
出來顯示的字符串即爲沙盒品路徑。
敲殼的最重要的東西就是dumpdecrypted.dylib,確保從Github上下載了最新的dumpdecrypted源碼,解壓後進入dumpdecrypted文件夾的跟目錄,make編譯dumpdecrypted.dylib。
$ cd / Users / bingo / Downloads / dumpdecrypted-master
$ make
`xcrun --sdk iphoneos - find gcc` -Os -Wimplicit -isysroot`xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path` / System /庫/框架-F`xcrun --sdk iphoneos --show-sdk-path` / System / Library / PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 - c - o dumpdecrypted。o dumpdecrypted。C
`xcrun --sdk iphoneos - find gcc` -Os -Wimplicit -isysroot`xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path` / System /庫/框架-F`xcrun --sdk iphoneos --show-sdk-path` / System / Library / PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib - o dumpdecrypted.dylib dumpdecrypted。Ø
複製代碼
結束後會在當前目錄中生成dumpdecrypted.dylib,這裏有坑,下面會說。
scp拷貝貝文件到越獄設備的沙盒路徑下,沙盒目錄剛剛用Cycript動態獲取到了,若是設備不支持scp或者出現問題,能夠參考「讓越獄設備支持scp文件傳輸」,或者使用iTools等工具實現文件傳輸,在此再也不闡述。
$ scp dumpdecrypted.dylib root@192.168.1.22:/ var / mobile / Containers / Data / Application / E2ABB23B-EC66-4DA4-AD3E-E14E20D680B5 / Documents
root@192.168.1.22的密碼:
dumpdecrypted.dylib 100%193KB 242.3KB / s 00:00
複製代碼
開始敲殼 以上都是準備工做,接下來能夠正式砸殼了。
dumpdecrypted.dylib的具體用法是:DYLD_INSERT_LIBRARIES=to/Path/dumpdecrypted.dylib to/bundlePath
Dankal-設備- 5個S: 〜根#CD的/ var /移動/容器/數據/應用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文件
Dankal-設備- 5個S:的/ var /移動/容器/數據/應用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文檔根#DYLD_INSERT_LIBRARIES = dumpdecrypted.dylib 「的/ var /容器/捆綁/應用/ 46316B03-5DC3 -4534-8D40-A29FE9315E22 / WeChat.app /微信」
dyld:沒法加載插入的庫'dumpdecrypted.dylib',由於找不到合適的圖像。沒有找到:
dumpdecrypted.dyli B:所需的代碼簽名丟失了 「dumpdecrypted.dylib」
停止陷阱:6
複製代碼
很明顯砸殼失敗了,這跟說好的不同!爲何別人砸殼成功了,而我卻砸失敗了?重複試了幾回都不成功。
因而開始找問題,首先懷疑個人設備的CPU架構不對,打開iTools能夠明顯看到是iPhone 5s,arm64,已越獄,沒毛病,若是是32位處理器的話應該是越獄不成功的。
再找問題,懷疑是yalu02越獄的時候出了問題,重啓再越獄了一遍,仍是同樣的問題。
繼續尋找,設備不支持嗎?網上搜索「iPhone5s砸殼失敗」,很失望,沒有相關的資料,搜到的全是真的手機殼的相關問題。
最後,懷疑是越獄自己就有問題,畢竟iOS 10.2是非完美越獄。因而搜「iOS 10.2 dumpdecrypted失敗」,終於摸索到相關文章,真的不容易啊,卡了一天,終於找到了解決方案。學會定位問題與使用搜索引擎對於程序員來講仍是很重要的!
dumpdecrypted對系統ios 9.3.2以上的版本砸殼失敗,會報錯Killed: 9
,解決方案
固然,咱們如今是iOS 10.2,上面的解決方案可能還有問題,最後找到正確的解決方法,就是另外下載dumpdecrypted.dylib,連接來自上面解決方案的頁面下的評論。
masbog
也許一些用戶須要最新的.dylib與iOS 10.2 sdk ... masbog.com/dumpdecrypt…和一些iOS 10.2教程:擁抱:
最終能找到問題所在我也感到很是神奇與幸運,爲了預防站長的服務器掛掉或者連接失效,我已經將.dylib上傳到了七牛雲上,cdn加速下載鏈,以防不備之需。
拷貝最新的dumpdecrypted.dylib到設備上的/usr/lib
下
$ scp dumpdecrypted.dylib root@192.168.1.22:/ usr / lib
root@192.168.1.22的密碼:
dumpdecrypted.dylib 100%193KB 410.8KB / s 00:00
複製代碼
iOS 10+:
Dankal-Device- 5 s: ldid -S /usr/lib/dumpdecrypted.dylib
複製代碼
最終一砸
Dankal-設備- 5個S:的/ var /移動/容器/數據/應用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文檔根#DYLD_INSERT_LIBRARIES = / usr / lib中/ dumpdecrypted.dylib 「的/ var /容器/包/應用程序/ 46316B03-5DC3-4534-8D40-A29FE9315E22 / WeChat.app /微信」
馬赫Ø解密自卸車
免責聲明:此工具是 只意味着用於安全研究的目的,而不是用於應用餅乾。
[+] 在內存中檢測到64位ARM二進制文件。
找到[+]偏移到 cryptid :@ 0 x1000a0ca8(從0 x1000a0000)= ca8
[+]在地址00004000處找到長度爲53149696字節的加密數據- 類型 1。
[+]打開/私有的/ var /容器/捆綁/應用/ 46316 B03- 5 DC3- 4534 - 8 D40-A29FE9315E22 / WeChat.app /微信爲讀數。
[+]閱讀標題
[+]檢測標題類型
[+]可執行是 一個 FAT圖像-搜索爲 右架構
[+]正確拱是在偏移58195968中文件
[+]開放WeChat.decrypted 用於寫入。
[+]複製文件的未加密開頭
[+]將解密的數據轉儲到文件中
[+]複製未加密的文件剩餘部分
[+] 在偏移3780 ca8 處將LC_ENCRYPTION_INFO-> cryptid設置爲 0
[+]關閉原始文件
[+]關閉轉儲文件
Dankal-設備- 5個S:的/ var /移動/容器/數據/應用/ E2ABB23B-EC66- 4 DA4-AD3E-E14E20D680B5 /文件根#
複製代碼
查當作果 砸殼完畢,會自動在當前目錄生成砸殼後的二進制文件WeChat.decrypted
$ ls
00000000000000000000000000000000 Ksid MMResourceMgr SafeMode.dat db.globalconfig
8 f9f003b02f320ae7f28b1250270eb48 LocalInfo.lst MMappedKV WeChat.decrypted mmupdateinfo.archive
複製代碼
終於砸殼完畢,說難也不難,從App Store上下載的ipa就這樣被砸掉了殼,可見所謂的Apple Store給ipa穿上的戰衣也不過如此,並無多麼安全。敲殼後的二進制文件就能夠作一些好玩的東西了,好比dump出頭文件等,接下來的文章會慢慢記錄。