初始Mach-O

iOS APP從開發(fā)到安裝到手機的過程

1诗充、通過編譯苍蔬、鏈接、簽名生成.app文件蝴蜓,然后通過zip壓縮生成.ipa文件碟绑。

2俺猿、.ipa文件上傳AppStore下載安裝或使用iFunBox、Xcode等工具安裝格仲。

逆向APP的思路

1押袍、界面分析:通過使用Cycript、Reveal等工具進行界面層級結構等分項凯肋。

2谊惭、代碼分析:通過MachOView、class-dump侮东、Hopper Disassembler圈盔、ida等工具對Mach-O文件進行靜態(tài)分析。

3悄雅、動態(tài)調試:通過debugserver驱敲、LLDB對運行中的APP進行代碼調試。

4宽闲、編寫代碼將自己的代碼注入到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使用命令:class-dump -H Mach-O可執(zhí)行文件 -o 輸出文件夾吱殉。

代碼的編譯過程

以Objective-C為例掸冤,首先由Objective-C語言編譯成匯編語言,再由匯編語言編譯成機器語言友雳,也就是Mach-O文件稿湿。在同一種架構平臺下,每一條匯編指令都有與之對應的唯一的機器指令押赊,因此匯編語言與機器語言之間是可以準確的進行編譯和反編譯的饺藤。但從匯編語言反編譯到Objective-C只能做到大概,無法做到完全反編譯流礁。

Hopper Disassmbler

可以將Mach-O文件的機器語言代碼反編譯成匯編代碼涕俗、OC偽代碼或Swift偽代碼的工具。

動態(tài)庫共享緩存

從iOS3.1開始神帅,為了提高性能再姑,絕大部分的系統(tǒng)動態(tài)庫文件都打包放到了一個緩存文件中(dyld shared cache)。在iPhone中的路徑為/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX找御。

動態(tài)緩存庫目錄

使用動態(tài)庫共享緩存的一個非常明顯的好處就是節(jié)省內存元镀,現(xiàn)在的ida绍填、Hopper反編譯工具都可以識別動態(tài)庫共享緩存。

Mac/iOS中使用/usr/lib/dyld程序來加載動態(tài)庫栖疑,dynamic link editor動態(tài)鏈接編輯器讨永,dynamic loader動態(tài)加載器。蘋果開源了dyld源碼:https://opensource.apple.com/tarballs/dyld/遇革。我們可以使用dyld源碼中的launch-cache/dsc_extractor.cpp從動態(tài)庫共享緩存中抽取動態(tài)庫卿闹。

1、將dsc_extractor.cpp文件中的#if 0前面的代碼(包括#if 0)刪除萝快,把最后面的#endif也刪除比原。

2、編譯dsc_extractor.cpp文件杠巡,使用Mac的/usr/bin/下的clang++指令進行編譯:/usr/bin/clang++ -o dsc_extractor dsc_extractor.cpp量窘,輸出結果為dsc_extractor可執(zhí)行文件。

3氢拥、使用編譯好的dsc_extractor可執(zhí)行文件從動態(tài)庫共享緩存中抽取動態(tài)庫:./dsc_extractor dyld_shared_cache_arm64 arm64蚌铜。輸出結果將放在arm64文件夾中。

抽取結果

Mach-O簡潔

Mach-O是Mach Object的縮寫嫩海,是Mac/iOS上用于存儲程序冬殃、庫的標準格式。Mach-O常見的文件類型主要有以下幾種:

1叁怪、MH_OBJECT:包括目標文件(.o)和靜態(tài)庫文件(.a审葬,可由N個.o文件合并成在一起)。

2奕谭、MH_EXECUTE:可執(zhí)行文件涣觉。

3、MH_DYLIB:動態(tài)庫文件血柳。包括.dylib文件和.framework/xx(例如UIKit.framework下的UIKit文件)官册。

4、MH_DYLINKER:動態(tài)鏈接編輯器(位置在iPhone的/usr/lib/dyld處)难捌。

5膝宁、MH_DSYM:存儲著二進制文件符號信息的文件,例如編譯后位于.dSYM/Contents/Resources/DWARF/xx中的文件(常用于分析APP的崩潰信息)根吁。

Mach-O基本結構

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

1员淫、Header:文件類型、目標架構類型等击敌。

2介返、Load commands:描述文件在虛擬內存中的邏輯結構、布局愚争。

3映皆、Raw segment data:在Load commands中定義的Segment的原始數(shù)據(jù)挤聘。

Mach-O窺探

可以通過使用命令行工具或GUI工具來窺探Mach-O結構轰枝。

命令行工具:

1捅彻、file:查看Mach-O的文件類型。使用命令”file 文件路徑“鞍陨。

2步淹、otool:查看Mach-O特定部分和段的內容。例如”otool -h 文件路徑“可以查看Mach-O文件的Header信息诚撵。

3缭裆、lipo:常用于多架構Mach-O文件的處理。主要用法有查看架構信息(ipo -info 文件路徑)寿烟、導出某種特定架構(lipo 文件路徑 -thin 架構類型 -output 輸出文件路徑)澈驼、合并多種架構(lipo 文件路徑1 文件路徑2 -output 輸出文件路徑)。

GUI工具:

MachOView:選擇指定的Mach-O文件打開即可筛武。

dyld和Mach-O文件

dyld也屬于Mach-O文件缝其,但它可以用于加載MH_EXECUTE、MH_DYLIB徘六、MH_BUNDLE這三種Mach-O文件内边。事實上,APP的可執(zhí)行文件待锈、動態(tài)庫都是由dyld負責加載的漠其。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市竿音,隨后出現(xiàn)的幾起案子和屎,更是在濱河造成了極大的恐慌,老刑警劉巖春瞬,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眶俩,死亡現(xiàn)場離奇詭異,居然都是意外死亡快鱼,警方通過查閱死者的電腦和手機颠印,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹竹,“玉大人线罕,你說我怎么就攤上這事∏耘校” “怎么了钞楼?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袄琳。 經(jīng)常有香客問我询件,道長燃乍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任宛琅,我火速辦了婚禮刻蟹,結果婚禮上,老公的妹妹穿的比我還像新娘嘿辟。我一直安慰自己舆瘪,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布红伦。 她就那樣靜靜地躺著英古,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昙读。 梳的紋絲不亂的頭發(fā)上召调,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音蛮浑,去河邊找鬼唠叛。 笑死,一個胖子當著我的面吹牛陵吸,可吹牛的內容都是我干的玻墅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壮虫,長吁一口氣:“原來是場噩夢啊……” “哼澳厢!你這毒婦竟也來了?” 一聲冷哼從身側響起囚似,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剩拢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饶唤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徐伐,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年募狂,在試婚紗的時候發(fā)現(xiàn)自己被綠了办素。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡祸穷,死狀恐怖性穿,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情雷滚,我是刑警寧澤需曾,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響呆万,放射性物質發(fā)生泄漏商源。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一谋减、第九天 我趴在偏房一處隱蔽的房頂上張望牡彻。 院中可真熱鬧,春花似錦逃顶、人聲如沸讨便。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伴找,卻和暖如春盈蛮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背技矮。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工抖誉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衰倦。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓袒炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親樊零。 傳聞我的和親對象是個殘疾皇子我磁,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355