iOS安全攻防(十二):iOS7的動態庫注入

發表於2014-02-13

iOS系統不斷升級,結構不斷調整,所以我們可以利用的動態庫注入方法也根據系統版本的不同而不同。

在此之前,我們可以利用環境變數 DYLD_INSERT_LIBRARY 來新增動態庫,iOS7被成功越獄後,我們需要自己去探索實踐iOS7動態庫注入的方式。

本文將在iOS7.0.4環境下,以 hook 支付寶app 程式中 ALPLauncherController 的檢視載入方法為例,介紹在iOS7下,如何實現動態庫注入攻擊。

相關工具位置資訊

先總結羅列一下相關編譯、連結工具的位置路徑資訊,在各位自行下載的iOS SDK中

clang  :    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang

gcc     :    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2

ld         :   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld

sdk     :   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/

動態庫源程式

我們編寫一個 hook 支付寶app 程式中 ALPLauncherController 的 viewDidLoad 方法,具體方法是利用 Method Swizzling 。

不熟悉 Method Swizzling 的話,可以參看我之前的這篇文章:Objective-C的hook方案(一): Method Swizzling

編譯dylib

我們可以利用xcode直接幫忙編譯.o,或者自己手動使用clang編譯,然後手動ld:

安置、驗證dylib

將編譯好的 libwq.dylib 拷貝到iPhone 檔案系統中 /Library/MobileSubstrate/DynamicLibraries/ 下

如果不放心庫是否能正常工作,可以加一步驗證操作,寫一個demo嘗試開啟自己的庫:

執行檢驗效果

到了驗證效果的時候,重啟裝置後者執行:

啟動支付寶app,然後觀察log資訊:

證明我們的動態庫已經被載入, 我們的Hook 也成功了。

剩下的就要自己去思考了,除了加句無聊的Log,我們還可以做點什麼呢?

 

相關文章