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

一、Reveal

1、Reveal簡介和下載

Reveal是一款調試iOS程序UI界面的神器。
官網:https://revealapp.com 官網下載:https://revealapp.com/download/

建議下載至少Reveal4版本,支持USB連接調試,速度快。低版本的只能WiFi連接調試。
百度云下載:Reveal4 提取密碼:b31u

2、越獄手機配置

1)Reveal Loader安裝

首先我們打款越獄設備的Cydia,然后在搜索中輸入Reveal Loader,并且進行安裝即可,下方是安裝后的效果。這一步比較簡單,安裝后重啟SpringBoard即可。如果安裝的Reveal Loader不支持新版的Reveal,也可以在該軟件源上安裝:http://apt.so/codermjlee

2)打開需要調試的APP

圖1:安裝Reveal Loader.png

3)導入libReveal.dylib

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

4)開始調試APP

手機上打開需要調試的app,保持在前臺狀態;然后mac上Reveal會顯示對應的應用圖標,點擊圖標,就能查看該APP的UI層級圖了

圖3:Reveal調試APP.png

二、class-dump

顧名思義,它的作用就是把Mach-O文件的class信息給dump出來(把類信息給導出來),生成對應的.h頭文件。官方地址:http://stevenygard.com/projects/class-dump/

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

圖4:下載class-dump.png

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

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

三、Hopper Disassmbler

使用Hopper Disassembler, 通過將匯編代碼轉成偽代碼,了解其他App的實現, 以學習他人優秀的精髓之處

已上傳網盤:Hopper+4.0.8 網盤密碼:zr4t

1、基本使用

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

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

圖6:打開Hopper Disassmbler.png

2)查看對應偽代碼

待Hopper Disassmbler掃描完之后(可以在右下腳查看,是否還在working中)。首次掃描建議使用簡單的包,先熟悉入口,大的包掃描時間較久,而且還容易出問題。然后按照圖片中的操作就可以查看偽代碼了。

圖7:查看偽代碼.png

2、使用Python 腳本導出偽代碼

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

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

  • 2)將可執行文件拖到Hopper里,等待分析完成。如果日志框里出現以下文字,就說明分析完成了:

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

輸入某個類名后,點擊 OK 按鈕就可以反編譯出該類的偽代碼。

  • 6)反編譯出來的偽代碼保存在~/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平臺中可查看MachO文件格式信息,IOS系統中可執行程序屬于Mach-O文件格式,有必要介紹如何利用工具快速查看Mach-O文件格式。MachOView工具屬于免費開源項目。
源代碼可在https://github.com/gdbinit/MachOView下載
或者直接下載別人封裝好的:https://github.com/fangshufeng/MachOView/releases

將“MachOView”拖到Application文件夾,就可以像其他程序一樣啟動了

2、MachOView的使用

1)打開MachOView

點擊MachOView工具的主菜單“File”中的“Open”選項便可加載IOS平臺可執行文件

圖11:打開MachOView.png

2)文件頭信息

MachOView工具成功加載Mach-O文件之后,每個.o文件對應一個類編譯后的文件,展開每個類后,在左邊窗口點擊“Mach Header”選項,可以看到每個類的cpu架構信息、load commands數量 、load commandssize 、file type等信息。 如上圖所示。

五、Mach-O文件介紹

1、Mach-O介紹

Mach-O是Mach object的縮寫,是Mac\iOS上用于存儲程序、庫的標準格式
屬于Mach-O格式的文件類型有

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

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

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

  • MH_OBJECT

    • 目標文件(.o)
    • 靜態庫文件(.a),靜態庫其實就是N個.o合并在一起
  • MH_EXECUTE:可執行文件

    • .app/xx
  • MH_DYLIB:動態庫文件

    • .dylib
    • .framework/xx
  • MH_DYLINKER:動態鏈接編輯器

    • /usr/lib/dyld
  • MH_DSYM:存儲著二進制文件符號信息的文件

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

3、Mach-O的基本結構

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

一個Mach-O文件包含3個主要區域:

  • Header :文件類型、目標架構類型等

  • Load commands:描述文件在虛擬內存中的邏輯結構、布局

  • Raw segment data:在Load commands中定義的Segment的原始數據

4、窺探Mach-O的結構

命令行工具

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

  • otool:查看Mach-O特定部分和段的內容

  • lipo:常用于多架構Mach-O文件的處理

    • 查看架構信息:lipo -info 文件路徑
    • 導出某種特定架構:lipo 文件路徑 -thin 架構類型 -output 輸出文件路徑
    • 合并多種架構:lipo 文件路徑1 文件路徑2 -output 輸出文件路徑

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

通用二進制文件。同時適用于多種架構的二進制文件。包含了多種不同架構的獨立的二進制文件。
因為需要儲存多種架構的代碼,通用二進制文件通常比單一平臺二進制的程序要大。
由于兩種架構有共同的一些資源,所以并不會達到單一版本的兩倍之多。
因為文件比原來的要大,也被稱為“胖二進制文件”(Fat Binary)。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容