美文网首页
关于 mach-o 的一些笔记

关于 mach-o 的一些笔记

作者: JackYao | 来源:发表于2018-01-22 23:48 被阅读24次

mach-o 格式文件

mach-o 的文件类型

image.png

可以在xnu源码中,查看到Mach-O格式的详细定义(https://opensource.apple.com/tarballs/xnu/
EXTERNAL_HEADERS/mach-o/fat.h
EXTERNAL_HEADERS/mach-o/loader.h

mach-o 的基本结构

image.png

一个Mach-O文件包含3个主要区域

  • Header
    文件类型、目标架构类型等

  • Load commands
    描述文件在虚拟内存中的逻辑结构、布局

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

官方描述: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/MachOTopics/0-Introduction/introduction.html

查看 mach-o 相关信息的工具

  • file
    • file 文件路径
  • otool
    • 查看 mach-o 特定部分和段的内容(具体可以使用 help 查看)
  • lipo
    • 对于多架构的 mach-o 文件处理 合并/导出/查看架构信息
  • MachOView
    • GUI 版本的 mach-o 文件信息查看器

Universal Binary(通用二进制文件, 也叫胖二进制文件 也叫 Fat Binary)

同时适用于多种架构的二进制文件
包含了多种不同架构的独立的二进制文件

注意

  • 因为需要储存多种架构的代码,通用二进制文件通常比单一平台二进制的程序要大
  • 由于两种架构有共同的一些资源,所以并不会达到单一版本的两倍之多
  • 由于执行过程中,只调用一部分代码,运行起来也不需要额外的内存

如何查找系统动态库的可执行文件

从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)
缓存文件路径:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX

如何从动态库共享缓存抽取动态库

# 可以使用dyld源码中的launch-cache/dsc_extractor.cpp
# 将#if 0前面的代码删除(包括#if 0),把最后面的#endif也删掉

# 编译dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp

# 使用dsc_extractor
./dsc_extractor  动态库共享缓存文件的路径   用于存放抽取结果的文件夹

Mac/iOS 系统如何加载动态库

利用/usr/lib/dyld 程序加载动态库

注意
dyld 只能加载以下三种mach-o文件

  • MH_EXECUTE
  • MH_DYLIB
  • MH_BUNDLE

dyld 属于 DILINKER 类型, 所以不能自己加载自己

APP 是从开发到安装到手机的过程

工程 -> 编译,链接,签名 生成.app (可执行文件由源代码生成) -> zip 压缩为 IPA 包

逆向的思路

  • 界面分析

    • Cycript、
    • Reveal
  • 代码分析
    对Mach-O文件的静态分析

    • MachOView、
    • class-dump、
    • Hopper Disassembler、
    • ida等
  • 动态调试
    对运行中的APP进行代码调试

    • debugserver、
    • LLDB
  • 代码编写

    • 注入代码到APP中
    • 必要时还可能需要重新签名、打包ipa

其余的小技巧

  • 将可执行文件复制到/usr/local/bin 目录下,zsh 会有智能提示
  • zshrc 文件的方法定义与 shell 相同, 获取方法参数 使用$1 来获取第一个, $2获取第二个 ,以此类推
  • killall SpringBoard 可以用来重启桌面

相关文章

  • 关于 mach-o 的一些笔记

    mach-o 格式文件 mach-o 的文件类型 可以在xnu源码中,查看到Mach-O格式的详细定义(https...

  • Mach-O 学习小结(四)

    Mach-O 学习小结(四) 最近学习了一下 Mach-O ,这里做个笔记记录,整理思路,加深理解。 附上下文所用...

  • Mach-O

    该文档主要翻译苹果关于Mach-o编程,可以查看Mach-O programming查看英文版本 介绍 构建Ma...

  • Mach-O的符号与链接

    Mach-O符号表 点击了解更多关于Mach-O[https://www.jianshu.com/p/2dbf81...

  • iOS启动流程

    关于mach-o mach-O文件为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库...

  • 解析Mach-O文件

    一、前言 本文简要解析Mach-O文件格式、结构,主要是自己认识Mach-O文件,学习的一个过程,一些地方可能介绍...

  • Mach-O 学习小结(一)

    最近学习了一下 Mach-O ,这里做个笔记记录,整理思路,加深理解。原文出处 Valar Morghulis 的...

  • Mach-O 学习小结(二)

    最近学习了一下 Mach-O ,这里做个笔记记录,整理思路,加深理解。原文出处 Valar Morghulis 的...

  • Mach-O 学习小结(三)

    最近学习了一下 Mach-O ,这里做个笔记记录,整理思路,加深理解。原文出处 Valar Morghulis 的...

  • IOS Mach-o 文件的解析

    导论 Mach-o 文件图解 Mach-o 文件中专有名词解释 Mach-o 文件中函数存储地址 Mach-o 文...

网友评论

      本文标题:关于 mach-o 的一些笔记

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