【iOS逆向工程】Mach-O

  • IPA包里的可執(zhí)行文件就是Mach-O文件

  • Mach-O文件壓縮一下就是IPA

  • Mach-O是Mach object的縮寫,是Mac\iOS上用于存儲程序、庫的標準格

  • 屬于Mach-O格式的文件類型有


    Mach-O格式的文件
  • 可以在xnu(內核源碼)源碼中,查看到Mach-O格式的詳細定義(https://opensource.apple.com/tarballs/xnu/

EXTERNAL_HEADERS/mach-o/fat.h
EXTERNAL_HEADERS/mach-o/loader.h

  • 常見的Mach-O文件類型

Xcode里可以看到Mach-O Type

注:可以通過 file 指令,查看文件的類型

  • MH_OBJECT
    目標文件(.o)
    靜態(tài)庫文件(.a),靜態(tài)庫其實就是N個.o合并在一起

  • MH_EXECUTE:可執(zhí)行文件
    .app/xx

  • MH_DYLIB:動態(tài)庫文件
    .dylib
    .framework/xx

  • MH_DYLINKER:動態(tài)鏈接編輯器
    /usr/lib/dyld

  • MH_DSYM:存儲著二進制文件符號信息的文件
    .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)

擴展知識FreeBSD Unix Linux XNU Darwin MacOSX

Universal Binary 通用二進制文件
$(ARCHS_STANDARD)Xcode內置的環(huán)境變量,不同XCode的值不一樣,通用的一些架構值不一樣。
lipo -info XXX 查看二進制文件,有哪些架構。
lipo XX -thin armv7 -output file_name 廋身成為 armv7 文件。
lipo -create XX_arm64 XXX_armv7 -output file_name 把不同架構的同一二進制文件,合為一個通用二進制文件。

Mach-O的基本結構

官方描述->

  • 一個Mach-O文件包含3個主要區(qū)域
    Header
    文件類型、目標架構類型等

  • Load commands (像是一個指針一樣,指向它的原始段數(shù)據)
    描述文件在虛擬內存中的邏輯結構、布局

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

  • GUI工具
    pMachOView(https://github.com/gdbinit/MachOView

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容