iOS的Mach-O文件

APP的使用過程

源碼-編譯、鏈接、簽名生成app文件-zip壓縮生成IPA文件-上傳到App Store-下載到手機。

源碼-編譯、鏈接、簽名生成app文件-zip壓縮生成IPA文件-通過PP助手、iFunBox、Xcode等工具安裝到手機。

逆向APP的思路

界面分析

Cycript、Reveal

代碼分析

對Mach-O文件的靜態分析,MachOView、class-dump、Hopper Disassembler、ida等

動態調試

對運行中的APP進行代碼調試,debugserver、LLDB

代碼編寫

注入代碼到APP中,必要時還可能需要重新簽名、打包ipa

工具的使用

class-dump

顧名思義,它的作用就是把Mach-O文件的class信息給dump出來(把類信息給導出來),生成對應的.h頭文件

官方地址:http://stevenygard.com/projects/class-dump/

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

 常用格式

class-dump  -H  Mach-O文件路徑  -o  頭文件存放目錄

-H表示要生成頭文件

-o用於制定頭文件的存放目錄

Hopper Disassmbler

nHopper Disassmbler能夠將Mach-O文件的機器語言代碼反編譯成彙編代碼、OC僞代碼或者Swift僞代碼

常用快捷鍵 Shift + Option + X 找出哪裏引用了這個方法

動態庫的加載

在Mac\iOS中,是使用了/usr/lib/dyld程序來加載動態庫

dynamic link editor,動態鏈接編輯器

dynamic loader,動態加載器

https://opensource.apple.com/tarballs/dyld/

常見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的崩潰信息)

 

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

Header

文件類型、目標架構類型等

Load commands

描述文件在虛擬內存中的邏輯結構、佈局

Raw segment data

在Load commands中定義的Segment的原始數據

 

窺探Mach-O的結構

命令行工具

file:查看Mach-O的文件類型

file  文件路徑

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

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

查看架構信息:lipo  -info  文件路徑

導出某種特定架構:lipo  文件路徑  -thin  架構類型  -output  輸出文件路徑

合併多種架構:lipo  文件路徑1  文件路徑2  -output  輸出文件路徑

GUI工具

MachOView(https://github.com/gdbinit/MachOView)

APP的可執行文件、動態庫都是由dyld負責加載的

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章