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

為什么會(huì)有這邊博文?

因?yàn)楣驹?領(lǐng)導(dǎo)又讓我撿起荒廢了一年多的ios,了解對(duì)ios應(yīng)用脫殼以及反編譯hook相關(guān)知識(shí).相比于安卓的hook來(lái)說(shuō)(想了解安卓hook的可以參考我的另外一篇文章),ios的hook要麻煩的多,前人栽樹后人乘涼,希望我的這邊文章能給大家對(duì)ios的hook有個(gè)清晰的認(rèn)識(shí)和思路.

一. 項(xiàng)目需求

本文以很久以前上架的一個(gè)練手app為例(app有點(diǎn)爛,將就一下吧,點(diǎn)擊傳送門). app大概是這個(gè)樣子

在這里插入圖片描述

點(diǎn)擊生成二維碼,會(huì)進(jìn)入到一個(gè)生成二維碼的界面.我們本次的任務(wù)就是篡改點(diǎn)擊事件,實(shí)現(xiàn)點(diǎn)擊生成二維碼,彈出一個(gè)彈窗.

二. 項(xiàng)目流程

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

在這里插入圖片描述

三. 工具準(zhǔn)備

1. 一臺(tái)越獄設(shè)備(不知道怎么越獄的自己先行百度,本人試驗(yàn)機(jī)是ipad 11.3.1系統(tǒng))
2. 安裝要脫殼的應(yīng)用

四. 脫殼

以下是主流的目前三種脫殼方式,前兩種貌似在高版本中都會(huì)出現(xiàn)問(wèn)題,如果你的系統(tǒng)在9.0以下,可以考慮使用,如果是9.0以上,建議使用第三種.

1. Clutch工具靜態(tài)砸殼

這個(gè)方式主要是利用Clutch工具進(jìn)行砸殼,可以參考友軍的文章,我就不重復(fù)造輪子了.(注意高版本ios系統(tǒng)可能會(huì)出現(xiàn)kill9錯(cuò)誤,無(wú)法脫殼)

2.dumpdecrypted.dylib動(dòng)態(tài)庫(kù) 砸殼

從github上下載代碼(傳送門),編譯動(dòng)態(tài)庫(kù)dumpdecrypted.dylib.利用該動(dòng)態(tài)庫(kù)進(jìn)行脫殼,可以參考友軍文章,缺點(diǎn)是低版本有效,高版本會(huì)出現(xiàn)各種問(wèn)題.

3.frida-ios-dump 砸殼

由于該項(xiàng)目是個(gè)python項(xiàng)目,所以需要python環(huán)境.

++第一步++,

手機(jī)端

打開cydia 添加源: https://build.frida.re
打開剛剛添加的源 安裝 frida
安裝完成!檢查是否工作可以可在手機(jī)終端運(yùn)行 frida-ps -U 查看

++第二步:++

電腦端下載源碼,千萬(wàn)注意這個(gè)源碼是分3.x和2.x python版本的,一定要根據(jù)自己的ptthon環(huán)境版本下載相應(yīng)版本的源碼!!!

++第三步++

編譯源碼(可能會(huì)遇到各種安裝第三方庫(kù)錯(cuò)誤,耐心解決近,或者下方私信我).修改dump.py文件,把ip改成手機(jī)端ip

在這里插入圖片描述

++第四步++:

執(zhí)行脫殼命令
./dump.py 應(yīng)用名稱

成功后就會(huì)在項(xiàng)目目錄中產(chǎn)生相應(yīng)的脫殼后的ipa文件,如下圖

在這里插入圖片描述

五. 使用Class-dump導(dǎo)出頭文件

第一步:
下載
Class-dump
,得到Class-dump 運(yùn)行庫(kù)

在這里插入圖片描述

第二步,解壓我們剛才得到的ipa文件(修改成.zip解壓即可),得到QrCode.app文件

第三步:

導(dǎo)出.h文件

執(zhí)行命令

class-dump -H QrCode.app文件路徑 -o 導(dǎo)出的文件夾路徑

完成后就能看到導(dǎo)出的.h文件了

在這里插入圖片描述

六. 分析源碼

第一步.

安裝MonkeyDev,如何安裝請(qǐng)參考神器開源項(xiàng)目[傳送門],里面有詳細(xì)文檔

第二步.

安裝成功后您的xcode新建項(xiàng)目時(shí)就會(huì)出現(xiàn)如下圖工程:

在這里插入圖片描述

第三步:

選擇MonkeyApp新建工程,將我們脫殼后的ipa文件放入項(xiàng)目對(duì)應(yīng)文件夾,其他都不用修改,選擇真機(jī)直接運(yùn)行

在這里插入圖片描述

第四步:

