美文网首页iOS逆向工程
逆向学习笔记6——MachO文件

逆向学习笔记6——MachO文件

作者: 危险地带_浅笑 | 来源:发表于2018-05-04 09:37 被阅读131次

    官方介绍总共有11种格式! 是 Mach Object的缩写,是Mac/iOS 上用于存储程序,库的标准格式!
    常见的格式:

    • 1.可执行文件
    • 2.objcet
      • .o 文件(目标文件)
      • .a 静态库文件.其实就是N个.o文件的集合
    • 3.DYLIB: 动态库文件
      • dylib
      • framework
    • 4.动态连接器
    • 5.DSYM(存放崩溃信息)

    .o文件

    1,首先自己创建一个test.c文件,并写一些自己需要的代码

    image.png
    在终端执行clang -c test.c,获得test.o文件,通过file test.o查看文件类型Mach-O 64-bit object x86_64
    image.png
    从他的文件类型,我们知道Object不是可执行文件,执行clang -o test1 test.o就可以获得一个test1的可执行文件,在终端执行./test1就直接打印出test了。

    .c,.o文件转成可执行文件,常用命令

    • clang test.o //使用可执行文件的默认名称(这个不能双击打开,可以用在终端./a.out)
    • clang -o xxx test.o //给可执行文件命名
    • clang -o xxx test.c //直接从.c文件生成 可执行文件
    • clang -o xxx test1.c test2.c //将两个.c文件生成一个可执行文件

    .a文件

    image.png

    注:.dylib查看方式也和.a文件的方式一样,这里就不在赘述了

    动态库共享缓存

    为了提高性能,系统的动态库文件都存在了动态库共享缓存里面!


    image.png

    动态加载器(dyld)

    • dynamic linker
    • dynamic loadel
      image.png

    选择MachO文件的类型

    image.png

    app包的架构

    image.png

    拆分/整合二进制文件

    瘦身/拆分

    $ lipo xxx -thin armv7 -output macho_armv7    //xxx是app包的可执行文件
    $ lipo xxx -thin armv64 -output macho_armv64
    

    整合

    $ lipo -create macho_armv7 macho_arm64 -output machO_v7_64
    

    class-dump

    如果安装MonkeyDev了,注意配置好环境变量,
    vim ~/.zshrc

    export MonkeyDevPath=/opt/MonkeyDev
    export MonkeyDevDeviceIP=
    export PATH=/opt/MonkeyDev/bin:$PATH
    

    拿到所有可执行文件中.h文件

    $ class-dump -H MachO文件Path -o 头文件路径
    

    相关资源趣探 Mach-O:文件格式分析

    相关文章

      网友评论

      本文标题:逆向学习笔记6——MachO文件

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