標籤:blog http io ar os for java on 檔案
Mach-O (Mach object) file format?
這種格式的中文資料很少,最詳細的還是蘋果的官方文檔,本文不重複解釋mach-o檔案格式的內容,只敘述在用ida逆向ios應用程式時的經驗。
mach-o詳細文檔參考:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html
?mach-o格式可以包含多個目標平台的可執行代碼,比如同時包含arm64與arm7的可執行代碼。
?
實驗1:我們首先產生一個包含2中平台的app,通過對比對同一個app 載入不同的架構代碼進行對比分析。
當用多目標平台產生一個ios應用程式後,將其拖入到ida中,如所示:
?
?
?ida識別到兩種架構的代碼。
先讓ida載入arm7平台的代碼
?
?
?在右面的十六進位視窗可以看到mach-o檔案的魔數。在左下角的位置顯示魔數在檔案位移4000的位置,可以知道可執行檔從位移4000的位置開始將檔案對應到記憶體(從0開始)。
然後開啟段視窗查看檔案對應到記憶體的布局
從ida段視窗可以清楚的看到各個可執行檔各個節的載入情況。
然後我們關閉ida,重新選擇arm64載入可執行檔。
載入後我們可以知道 arm64架構的代碼從檔案位移14000開始的位置映射到記憶體。
(兩種架構的段,可以發現有一些不一樣的地方,就是arm64架構多了一個got節。這個節的作用待補充。)
好了,我們現在知道檔案位移4000-14000的位置屬於 arm7架構部分,14000-end 屬於arm64架構部分,那麼0-4000位置存放的是什麼內容呢?
用16進位編輯器開啟檔案:
CAFEBABE?是不是很熟悉?是java的魔數,至於0-4000的內容到底是什麼,帶著疑問繼續學校mach-o檔案。
實驗2:產生一個單一平台的應用,查看其檔案組織形式。
步驟如實驗1所示,將產生的app拖到ida。
?
?
?由此我們可以得出一個結論,就是單平台的ios 應用檔案 沒有實驗1中檔案的0-4000資料。
iOS可執行檔格式初探