iOS逆向之Reveal狗超、Hopper、MachOView等逆向工具的安裝使用

一逗嫡、Reveal

1询微、Reveal簡(jiǎn)介和下載

Reveal是一款調(diào)試iOS程序UI界面的神器。
官網(wǎng):https://revealapp.com 官網(wǎng)下載:https://revealapp.com/download/

建議下載至少Reveal4版本统屈,支持USB連接調(diào)試胚吁,速度快。低版本的只能WiFi連接調(diào)試愁憔。
百度云下載:Reveal4 提取密碼:b31u

2腕扶、越獄手機(jī)配置

1)Reveal Loader安裝

首先我們打款越獄設(shè)備的Cydia,然后在搜索中輸入Reveal Loader吨掌,并且進(jìn)行安裝即可半抱,下方是安裝后的效果。這一步比較簡(jiǎn)單膜宋,安裝后重啟SpringBoard即可窿侈。如果安裝的Reveal Loader不支持新版的Reveal,也可以在該軟件源上安裝:http://apt.so/codermjlee

2)打開需要調(diào)試的APP

圖1:安裝Reveal Loader.png

3)導(dǎo)入libReveal.dylib

  • 找到Mac的Reveal中的RevealServer文件秋茫,覆蓋iPhone的/Library/RHRevealLoader/RevealServer文件
  • 重啟SpringBoard或者重啟手機(jī)史简,可以在iPhone上輸入終端命令
  • 重啟SpringBoard:killall SpringBoard ;重啟手機(jī):reboot
圖2:導(dǎo)入libReveal.dylib.png

4)開始調(diào)試APP

手機(jī)上打開需要調(diào)試的app肛著,保持在前臺(tái)狀態(tài)圆兵;然后mac上Reveal會(huì)顯示對(duì)應(yīng)的應(yīng)用圖標(biāo),點(diǎn)擊圖標(biāo)枢贿,就能查看該APP的UI層級(jí)圖了

圖3:Reveal調(diào)試APP.png

二殉农、class-dump

顧名思義,它的作用就是把Mach-O文件的class信息給dump出來(lái)(把類信息給導(dǎo)出來(lái))局荚,生成對(duì)應(yīng)的.h頭文件超凳。官方地址:http://stevenygard.com/projects/class-dump/

下載完工具包后將class-dump文件復(fù)制到Mac的/usr/local/bin目錄,這樣在終端就能識(shí)別class-dump命令了

圖4:下載class-dump.png

