【iOS逆向工程】Mach-O

作者: GeniusWong | 来源:发表于2018-09-29 03:19 被阅读29次
    • IPA包里的可执行文件就是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)
      静态库文件(.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的崩溃信息)

    扩展知识FreeBSD Unix Linux XNU Darwin MacOSX

    Universal Binary 通用二进制文件
    $(ARCHS_STANDARD)Xcode内置的环境变量,不同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个主要区域
      Header
      文件类型、目标架构类型等

    • Load commands (像是一个指针一样,指向它的原始段数据)
      描述文件在虚拟内存中的逻辑结构、布局

    • Raw segment data 原始段数据
      在Load commands中定义的Segment的原始数据

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

    相关文章

      网友评论

        本文标题:【iOS逆向工程】Mach-O

        本文链接:https://www.haomeiwen.com/subject/fbzmoftx.html