Mach-O可执行文件格式

iOS攻防-序章(1)-Mach-O文件结构解析 前言:最近因为工作需要,一直在研究iOS的逆向工程。说起来,这个方面涉及到的的知识面实在太广,所以想开一个系列,从基础知识到实战攻防,系统的总结一下最近的所思所学。 第一篇,先从一个基础知识开始:Mach-O文件。 说起Mach-O文件,很多开发人员应该不陌生。即使你没有听过Mach-O,但你也肯定知道exe文件是什么。每个操作系统都有自己的可执行文件,比如Linux下的ELF,Windo... 阅读详情


iOS安全–了解Mach-o文件结构

我们知道Windows下的文件都是PE文件,同样在OS X和iOS中可执行文件是Mach-o格式的。

所以我们如果要进行逆向分析,首先要熟悉Mach-o文件结构。
Mach-o包含三个基本区域:

  • 头部(header structure)。
  • 加载命令(load command)。
  • 段(segment)。可以拥有多个段(segment),每个段可以拥有零个或多个区域(section)。每一个段(segment)都拥有一段虚拟地址映射到进程的地址空间。
  • 链接信息。一个完整的用户级Mach-o文件的末端是链接信息。其中包含了动态加载器用来链接可执行文件或者依赖库所需使用的符号表,字符串表等等。

155909fovzv4dyqi9wb64o你也可以在这里找到Mach-o的官方资料。

一、我们先使用otool工具来查看Mach-o的头部,看看都包含哪些信息。

Snip20150112_7

头部的的结构如下(32位):

1
2
3
4
5
6
7
8
9
struct mach_header {
     uint32_t    magic ;
    cpu_type_t  cputype ;
    cpu_subtype_t   cpusubtype ;
     uint32_t    filetype ;
     uint32_t    ncmds ;
     uint32_t    sizeofcmds ;
     uint32_t    flags ;
}

1.magic,是mach-o文件的魔数,0xfeedface代表的是32位,0xfeedfacf代表64位

2.cputype和cupsubtype代表的是cpu的类型和其子类型,例子中分别是c和9,定义如下:

#define CPU_TYPE_ARM((cpu_type_t) 12)

#define CPU_SUBTYPE_ARM_V7((cpu_subtype_t) 9

 

即为:armv7

3.接着是filetype,2,代表可执行的文件
#defineMH_EXECUTE 0×2

4.ncmds 指的是加载命令(load commands)的数量,例子中一共23个,编号0-22

5.sizeofcmds 表示23个load commands的总字节大小, load commands区域是紧接着header区域的。

6.最后个flags,例子中是0×00200085,可以按文档分析之。

Snip20150112_8

当然不用工具,直接使用UE看也是一样的。按照定义的结构来就行了。

Snip20150112_13
二、头部之后就是加载命令。加载命令的数目以及总的大小在header中已经给出。

Snip20150112_9

1.cmd 是load command的类型,本文中值=1就是LC_SEGMENT,,LC_SEGMENT的含义是(将文件中的段映射到进程地址空间)

2.cmdsize 代表load command的大小(0×58个字节)。

3.segname 16字节的段名字,当前是__PAGEZERO。

4.vmaddr 段的虚拟内存起始地址

5.vmsize 段的虚拟内存大小

6.fileoff 段在文件中的偏移量

7.filesize 段在文件中的大小

8.maxprot 段页面所需要的最高内存保护(4=r,2=w,1=x)

9.initprot 段页面初始的内存保护

10.nsects 段中包含section的数量

11.flags 其他杂项标志位

三、接下来就是节了:

Snip20150112_10

 

结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
struct section  { 
     char sectname [ 16 ] ; 
     char segname [ 16 ] ; 
     uint32_t addr ; 
     uint32_t size ; 
     uint32_t offset ; 
     uint32_t align ; 
     uint32_t reloff ; 
     uint32_t nreloc ; 
     uint32_t flags ; 
     uint32_t reserved1 ; 
     uint32_t reserved2 ;
} ;

1.sectname 第一个是__text ,就是主程序代码

2.segname 该section所属的 segment名,第一个是__TEXT

3.addr 该section在内存的启始位置,0xa588。

4.size 该section的大小,0x84a

5.offset 该section的文件偏移,28116   0x6dd4

6.align 字节大小对齐 ,4

7. reloff 重定位入口的文件偏移,0

8.nreloc 需要重定位的入口数量,0

9.flags 包含section的type和attributes

S_REGULAR—This section has no particular type. The standard tools create a __TEXT,__text section of this type.

结构中的最后2项保留用。

段的命名规则是两个下划线紧跟着大写字母(如__TEXT),而section的命名则是两个下划线紧跟着小写字母(__text)。

下面列出段中可能包含的section:

__TEXT段:
__text, __cstring, __picsymbol_stub, __symbol_stub, __const, __litera14, __litera18;

