返回

Linux(AlmaLinux 8)提取HFS+ DMG中Info.plist文件:解决7z/dmg2img失效问题

Linux

Linux (AlmaLinux 8) 上从 HFS+ DMG 提取 Info.plist 文件:7z 与 dmg2img 失效的解决方法

在 Linux 系统(例如 AlmaLinux 8)上处理 macOS 的 DMG 文件,特别是提取其中的 Info.plist 文件时,有时会遇到 7z 和 dmg2img 工具失效的情况。本文将探讨这个问题的解决方法,并提供一些操作步骤和代码示例。

问题分析

7z 工具可以直接处理一些 DMG 文件,但对于使用 HFS+ 文件系统的 DMG,它往往只能识别分区信息,无法访问文件内容。dmg2img 工具在处理某些 HFS+ DMG 时也可能出现错误,例如“Unsupported or corrupted block found”。这通常是由于工具本身对特定 HFS+ 特性的支持不足导致的。

解决方案:使用 HFS+ 文件系统驱动

最有效的解决方案是挂载 DMG 文件中的 HFS+ 分区。Linux 内核提供对 HFS+ 的支持,可以使用 hfsprogs 工具包中的 hfsfuse 工具来挂载。

操作步骤:

  1. 安装 hfsprogs:

    sudo dnf install hfsprogs
    
  2. 识别 HFS+ 分区:

    使用 7z l -ba -slt file.dmg 命令可以列出 DMG 文件中的分区信息。找到 HFS+ 分区的编号(例如 4.hfs)。

  3. 挂载 HFS+ 分区:

    创建一个临时目录作为挂载点,然后使用 hfsfuse 挂载 HFS+ 分区。

    mkdir -p /tmp/dmg_mount
    hfsfuse -o loop,ro,offset=$((512 * <partition_number>)) file.dmg /tmp/dmg_mount
    

    <partition_number> 替换为 HFS+ 分区的编号(例如 4)。 offset 参数计算 HFS+ 分区在 DMG 文件中的偏移量,单位是字节。 512 是每个块的大小。ro 选项表示只读挂载,以确保 DMG 文件内容不被修改。

  4. 访问 Info.plist 文件:

    挂载成功后,就可以像访问普通文件系统一样访问 DMG 文件的内容了。

    cp /tmp/dmg_mount/*.app/Contents/Info.plist /tmp/Info.plist
    

    这个命令将 DMG 中的 Info.plist 复制到 /tmp/ 目录下,您可以根据实际路径调整。

  5. 卸载 HFS+ 分区:

    操作完成后,务必卸载 HFS+ 分区。

    fusermount -u /tmp/dmg_mount
    
  6. 清理临时目录(可选):

    rmdir /tmp/dmg_mount
    

其他工具:dmg2img 的替代方案

如果 dmg2img 无法正常工作,可以尝试使用 p7zip-full 提供的 7z 版本, 它可能对 HFS+ DMG 提供更好的支持。但首选方案依然是使用 hfsfuse 直接挂载 HFS+ 分区。

安全建议

处理来自不受信任来源的 DMG 文件时,请务必谨慎。在挂载 DMG 文件之前,建议先对其进行病毒扫描。避免以 root 用户身份执行挂载操作,以减少潜在的安全风险。 尽量使用只读模式挂载,防止恶意代码修改系统文件。

通过以上方法,即使 7z 和 dmg2img 工具失效,也能在 Linux (AlmaLinux 8) 系统上成功提取 HFS+ DMG 文件中的 Info.plist 信息。 理解 DMG 文件的结构以及 HFS+ 文件系统的特性,有助于选择合适的工具和方法解决实际问题。