← 返回信息流
AI 资讯Hacker News·15 小时前

深度解析苹果稀疏镜像格式ASIF

原标题:Dissecting Apple's Sparse Image Format (ASIF)

速览

本文详细拆解了苹果稀疏镜像格式(ASIF)的内部结构和工作机制。通过深入分析其数据组织方式,揭示了该格式在存储优化方面的技术特点。这一解析有助于理解苹果生态系统中镜像文件的管理逻辑。

AI 深度解读

深度解读:拆解 Apple 的稀疏镜像格式 (ASIF)

背景

在 WWDC 2025 上,Apple 发布了 macOS 26 Tahoe。该系统引入了一个全新的磁盘镜像格式:ASIF(Apple Sparse Image Format)。根据官方文档,ASIF 主要设计用于配合 Virtualization 框架中的虚拟机(VM)使用。

从技术架构上看,ASIF 大量借鉴了现有的虚拟磁盘格式。本质上,它也是一种稀疏虚拟磁盘格式,其功能与稀疏 VMDK、VHDX 或 QCOW2 文件非常相似。对于不熟悉这些术语的用户来说,“稀疏”意味着你可以以一种更节省空间的方式存储大型磁盘或文件——即实际占用的磁盘空间仅等于已写入数据的量,而非文件的逻辑总大小。

在 macOS Tahoe 正式发布前(预计 2025 年底),作者出于兴趣尝试编写了一个 ASIF 文件的解析器。为了帮助那些对文件格式逆向工程不熟悉的人了解相关技巧,作者回顾了其分析过程,并在文中穿插了“研究笔记”以提供额外的见解。

核心内容

1. 构建测试环境

为了开始分析,作者首先利用 Apple 文档中提供的命令创建了一个测试文件,并写入特定的测试模式,以便后续验证数据偏移量。

  • 创建镜像:使用 diskutil 创建一个大小为 1GiB 的空白 ASIF 镜像。
    diskutil image create blank --fs none --format ASIF --size 1GiB file
    
  • 挂载与写入:将镜像挂载为 /dev/disk4,并通过 Python 脚本向其写入 255 个 1 MiB 的数据块,每个块填充相同的字节值(形成可预测的模式)。
  • 卸载:最后卸载磁盘。

研究笔记:作者通常喜欢编写包含可验证内容的测试模式(如编号的 1 MiB 块),以便在后续步骤中轻松核对内容是否与预期的“偏移量”匹配。虽然存在更复杂的测试模式,但对于初步窥探文件格式而言,填充可预测的数据至关重要。

2. 初步十六进制分析 (Eyeball Hexdumps)

逆向工程的第一步通常是观察十六进制转储,以识别文件特征。

  • 文件魔术字:在文件头部发现了某种“魔术字”(Magic Bytes),随后跟随一些看起来像大端序(Big Endian)的整数。
  • 端序判断技巧:作者分享了判断整数端序的经验:从左到右以 4 字节(uint32)、8 字节(uint64)或更小的块扫描,直到解析出合理的整数(如 16 的倍数或符合文件偏移量的数值)。如果整数看起来是“自然顺序”,则是大端序;如果是“反向”,则是小端序。
  • 初步结构猜测:使用 dissect.cstruct 工具,作者根据猜测的整数宽度构建了一个粗略的文件头结构。

3. 解析文件头结构

通过初步解析,作者发现了一些关键线索:

  • 扇区大小:发现了两个 0x200(512 字节)的值,这是常见的扇区大小。
  • 字段推测
    • field30 可能代表虚拟磁盘的扇区数量(1GiB / 512 bytes = 0x200000)。
    • field8 可能是扇区大小。
    • field10field18 可能是文件内的偏移量。
  • 数据位置发现:在更大的十六进制转储中,作者发现数据出现在 0x000002000x0041400 处。更值得注意的是,在 0x00200000 处看到了 "meta" 字符串,紧接着在 0x002000200 处有一个 XML plist 元数据文件。这暗示之前关于 field30 是磁盘大小的假设可能需要修正,或者该字段具有多重含义。

