:从创建测试文件到理解读取机制)
剖析苹果稀疏镜像格式ASIF2025 年全球开发者大会WWDC上苹果发布 macOS 26 Tahoe 系统引入全新磁盘镜像格式 ASIF。该格式专为虚拟机设计文档位于 [虚拟化框架] 下从现有虚拟磁盘格式汲取灵感是稀疏虚拟磁盘格式功能与稀疏的 VMDK、VHDX 或 QCOW2 文件相似允许以更小“稀疏”方式存储大型磁盘或文件。2025 年末作者尝试为 ASIF 文件编写解析器现在回顾并分享处理过程文章中会有“研究笔记”包含额外见解。作者根据苹果文档命令创建测试文件写入测试模式后开始分析。1. 查看十六进制转储先查看十六进制转储内容发现文件魔数和大端字节序整数。作者提到逆向工程文件格式时搜索魔数信息及识别字节序的技巧。接着编写大致结构用 [dissect.cstruct] 检查发现文件头中一些有趣数字推断出部分字段含义。查看稍大十六进制转储后发现更多信息但因变量多、结构不清晰无法继续深入分析于是寻找二进制文件进行逆向工程。2. 寻找目标二进制文件作者采用简单方法用 grep 命令在系统框架中搜索“ASIF”找到匹配的 binary 文件 diskimagescontroller。作者提到通常用 YARA 搜索更快还介绍另一种在原始磁盘上字符串搜索并反向查找的方法。对 diskimagescontroller 运行 strings 命令显示大量与 ASIF 相关内容随后将其扔进 IDA 分析。3. 解析文件头逆向工程先查找与感兴趣字符串相关引用关注文件头解释。通过 strings 命令看到与“asif 头”相关字符串找到解析 ASIF 头的函数了解文件头字段偏移量、字节长度及部分字段名称用途。更新完善文件头定义后得到新的结构体。4. 理解文件结构逆向工程 diskimagescontroller 过程有挑战但该二进制文件相对容易逆向ASIF 格式逆向也较简单只是动态调度需处理继承和虚函数表。文件头有 directory_offsets 字段指向分配目录目录有版本号当前活动目录是版本号最高的。目录包含表列表表包含数据条目列表数据条目分组后有位图。数据条目指向 ASIF 文件数据块数据块大小在文件头定义数据条目有数据块编号和标志位。虚拟磁盘最大大小略小于 4 PiB实际大小和最大大小在文件头定义文件头还有指向元数据块的偏移量元数据块包含文件头和 plist。要读取虚拟磁盘内偏移量的数据块需弄清楚机制算法。利用已知信息访问数据块变成 tables[X][Y]但计算 X 和 Y 较麻烦作者最初复制粘贴 IDA 伪代码用大语言模型想变量名。为写博客重新审视时又有新进展。5. 意外的新进展2025 年 11 月作者开始写博客时发现 Reddit 帖子和 huven 创建的 [GitHub 仓库]。huven 独立记录 ASIF 文件格式作者与他交流想法。作者对自己对 ASIF 文件读取机制理解不满意再次查看 huven 工作并完善实现。huven 提到位图作者最初忽略重新审视数学计算后终于理解。6. 实际的读取机制从截取包含有趣信息的 ASIF 文件片段开始按步骤从任意偏移量找到正确 ASIF 数据块数学计算主要基于 diskimagescontroller 中的计算也可查看 [huven 的仓库] 获取另一种解释。