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

python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装) python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装) 写在前面 事先说明,本人不是大佬,我只是在不断探索的途中找到了解决这个问题的方法,之前在网上搜索的时候没有看到相关文章,所以就来简单讲一下。 正文 借着蚂蚁金服小程序大赛开通了支付宝小程序个人开发者,尝试将一个微信小程序的项目移植到支付宝上,支付宝对于用户唯一id的获取比微信要复杂很多,微信... 阅读详情

相关推荐

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 268

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

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL)

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL),xfce桌面美化、安装google-chrome

NiKoJJ‘s Blog 1万+

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

在QTableWidget中添加支持多选的QComboBox并显示

定义自定义表格项,主要用于显示复选框自定义的多选ComboBox类自定义委托类,用于表格中的多选ComboBox代码展示如下。

YUyang0304的博客 2783

【CQUT】从零开始龙芯杯-开始前的准备

不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/

weixin_73689971的博客 906

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

【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法

文章目录 一、亚稳态 (1)跨时钟域的亚稳态现象 (2)亚稳态的多径传输 二、跨时钟域处理 2.1 单bit信号跨时钟域处理 (1)单径两级触发器同步器 (2)相位控制 (3)多径与多级寄存器同步链 (4)组合逻辑信号的同步化 (5)快时钟域信号的同步化 2.2 多bit信号的跨时钟域处理 (1)异步FIFO (2)双口RAM.........

毕淑敏曾说过:“我不相信命运,我只相信自己的手;我不相信手掌上的纹路,但我相信手指加上手掌的力量”。在这个快节奏的社会,只有自己能力不足才会被卷,踏踏实实沉下心来学一些技术,及时记录,方便以后复盘。 2万+

[iOS]分析Mach-O文件

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

Gamin 3577

24、企业治理、风险与合规:精益思维的应用与实践

本文探讨了如何运用精益思维优化企业治理、风险与合规(GRC)流程,分析了职责分离与合规流程的误区,提出了预防性与检测性控制措施的合理搭配,并通过价值流映射、减少合规反馈循环等方法实现流程优化。以Etsy的PCI-DSS实施为例,展示了如何在满足法规要求的同时保持创新活力。文章还强调了构建协作型GRC文化的重要性,并展望了未来GRC的发展趋势,包括数字化转型、全球化风险管理及与可持续发展的结合。

solidity8miner的博客 103

基于MATLAB编程的LSTM的时间序列预测

时间序列预测,回归分析,LSTM详细原理

abc991835105的博客 360

了解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

芒果YOLOv8改进16:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

YOLOv8代码改进教程:即插即用|新颖轻量化非对称多级压缩LADH检测头🎈

包括YOLOv5、YOLOv7、YOLOv8等模型改进 5611

Mach-O文件格式

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

兰亭白菜 2313

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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、付费专栏及课程。

余额充值