你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS安全攻防(十二):iOS7的動態庫注入

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

編輯:IOS開發綜合

iOS7的動態庫注入



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

#import 
#import 

@implementation UIViewController (HookPortal)

-(void)myViewDidLoad
{
    NSLog(@"----------------------- myViewDidLoad ----------------------");
}

@end

static void __attribute__((constructor)) initialize(void)
{
    NSLog(@"======================= initialize ========================");
    
    Class class = objc_getClass("ALPLauncherController");
    Method ori_Method =  class_getInstanceMethod(class, @selector(viewDidLoad));
    Method my_Method = class_getInstanceMethod(class, @selector(myViewDidLoad));
    method_exchangeImplementations(ori_Method, my_Method);
}



編譯dylib


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

ld -dylib -lsystem -lobjc  -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/ -o libwq.dylib xxx.o



安置、驗證dylib


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

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

    void *handle = (void*)dlopen("/Library/MobileSubstrate/DynamicLibraries/libwq.dylib", 0x2);
    handle = dlsym(handle, "myViewDidLoad");
    if (handle) {
        NSLog(@"++++");
    }else{
        NSLog(@"----");
    }




運行檢驗效果


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

killall SpringBoard

啟動支付寶app,然後觀察log信息:

Portal[3631] : MS:Notice: Injecting: com.alipay.iphoneclient [Portal] (847.21)
Portal[3631] : MS:Notice: Loading: /Library/MobileSubstrate/DynamicLibraries/libwq.dylib
Portal[3631] : ======================= initialize ========================
Portal[3631] : ----------------------- myViewDidLoad ----------------------

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

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




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved