Cydia Substrate 可以幫助我們加載自己的動(dòng)態(tài)庫(kù),于是開發(fā)者們謹(jǐn)慎的采取了對(duì)Cydia Substrate 的檢索和防御措施。
那么,除了依靠 Cydia Substrate 幫忙注入 dylib ,還有別的攻擊入口嗎?
理理思路,條件、目的很明確:
1)必須在應(yīng)用程序啟動(dòng)之前,把 dylib 的環(huán)境變量配置好
2)dylib 的位置必須能被應(yīng)用程序放問到
3)最后再啟動(dòng)應(yīng)用程序
啊哈,原汁原味,走 bash!
在點(diǎn)擊應(yīng)用程序圖標(biāo)-->程序啟動(dòng)這個(gè)過程中,在我們看來程序是被動(dòng)執(zhí)行的。為了讓特定功能的腳本被執(zhí)行,我們可以把腳本改成應(yīng)用程序二進(jìn)制的名字偽裝成應(yīng)用程序,讓系統(tǒng)調(diào)用啟動(dòng)。在腳本中,配置好 dylib ,然后再手動(dòng)啟動(dòng)真的應(yīng)用程序,假裝什么也沒發(fā)生,揮一揮衣袖不帶走一片云彩~ 將真的支付寶程序改名為 oriPortal :
mv Portal oriPortal
將待執(zhí)行的腳本改名為支付寶:
mv Portal.sh Portal
腳本代碼:
#!/bin/bash
#得到第一個(gè)參數(shù)
C=$0
#第一個(gè)參數(shù)是二進(jìn)制的絕對(duì)路徑 比如 :
#/private/var/mobile/Applications/4763A8A5-2E1D-4DC2-8376-6CB7A8B98728/Portal.app/
#截取最后一個(gè) / 之前的內(nèi)容
C=${C%/*}
#庫(kù)和二進(jìn)制放在一起
export DYLD_INSERT_LIBRARIES=${C:-.}/wq.dylib
#執(zhí)行原來APP $@ 別忘了把原來的參數(shù)保留
exec "${C:-.}"/oriPortal "$@"
結(jié)果不盡人意,失敗了。。。
錯(cuò)誤信息如下:
在打開某個(gè)加密信息時(shí)出了錯(cuò)誤,大概猜一下應(yīng)該是類似加密簽名校驗(yàn)的步驟,但是我們無法去了解其中詳細(xì)的操作到底是什么樣的,沒關(guān)系,那么就把原始的可執(zhí)行文件環(huán)境全部給他造出來,因?yàn)闄z驗(yàn)文件屬性肯定不會(huì)帶著路徑信息的。
備份一份 Portal.app 目錄 Portal_ori.app ,修改腳本為:
#!/bin/bash
C=$0
C=${C%/*}
export DYLD_INSERT_LIBRARIES=${C:-.}/wq.dylib
exec "${C:-.}"/../Portal_ori.app/Portal "$@"
壞消息是,失敗了
錯(cuò)誤信息如下:
應(yīng)該是因?yàn)?iOS的沙盒機(jī)制升了級(jí),把我們這套小把戲攔在門外了……
那又怎么樣,面包總會(huì)有的~