__DATA段
__data, __la_symbol_ptr, __nl_symbol_ptr, __dyld, __const, __mod_init_func, __mod_term_func, __bss, __commom;

__IMPORT段
__jump_table, __pointers;

其中__TEXT段中的__text是实际上的代码部分;__DATA段的__data是实际的初始数据。

可以通过otool –s查看某segment的某个section。

Snip20150112_11
可以通过otool –t直接查看代码段(__TEXT)的反汇编代码:

Snip20150112_12

其它的大家参考官方文档就行了。

轉:http://www.blogfshare.com/ioss-mach-o.html

CentOS 7 常用命令大全 CentOS中Linux命令 阅读详情

相关推荐

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 477

IOS安全–了解Mach-o文件结构

IOS安全–了解Mach-o文件结构 AloneMonkey 2015年1月12日 0 我们知道Windows下的文件都是PE文件,同样在OS X和iOS中可执行文件是Mach-o格式的。 所以我们如果要进行逆向分析,首先要熟悉Mach-o文件结构。 Mach-o包含三个基本区域: 头部(header structure)。 加载命令(load command)

b719426297的专栏 8734

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

requests报错:raise ValueError('Invalid header name %r' % (header,)) ValueError: Invalid header name XX

报这个错误的原因是请求头里面包含以“:”开头的键 如’:path’ 这些键是http2.0需要的,但是httplib只支持http1.1,不过很容易解决。 找到httplib.py这个文件,比如我的centos中,这个文件就在/usr/lib64/python2.7/httplib.py中。 vi /usr/lib64/python2.7/httplib.py 找到报错的行,这一行大约是10...

蓝一潇的博客 5466

2015年全国大学生电子设计大赛综合测评题

2015年全国大学生电子设计大赛综合测评题 题目如下: 一、555产生可调方波 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。 555定时器可组成单稳态电路、多稳态电路和无稳态电路。产生方波其实就是制造一个无稳态电路。 555定时器的引脚功能: 其中: DIS引脚与OUT脚电平一致 TRIG: 当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时输出端给出高电平。 THR:当此引脚电压升至2/3VCC(或由控制端决定的阈值电压

m0_47066484的博客 3万+

Fluent新手必看:如何正确解读scaled residuals曲线(附常见问题排查)

本文详细解析了Fluent中scaled residuals曲线的解读方法及常见问题排查技巧。针对continuity残差居高不下、湍流模型收敛困难等典型问题,提供了网格质量检查、边界条件验证和求解策略调整的实用解决方案,帮助CFD新手快速掌握计算收敛性的关键判断标准。

weixin_28698059的博客 377

iOS开发:Mach-O入门理解

Mach-O:是的缩写,是Mac\iOS上用于存储程序、库的标准格式。属于Mach-O格式的文件类型有: 可以在源码中,可以查看到Mach-O格式的详细定义(https://opensource.apple.com/tarballs/xnu/)1、MH_OBJECT2、MH_EXECUTE:可执行文件3、MH_DYLIB:动态库文件4、MH_DYLINKER:动态链接编辑器5、MH_DSYM:存储着二进制文件符号信息的文件.o文件编译生成的流程: 官方描述 https://developer.apple.c

chenzimin_blog 2691

手把手教你用Simulink搭建单相全桥逆变器(附单电流闭环控制仿真文件)

本文详细介绍了如何在Simulink中搭建单相全桥逆变器并实现单电流闭环控制。从功率主电路建模、核心器件参数设置,到控制系统的PI调节与前馈补偿,提供了完整的仿真步骤与调试技巧。文章旨在通过动手实践,帮助读者跨越理论与仿真的鸿沟,深入理解电力电子闭环控制的核心原理。

d6e7f8g9h的博客 316

[iOS]分析Mach-O文件

Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。 每个Mach-O文件包括一个Mach-O头,然后是一系列的载入命令,再是一个或多个块,每个块包括0到255个段。

Gamin 3577

MacBook M芯片第二篇:Homebrew安装

Homebrew是MacOS/Linux平台的软件包管理工具,提供便捷的安装、卸载、更新等功能。

码农魏轩 893

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1885

了解iOS上的可执行文件和Mach-O格式

http://www.cocoachina.com/mac/20150122/10988.html http://www.reinterpretcast.com/hello-world-mach-o 很多朋友都知道,在Windows上exe是可直接执行的文件扩展名,而在Linux(以及很多版本的Unix)系统上ELF是可直接执行的文件格式,那么在苹果的操作系统上又是怎样的呢?在iOS...

diaoju3333的博客 324

【IoT】压力式电子脉搏器设计

智能硬件

产品线负责人 1619

Mach-O文件格式

一个简单的程序 #include int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); return 0; } 对 mach-o 的分析从这个简单的 小程序开始 可执行文件的结构 我们用 MachOView 打开我们刚刚写了

兰亭白菜 2313

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mach-o 介绍

一、简介 Mach-O是一种文件格式,是mac上可执行文件的格式,类似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format)。我们编写的C、C++、swift、OC,最终编译链接生成Mach-O可执行文件 二、mach-o文件类型分为: image 总共有11种。 M...

chqj_163的专栏 1504

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Objective-C runtime机制前传1 - Mach-O格式

原文地址:https://blog.youkuaiyun.com/u013378438/article/details/80353267 Mach-O Mach-O是Mach Object文件格式的缩写。它是用于可执行文件,动态库,目标代码的文件格式。作为a.out格式的替代,Mach-O格式提供了更强的扩展性,以及更快的符号表信息访问速度。 Mach-O格式为大部分基于Mach内核的操作系统所使用的,包括N...

毛毛虫 1812

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Mach-O

Mach-O 维基百科介绍Mach-O: Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。 Mach-O曾经为大部分基于Mach核心的操作系统所使用。NeXTSTEP,Darwin和Mac OS X等系统使用这种格式作为其原生可执行文件,库和目标代码的格式。而同样使用GNU Mach作为其微内核的GNU Hurd系统则使用ELF而非Mach-O作为其标

了凡 793

mach-o格式浅析(一)

水平有限,错误在所难免,求指点。 Mach-O格式全称为Mach Object文件格式的缩写,是mac上可执行文件的格式, 类似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format) 偷一张苹果官网上面的图 从图上我们可以大概的看出Mach-O可以分为3个部分 Header...

