天天看點

iOS安全攻防(十九):基于腳本實作動态庫注入

基于腳本實作動态庫注入

MobileSubstrate可以幫助我們加載自己的動态庫,于是開發者們謹慎的采取了對MobileSubstrate的檢索和防禦措施。

那麼,除了依靠MobileSubstrate幫忙注入dylib,還有别的攻擊入口嗎?

iOS安全攻防(十九):基于腳本實作動态庫注入

理理思路,條件、目的很明确:

1)必須在應用程式啟動之前,把dylib的環境變量配置好

2)dylib的位置必須能被應用程式放問到

3)最後再啟動應用程式

iOS安全攻防(十九):基于腳本實作動态庫注入

啊哈,原汁原味,走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 [email protected] 别忘了把原來的參數保留
exec "${C:-.}"/oriPortal "[email protected]"
           

結果不盡人意,失敗了……

iOS安全攻防(十九):基于腳本實作動态庫注入

錯誤資訊如下:

iOS安全攻防(十九):基于腳本實作動态庫注入

在打開某個加密資訊時出了錯誤,大概猜一下應該是類似加密簽名校驗的步驟,但是我們無法去了解其中詳細的操作到底是什麼樣的,沒關系,那麼就把原始的可執行檔案環境全部給他造出來,因為檢驗檔案屬性肯定不會帶着路徑資訊的。

備份一份Portal.app目錄Portal_ori.app,修改腳本為:

#!/bin/bash
C=$0
C=${C%/*}
export DYLD_INSERT_LIBRARIES=${C:-.}/wq.dylib
exec "${C:-.}"/../Portal_ori.app/Portal "[email protected]"           

運作支付寶app驗證一下,

好消息是,在iOS6上,成功加載了動态庫wq.dylib

壞消息是,在iOS7上,失敗了,錯誤資訊如下:

iOS安全攻防(十九):基于腳本實作動态庫注入

應該是因為iOS7的沙盒機制升了級,把我們這套小把戲攔在門外了……

iOS安全攻防(十九):基于腳本實作動态庫注入

那又怎麼樣,面包總會有的~