由于仅靠肉眼观察十六进制转储变量太多且结构不清,作者决定寻找相关的二进制文件进行逆向分析。

4. 寻找目标二进制文件

作者采用了一种“懒惰”但有效的方法来定位处理 ASIF 的二进制文件:

  • 字符串搜索:在 /System/Library/Frameworks/System/Library/PrivateFrameworks 中递归搜索包含 "ASIF" 字符串的文件。
  • 定位结果:匹配到的文件包括 /System/Library/PrivateFrameworks/DiskImages2.framework/.../diskimagescontroller
  • 验证:对 diskimagescontroller 运行 strings 命令,发现大量与 ASIF 相关的内容,包括有价值的日志消息、混淆的函数签名和类型名称(如 asif_header)。

研究笔记:作者提到有时使用 YARA 进行此类搜索会更高效。此外,如果在逆向过程中遇到 x86 和 ARM 两种架构的二进制文件,同时打开它们进行对比往往能提供更清晰的反编译输出,因为不同架构的编译器和反编译器优化程度不同。

5. IDA Pro 逆向分析

作者将 diskimagescontroller 加载到 IDA Pro 中进行深入分析。

  • 定位解析函数:通过搜索与 "asif's header" 相关的字符串,作者快速定位到一个似乎负责从原始 ASIF 头中解析值并存入内存结构的函数。
  • 关键发现
    • 该函数不仅解析字段,还包含对多个字段的简单检查,并伴有详细的错误/日志消息(例如 "ASIF max_write size in header exceed the limit"、"Sector count is too large" 等)。
    • 通过观察这些检查逻辑,作者能够立即确定文件头中每个字段的偏移量字节长度

关键要点

  • ASIF 的本质:ASIF 是 Apple 为 macOS 26 Tahoe 引入的新稀疏虚拟磁盘格式,专为 Virtualization 框架设计,功能对标 VMDK、VHDX 和 QCOW2。
  • 逆向工程流程
    1. 构造测试数据:创建标准文件并写入可预测的模式,以便验证解析结果。
    2. 十六进制探查:识别魔术字,利用“自然顺序”直觉判断端序,初步猜测字段结构。
    3. 二进制定位:通过搜索系统框架中的特定字符串(如 "ASIF")找到处理该格式的二进制可执行文件。
    4. 符号与字符串分析:利用 strings 命令提取日志和错误信息,辅助理解字段含义。
    5. 动态/静态逆向:使用 IDA Pro 等工具,通过引用关键字符串定位解析函数,结合错误检查逻辑推导字段偏移和长度。
  • 技术细节:ASIF 使用 512 字节作为标准扇区大小,文件头包含关于磁盘大小、扇区计数及元数据偏移的关键信息。
  • 逆向技巧:在逆向 iOS 和 macOS 二进制文件时,对比不同架构(x86/ARM)的反编译输出可能有助于获得更清晰的代码结构。

意义与影响

  • 对开发者和研究者的价值:这篇文章为那些希望了解文件格式逆向工程方法的人提供了一个清晰的案例研究。它展示了如何从零开始,通过系统性的方法(从十六进制观察到二进制逆向)来解析一个专有且文档不全的格式。
  • 虚拟机生态的演进:ASIF 的推出表明 Apple 正在进一步优化其 macOS 上的虚拟化体验。通过引入类似业界标准的稀疏格式,Apple 可能旨在提高虚拟机磁盘管理的效率,减少存储浪费,并更好地集成到其 Virtualization 框架中。
  • 安全与兼容性考量:了解 ASIF 的内部结构对于安全研究人员(例如分析恶意软件是否利用新的磁盘格式)以及需要跨平台兼容性的开发者至关重要。随着 macOS Tahoe 的发布,掌握 ASIF 的解析能力将成为处理 macOS 虚拟磁盘
查看原文 →schamper.dev