調(diào)試應(yīng)用,得到掃描界面的控制器類MainController,我試圖獲取uiveiw的action,但發(fā)現(xiàn)他的action是動(dòng)態(tài)寫在代碼中的

在這里插入圖片描述

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

在這里插入圖片描述

可以看到有個(gè)setListener方法和兩個(gè)uiveiw,基本我們可以確定我們需要的點(diǎn)擊事件就在setListener方法中.下面我們驗(yàn)證下.

第四步:

對(duì)剛才我們得到的QRCode.app文件顯示包內(nèi)容,可以得到moth-o類型的源碼文件QRCode

在這里插入圖片描述

下載Hopper工具,將QRCode文件拖進(jìn)去,就可以查看響應(yīng)的oc偽碼,以及匯編代碼.如下圖

在這里插入圖片描述

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

在這里插入圖片描述

發(fā)現(xiàn)他跳轉(zhuǎn)了menuAction方法,我們雙擊點(diǎn)進(jìn)去

在這里插入圖片描述

可以看到,就是通過(guò)在這里處理跳轉(zhuǎn)事件,控制程序跳轉(zhuǎn)到下個(gè)控制,也驗(yàn)證了我們的猜想是正確的,我們只需要攔截 setListener方法,當(dāng)他點(diǎn)擊生成二維碼這個(gè)圖片view的時(shí)候,讓他彈個(gè)窗即可.

七.編寫hook攔截代碼

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

在這里插入圖片描述

運(yùn)行后點(diǎn)擊生成二維碼查看效果:

在這里插入圖片描述

出現(xiàn)彈窗,攔截成功!

補(bǔ)充說(shuō)明:

MonkeyApp提供了多種hook的寫法,這里我們使用的是CaptainHook的寫法,我簡(jiǎn)單介紹下用法(官方竟然沒有詳細(xì)的api說(shuō)明!)

一個(gè)單獨(dú)的hook類,大概包含以下三部分,看一查看我寫的注釋

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


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

}

八. 總結(jié)

至此,我們的ios從脫殼到分析再到代碼攔截就完成了,網(wǎng)上很多文章都是要么寫怎么脫殼,要么怎么寫hook,要么就是寫怎么分析,很少有一個(gè)寫全面流程的文章.希望這邊文章對(duì)大家有幫助,喜歡就伸手點(diǎn)個(gè)關(guān)注吧.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锌妻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帝美,更是在濱河造成了極大的恐慌,老刑警劉巖跛梗,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件移国,死亡現(xiàn)場(chǎng)離奇詭異蛤育,居然都是意外死亡篇恒,警方通過(guò)查閱死者的電腦和手機(jī)扶檐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胁艰,“玉大人款筑,你說(shuō)我怎么就攤上這事√诿矗” “怎么了奈梳?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)解虱。 經(jīng)常有香客問(wèn)我攘须,道長(zhǎng),這世上最難降的妖魔是什么饭寺? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任阻课,我火速辦了婚禮,結(jié)果婚禮上艰匙,老公的妹妹穿的比我還像新娘。我一直安慰自己抹恳,他們只是感情好员凝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奋献,像睡著了一般健霹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓶蚂,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天糖埋,我揣著相機(jī)與錄音,去河邊找鬼窃这。 笑死瞳别,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杭攻。 我是一名探鬼主播祟敛,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兆解!你這毒婦竟也來(lái)了馆铁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锅睛,失蹤者是張志新(化名)和其女友劉穎埠巨,沒想到半個(gè)月后历谍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辣垒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年望侈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乍构。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甜无,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哥遮,到底是詐尸還是另有隱情岂丘,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布眠饮,位于F島的核電站奥帘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仪召。R本人自食惡果不足惜寨蹋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扔茅。 院中可真熱鬧已旧,春花似錦、人聲如沸召娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玖瘸。三九已至秸讹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雅倒,已是汗流浹背璃诀。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔑匣,地道東北人劣欢。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像殖演,于是被迫代替她去往敵國(guó)和親氧秘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 兒子心想買手機(jī)趴久,他是鐵定了心思要買丸相,管他老爸教育的口水流干,年初一因?yàn)閭€(gè)手機(jī)還跟我干了一場(chǎng)嘴架彼棍,差點(diǎn)沒動(dòng)手灭忠。十三四...
    真巧港鈞閱讀 264評(píng)論 0 0
  • On my way to you again. In the comming weeks, よろしくね^_^
    張竟東閱讀 204評(píng)論 0 0
  • 欽親寶貝閱讀 187評(píng)論 0 0
  • 《肖申克的救贖》膳算,豆瓣評(píng)分9.6,常年占據(jù)著豆瓣電影排行榜第 1 名的位置弛作,多年來(lái)鮮有對(duì)手涕蜂。 一個(gè)...
    天上有神仙閱讀 425評(píng)論 0 3