ios(越獄) 應用脫殼反編譯hook教程 (系統ios11.3.1)

爲何會有這邊博文?

由於公司緣由,領導又讓我撿起荒廢了一年多的ios,瞭解對ios應用脫殼以及反編譯hook相關知識.相比於安卓的hook來講(想了解安卓hook的能夠參考個人另一篇文章),ios的hook要麻煩的多,前人栽樹後人乘涼,但願個人這邊文章能給你們對ios的hook有個清晰的認識和思路.html

一. 項目需求

本文以好久之前上架的一個練手app爲例(app有點爛,將就一下吧,點擊傳送門). app大概是這個樣子 python

在這裏插入圖片描述

點擊生成二維碼,會進入到一個生成二維碼的界面.咱們本次的任務就是篡改點擊事件,實現點擊生成二維碼,彈出一個彈窗.ios

二. 項目流程

邏輯比較清晰,參考下圖:git

在這裏插入圖片描述

三. 工具準備

1. 一臺越獄設備(不知道怎麼越獄的本身先行百度,本人試驗機是ipad 11.3.1系統)
2. 安裝要脫殼的應用
複製代碼

四. 脫殼

如下是主流的目前三種脫殼方式,前兩種貌似在高版本中都會出現問題,若是你的系統在9.0如下,能夠考慮使用,若是是9.0以上,建議使用第三種.github

1. Clutch工具靜態砸殼

這個方式主要是利用Clutch工具進行砸殼,能夠參考友軍的文章,我就不重複造輪子了.(注意高版本ios系統可能會出現kill9錯誤,沒法脫殼)api

2.dumpdecrypted.dylib動態庫 砸殼

從github上下載代碼(傳送門),編譯動態庫dumpdecrypted.dylib.利用該動態庫進行脫殼,能夠參考友軍文章,缺點是低版本有效,高版本會出現各類問題.xcode

3.frida-ios-dump 砸殼

因爲該項目是個python項目,因此須要python環境.bash

++第一步++,app

手機端

打開cydia 添加源: https://build.frida.re
打開剛剛添加的源 安裝 frida
安裝完成!檢查是否工做能夠可在手機終端運行 frida-ps -U 查看
複製代碼

++第二步:++工具

電腦端下載源碼,千萬注意這個源碼是分3.x和2.x python版本的,必定要根據本身的ptthon環境版本下載相應版本的源碼!!!

++第三步++

編譯源碼(可能會遇到各類安裝第三方庫錯誤,耐心解決近,或者下方私信我).修改dump.py文件,把ip改爲手機端ip

在這裏插入圖片描述

++第四步++:

執行脫殼命令
./dump.py 應用名稱

複製代碼

成功後就會在項目目錄中產生相應的脫殼後的ipa文件,以下圖

在這裏插入圖片描述

五. 使用Class-dump導出頭文件

第一步: 下載 Class-dump ,獲得Class-dump 運行庫

在這裏插入圖片描述

第二步,解壓咱們剛纔獲得的ipa文件(修改爲.zip解壓便可),獲得QrCode.app文件

第三步:

導出.h文件

執行命令

class-dump -H QrCode.app文件路徑 -o 導出的文件夾路徑
複製代碼

完成後就能看到導出的.h文件了

在這裏插入圖片描述

六. 分析源碼

第一步.

安裝MonkeyDev,如何安裝請參考神器開源項目[傳送門],裏面有詳細文檔

第二步.

安裝成功後您的xcode新建項目時就會出現以下圖工程:

在這裏插入圖片描述

第三步:

選擇MonkeyApp新建工程,將咱們脫殼後的ipa文件放入項目對應文件夾,其餘都不用修改,選擇真機直接運行

在這裏插入圖片描述

第四步:

調試應用,獲得掃描界面的控制器類MainController,我試圖獲取uiveiw的action,但發現他的action是動態寫在代碼中的

在這裏插入圖片描述

咱們搜索咱們上面獲得的頭文件,找到MainController.h文件,代碼以下:

在這裏插入圖片描述

能夠看到有個setListener方法和兩個uiveiw,基本咱們能夠肯定咱們須要的點擊事件就在setListener方法中.下面咱們驗證下.

第四步:

對剛纔咱們獲得的QRCode.app文件顯示包內容,能夠獲得moth-o類型的源碼文件QRCode

在這裏插入圖片描述

下載Hopper工具,將QRCode文件拖進去,就能夠查看響應的oc僞碼,以及彙編代碼.以下圖

在這裏插入圖片描述

搜索MainController,找到setListener方法,查看oc僞碼

在這裏插入圖片描述

發現他跳轉了menuAction方法,咱們雙擊點進去

在這裏插入圖片描述

能夠看到,就是經過在這裏處理跳轉事件,控制程序跳轉到下個控制,也驗證了咱們的猜測是正確的,咱們只須要攔截 setListener方法,當他點擊生成二維碼這個圖片view的時候,讓他彈個窗便可.

七.編寫hook攔截代碼

回到咱們新建的MonkeyApp工程,新建HookAlert.m文件,編寫hook邏輯,攔截代碼

在這裏插入圖片描述

運行後點擊生成二維碼查看效果:

在這裏插入圖片描述

出現彈窗,攔截成功!

補充說明:

MonkeyApp提供了多種hook的寫法,這裏咱們使用的是CaptainHook的寫法,我簡單介紹下用法(官方居然沒有詳細的api說明!)

一個單獨的hook類,大概包含如下三部分,看一查看我寫的註釋

#import <Foundation/Foundation.h>
#import <CaptainHook/CaptainHook.h>
#import <UIKit/UIKit.h>
CHDeclareClass(MainController)   //聲明hook的類
//聲明hook的方法,數字代碼參數個數,第一個參數通常是self,第二個參數表明返回值,第三個參數是類名,第四個是方法名,後面接方法參數以及類型
CHOptimizedMethod1(self, void, MainController, menuAction,id,arg1){   
    //獲取類變量view的值
    UIView* item2= CHIvar(self, _item2_bgview,__strong UIView*) ;
    UIView* item=[arg1 view];
    if(item2==item){
        //攔截 點擊事件
        UIAlertView *alert=[UIAlertView new];
        [alert setTitle:@"提示"];
        [alert setMessage:@"攔截成功"];
        [alert show];
        NSLog(@"測試成功...%@ : %@",arg1,item2);
    }else{
       // 其餘邏輯正常執行元源代碼
        CHSuper1(MainController, menuAction, arg1);
    }
}


// 構造方法, 
CHConstructor{
    CHLoadLateClass(MainController);  //再次聲明hook的類
    CHClassHook1(MainController, menuAction);  //再次聲明hook的方法

}
複製代碼

八. 總結

至此,咱們的ios從脫殼到分析再到代碼攔截就完成了,網上不少文章都是要麼寫怎麼脫殼,要麼怎麼寫hook,要麼就是寫怎麼分析,不多有一個寫全面流程的文章.但願這邊文章對你們有幫助,喜歡就伸手點個關注吧.

相關文章
相關標籤/搜索