iOS逆向 Mach-O知识

Mach-O

  • Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式.常见的Mach-O文件比如iOS开发好的代码打包好后就是Mach-O格式的文件.
  • Apple中定义的Mach-O文件包含图一中几种:


    图一:Mach-O文件定义格式

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

常见的几种Mach-O文件

目标文件(.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的崩溃信息)

Mach-O的基本结构

1.Header
文件类型、目标架构类型等
2.Load commands
描述文件在虚拟内存中的逻辑结构、布局
3.Raw segment data
在Load commands中定义的Segment的原始数据

图二:Mach-O的三部分部分

命令查看Mach-O信息

1.查看Mach-O的文件类型
$ file Mach-O文件路径
  • 例如查看APP支持的架构(arm64或者32)如图三


    图三:file命令查看Mach-O结构
2.查看Mach-O的特定部分如图四(头信息或者段信息)
$ otool -h Mach-O文件路径 //查看头信息
$ otool -l Mach-O文件路径 | grep cryptid//查看Mach-O文件路径文件是否加密
图四:查看Mach-O头信息
3.多架构Mach-O文件的处理,可以将arm64和32分开,合并
$ lipo  -info  文件路径//看架构信息
$ lipo  文件路径  -thin  架构类型  -output  输出文件路径//导出某种特定架构
$ lipo  文件路径1  文件路径2  -output  输出文件路径//合并多种架构

Mach-OGUI查看工具Mach-OView

MachOView下载编译即可.

编译出来有问题的话,可以直接百度下载.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容