鍍金池/ 教程/ iOS/ 基于腳本實(shí)現(xiàn)動態(tài)庫注入
Hack 實(shí)戰(zhàn)——支付寶 App 手勢密碼校驗(yàn)欺騙
使用 Reveal 分析他人 App
后臺 daemon 非法竊取用戶 iTunesstore 信息
使用 iNalyzer 分析應(yīng)用程序
越獄檢測的攻與防
使用 introspy 追蹤分析應(yīng)用程序
廢除應(yīng)用程序的 ASLR 特性
使用 Cycript 修改支付寶 App 運(yùn)行時
敏感邏輯的保護(hù)方案
Fishhook
使用 class-dump-z 分析支付寶 App
static 和被裁的符號表
iOS7 的動態(tài)庫注入
二進(jìn)制和資源文件自檢
Hack 實(shí)戰(zhàn)——探究支付寶 App 手勢密碼
使用 Keychain-Dumper 導(dǎo)出 keychain 數(shù)據(jù)
數(shù)據(jù)擦除
Hack 實(shí)戰(zhàn)——解除支付寶 App 手勢解鎖錯誤次數(shù)限制
Objective-C 代碼混淆
阻止 GDB 依附
基于腳本實(shí)現(xiàn)動態(tài)庫注入
Hack 必備的命令與工具
鍵盤緩存與安全鍵盤
數(shù)據(jù)保護(hù) API

基于腳本實(shí)現(xiàn)動態(tài)庫注入

MobileSubstrate 可以幫助我們加載自己的動態(tài)庫,于是開發(fā)者們謹(jǐn)慎的采取了對 MobileSubstrate 的檢索和防御措施。

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

http://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection1.png" alt="sript-injection1" />

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

1)必須在應(yīng)用程序啟動之前,把 dylib 的環(huán)境變量配置好
2)dylib 的位置必須能被應(yīng)用程序放問到
3)最后再啟動應(yīng)用程序

http://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection2.png" alt="sript-injection2" />

啊哈,原汁原味,走 bash!

在點(diǎn)擊應(yīng)用程序圖標(biāo)-->程序啟動這個過程中,在我們看來程序是被動執(zhí)行的。為了讓特定功能的腳本被執(zhí)行,我們可以把腳本改成應(yīng)用程序二進(jìn)制的名字偽裝成應(yīng)用程序,讓系統(tǒng)調(diào)用啟動。在腳本中,配置好 dylib ,然后再手動啟動真的應(yīng)用程序,假裝什么也沒發(fā)生,揮一揮衣袖不帶走一片云彩~ 將真的支付寶程序改名為 oriPortal :

mv Portal oriPortal

將待執(zhí)行的腳本改名為支付寶:

mv Portal.sh Portal

腳本代碼:

#!/bin/bash  

#得到第一個參數(shù)  
C=$0  

#第一個參數(shù)是二進(jìn)制的絕對路徑 比如 :  
#/private/var/mobile/Applications/4763A8A5-2E1D-4DC2-8376-6CB7A8B98728/Portal.app/  
#截取最后一個 / 之前的內(nèi)容  
C=${C%/*}  

#庫和二進(jìn)制放在一起  
export DYLD_INSERT_LIBRARIES=${C:-.}/wq.dylib  
#執(zhí)行原來APP $@ 別忘了把原來的參數(shù)保留  
exec "${C:-.}"/oriPortal "$@"  

結(jié)果不盡人意,失敗了……h(huán)ttp://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection3.png" alt="sript-injection3" />

錯誤信息如下: http://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection6.png" alt="sript-injection6" />

在打開某個加密信息時出了錯誤,大概猜一下應(yīng)該是類似加密簽名校驗(yàn)的步驟,但是我們無法去了解其中詳細(xì)的操作到底是什么樣的,沒關(guān)系,那么就把原始的可執(zhí)行文件環(huán)境全部給他造出來,因?yàn)闄z驗(yàn)文件屬性肯定不會帶著路徑信息的。

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

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

運(yùn)行支付寶 app 驗(yàn)證一下, 好消息是,在 iOS6 上,成功加載了動態(tài)庫 wq.dylib 壞消息是,在 iOS7 上,失敗了

錯誤信息如下: http://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection7.png" alt="sript-injection7" />

應(yīng)該是因?yàn)?iOS7 的沙盒機(jī)制升了級,把我們這套小把戲攔在門外了……
http://wiki.jikexueyuan.com/project/ios-security-defense/images/script-injection8.png" alt="sript-injection8" />

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