常用格式用法:`class-dump -H Mach-O文件路徑 -o 頭文件存放目錄``

  • -H表示要生成頭文件
  • -o用于制定頭文件的存放目錄
圖5:class-dump的使用.png

三、Hopper Disassmbler

使用Hopper Disassembler, 通過(guò)將匯編代碼轉(zhuǎn)成偽代碼聪建,了解其他App的實(shí)現(xiàn), 以學(xué)習(xí)他人優(yōu)秀的精髓之處

已上傳網(wǎng)盤:Hopper+4.0.8 網(wǎng)盤密碼:zr4t

1钙畔、基本使用

1)打開Mach-o可執(zhí)行文件

可以先選擇適用版本的Hopper Disassmbler,然后打開ipa文件中的可執(zhí)行文件

圖6:打開Hopper Disassmbler.png

2)查看對(duì)應(yīng)偽代碼

待Hopper Disassmbler掃描完之后(可以在右下腳查看金麸,是否還在working中)擎析。首次掃描建議使用簡(jiǎn)單的包,先熟悉入口挥下,大的包掃描時(shí)間較久揍魂,而且還容易出問題。然后按照?qǐng)D片中的操作就可以查看偽代碼了棚瘟。

圖7:查看偽代碼.png

2现斋、使用Python 腳本導(dǎo)出偽代碼

Class Decompile是一個(gè)用于Hopper反匯編器的python腳本。這個(gè)腳本可以導(dǎo)出類的偽代碼偎蘸。
GitHub鏈接: https://github.com/poboke/Class-Decompile

  • 1)將下載的Class Decompile.py文件放到~/Library/Application Support/Hopper/Scripts目錄里庄蹋。

  • 2)將可執(zhí)行文件拖到Hopper里,等待分析完成迷雪。如果日志框里出現(xiàn)以下文字限书,就說(shuō)明分析完成了:

Analysis segment __LINKEDIT
Analysis segment External Symbols
Background analysis ended
  • 3)點(diǎn)擊菜單 Scripts –> Class Decompile :
圖8:點(diǎn)擊菜單 Scripts –> Class Decompile :.png
  • 4)Hopper會(huì)出現(xiàn)一個(gè)彈框,可以選擇反編譯類型:
圖9:選擇反編譯類型.png
- Decompile All Classes : 反編譯所有類
- Decompile One Class : 反編譯單個(gè)類
- Cancel : 取消
  • 5)如果選擇反編譯單個(gè)類的話章咧,會(huì)出現(xiàn)以下彈框:
圖10:選擇反編譯單個(gè)類.png

輸入某個(gè)類名后倦西,點(diǎn)擊 OK 按鈕就可以反編譯出該類的偽代碼。

  • 6)反編譯出來(lái)的偽代碼保存在~/ClassDecompiles目錄里赁严。
  • 7)打開反編譯的文件扰柠,例如CalculatorController.m,可以看到生成的偽代碼:
@implementation TTFQuizShowLiveRoomViewModel
- (void)setCurSignCount:(id)arg2 
{
    STK35 = r7;
    r7 = &arg_C;
    STK37 = r8;
    sp = sp + 0xfffffffffffffffc - 0x4;
    r8 = self;
    r0 = *objc_ivar_offset_TTFQuizShowLiveRoomViewModel__curSignCount;
    *(r8 + r0) = arg2;
    *0x88 = r3;
    var_0 = r3;
    loc_e09f98(NSString, @selector(stringWithFormat:), cfstring__, arg2, STK37, lr, STK35, r6, r5, r4);
    r5 = loc_e09f9c();
    loc_e09f98(r8, @selector(curSignCountStr));
    r7 = r7;
    r6 = loc_e09f9c();
    r1 = @selector(isEqualToString:);
    r4 = loc_e09f98(r5, r1, r6);
    loc_e09f94(r6);
    if (r4 == 0x0) {
            r1 = @selector(setCurSignCountStr:);
            loc_e09f98(r8, r1, r5);
    }
    r0 = r5;
    Pop();
    Pop();
    Pop();
    Pop();
    Pop();
    r0 = loc_1be412c(r0, r1);
    return;
}
@end

四疼约、MachOView

1卤档、MachOView的下載安裝

MachOView工具可Mac平臺(tái)中可查看MachO文件格式信息,IOS系統(tǒng)中可執(zhí)行程序?qū)儆贛ach-O文件格式忆谓,有必要介紹如何利用工具快速查看Mach-O文件格式裆装。MachOView工具屬于免費(fèi)開源項(xiàng)目踱承。
源代碼可在https://github.com/gdbinit/MachOView下載
或者直接下載別人封裝好的:https://github.com/fangshufeng/MachOView/releases

將“MachOView”拖到Application文件夾倡缠,就可以像其他程序一樣啟動(dòng)了

2、MachOView的使用

1)打開MachOView

點(diǎn)擊MachOView工具的主菜單“File”中的“Open”選項(xiàng)便可加載IOS平臺(tái)可執(zhí)行文件

圖11:打開MachOView.png

2)文件頭信息

MachOView工具成功加載Mach-O文件之后茎活,每個(gè).o文件對(duì)應(yīng)一個(gè)類編譯后的文件昙沦,展開每個(gè)類后,在左邊窗口點(diǎn)擊“Mach Header”選項(xiàng)载荔,可以看到每個(gè)類的cpu架構(gòu)信息盾饮、load commands數(shù)量 、load commandssize 、file type等信息丘损。 如上圖所示普办。

五、Mach-O文件介紹

1徘钥、Mach-O介紹

Mach-O是Mach object的縮寫衔蹲,是Mac\iOS上用于存儲(chǔ)程序、庫(kù)的標(biāo)準(zhǔn)格式
屬于Mach-O格式的文件類型有

圖12:屬于Mach-O格式的文件類型.png

可以在xnu源碼中呈础,查看到Mach-O格式的詳細(xì)定義(https://opensource.apple.com/tarballs/xnu/
EXTERNAL_HEADERS/mach-o/fat.h
EXTERNAL_HEADERS/mach-o/loader.h

2舆驶、常見的Mach-O文件類型

  • MH_OBJECT

    • 目標(biāo)文件(.o)
    • 靜態(tài)庫(kù)文件(.a),靜態(tài)庫(kù)其實(shí)就是N個(gè).o合并在一起
  • MH_EXECUTE:可執(zhí)行文件

    • .app/xx
  • MH_DYLIB:動(dòng)態(tài)庫(kù)文件

    • .dylib
    • .framework/xx
  • MH_DYLINKER:動(dòng)態(tài)鏈接編輯器

    • /usr/lib/dyld
  • MH_DSYM:存儲(chǔ)著二進(jìn)制文件符號(hào)信息的文件

    • .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)
圖13:可執(zhí)行文件的生成.png

3而钞、Mach-O的基本結(jié)構(gòu)

官方描述:https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/MachOTopics/0-Introduction/introduction.html

一個(gè)Mach-O文件包含3個(gè)主要區(qū)域:

  • Header :文件類型沙廉、目標(biāo)架構(gòu)類型等

  • Load commands:描述文件在虛擬內(nèi)存中的邏輯結(jié)構(gòu)、布局

  • Raw segment data:在Load commands中定義的Segment的原始數(shù)據(jù)

4臼节、窺探Mach-O的結(jié)構(gòu)

命令行工具

  • file:查看Mach-O的文件類型撬陵。file 文件路徑

  • otool:查看Mach-O特定部分和段的內(nèi)容

  • lipo:常用于多架構(gòu)Mach-O文件的處理

    • 查看架構(gòu)信息:lipo -info 文件路徑
    • 導(dǎo)出某種特定架構(gòu):lipo 文件路徑 -thin 架構(gòu)類型 -output 輸出文件路徑
    • 合并多種架構(gòu):lipo 文件路徑1 文件路徑2 -output 輸出文件路徑

4、Universal Binary(通用二進(jìn)制文件)

通用二進(jìn)制文件网缝。同時(shí)適用于多種架構(gòu)的二進(jìn)制文件袱结。包含了多種不同架構(gòu)的獨(dú)立的二進(jìn)制文件。
因?yàn)樾枰獌?chǔ)存多種架構(gòu)的代碼途凫,通用二進(jìn)制文件通常比單一平臺(tái)二進(jìn)制的程序要大垢夹。
由于兩種架構(gòu)有共同的一些資源,所以并不會(huì)達(dá)到單一版本的兩倍之多维费。
因?yàn)槲募仍瓉?lái)的要大果元,也被稱為“胖二進(jìn)制文件”(Fat Binary)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末犀盟,一起剝皮案震驚了整個(gè)濱河市而晒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阅畴,老刑警劉巖倡怎,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異贱枣,居然都是意外死亡监署,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門纽哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钠乏,“玉大人,你說(shuō)我怎么就攤上這事春塌∠埽” “怎么了簇捍?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)俏拱。 經(jīng)常有香客問我暑塑,道長(zhǎng),這世上最難降的妖魔是什么锅必? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任梯投,我火速辦了婚禮,結(jié)果婚禮上况毅,老公的妹妹穿的比我還像新娘分蓖。我一直安慰自己,他們只是感情好尔许,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布么鹤。 她就那樣靜靜地躺著,像睡著了一般味廊。 火紅的嫁衣襯著肌膚如雪蒸甜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天余佛,我揣著相機(jī)與錄音柠新,去河邊找鬼。 笑死辉巡,一個(gè)胖子當(dāng)著我的面吹牛恨憎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播郊楣,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼憔恳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了净蚤?” 一聲冷哼從身側(cè)響起钥组,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎今瀑,沒想到半個(gè)月后程梦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橘荠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年屿附,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾医。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拿撩,死狀恐怖衣厘,靈堂內(nèi)的尸體忽然破棺而出如蚜,到底是詐尸還是另有隱情压恒,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布错邦,位于F島的核電站探赫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏撬呢。R本人自食惡果不足惜伦吠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魂拦。 院中可真熱鬧毛仪,春花似錦、人聲如沸芯勘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荷愕。三九已至衡怀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間安疗,已是汗流浹背抛杨。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荐类,地道東北人怖现。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像玉罐,于是被迫代替她去往敵國(guó)和親真竖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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