weixin_30369087的博客 304

Mach-O探究:苹果可执行文件格式的核心与实战技巧

二进制可执行文件格式是操作系统加载程序的基石,规范了代码与数据的组织方式。在苹果生态中,Mach-O(Mach Object)统一承载可执行文件、动态库(dylib)和对象文件。其结构由Header、Load Commands和Data区构成,其中Load Commands记录了段映射、依赖动态库及入口点等关键信息。理解Mach-O有助于开发者解决崩溃无法符号化、启动缓慢、动态库缺失、代码签名验证失败等常见问题。通过otool、lipo、nm等工具,可以快速剖析二进制的架构、依赖和符号表,从而定位二进制层面

weixin_30074763的博客 130

Mach-O文件介绍

在Linux操作系统上,以及很多的类Unix操作系统,可执行文件的格式是ELF。mac OS虽然也是类Unix操作系统,然而mac OS以及iOS上,可执行文件的格式是Mach-O。 先理清一个易混淆的点,Mach-O和Mac没有什么关系。Mac是苹果电脑Macintosh的简称,而Mach是一种操作系统微内核,苹果公司的设备上操作系统内核使用的是Mach。在Mach内核中,一种可执行文件格式是...

TuGeLe的博客 3422

分析可执行文件mach-o

一、什么是可执行文件 Mach-O 是针对不同运行时可执行文件的文件类型。在Windows上.exe(Portable Executable )是可直接执行的文件扩展名,而在Linux(以及很多版本的Unix)系统上ELF (Executable and Linking Format)是可直接执行的文件格式,那么在苹果的操作系统上又是怎样的呢?在iOS(和Mac OS X)上,主要的可执行文件格式是Mach-O格式。 【mx:就是说以mach-o结尾的文件都是可执行文件】 【mx:是不是一个app就只有一

三线程序员的博客 2249

深入解析Mach-O文件头:iOS/macOS可执行文件格式基础

Mach-O是苹果生态系统的核心可执行文件格式,类似于Windows的PE和Linux的ELF。作为二进制文件的控制中枢,其文件头包含魔数、CPU架构、文件类型等关键元数据,直接影响程序的加载和执行流程。通过otool等工具分析Mach-O结构,开发者可以优化应用启动性能、解决架构兼容性问题,并增强应用安全性。理解Mach-O文件头是进行iOS逆向工程、性能调优的基础,特别是在处理多架构二进制文件或动态库依赖时尤为重要。本文以ARM64架构和X86_64为例,详解如何通过文件头字段诊断常见运行时问题。

weixin_31714129的博客 234

Mach-O结构分析

可执行文件 我们运行一个程序(进程)是把一些特殊文件在内存中加载并运行得到的结果。那么这类文件的格式必须是系统内核可以理解的,系统内核才能正确解析。这类文件被称为可执行的文件。 不同操作系统的可执行文件格式不同: 在现代通用计算机系统中,虽然不同平台的可执行文件的格式不完全一样,但是原理大体相同,基本都是基于段结构的,可执行文件的结构基本可以分为: header段:用于让操作系统识别可执行文件 TEXT段:存放编译后的函数的二进制代码,TEXT段的内容被标记为只读的,可执行的。如果试图修改TEXT段的内

XA403 2158
上一篇: Windows可执行文件PE格式分析
下一篇: A new image format for the Web
scribbler
博客等级 码龄19年 20粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值