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