挂载最初的 iPod 并像 USB 驱动器一样访问它很容易。iPhone 也可以做到这一点,不过根据你要处理的数据类型,方法有所不同。
在本文中,我们将探讨以下不同的方法:
| 方法 | 可访问的文件 | 要求 |
|---|---|---|
| PTP | 照片和视频 | Windows 和 macOS 内置 |
| AFC | 照片、视频和部分 App | iTunes |
| FUSE(无需越狱) | 照片、视频和部分 App | 免费 FUSE 客户端 |
| FUSE(需要越狱) | 所有文件 | 越狱、免费 FUSE 客户端 |
| 通过 Filza 使用 WebDAV | 所有文件 | 越狱、免费 WebDAV 客户端 |
| AFC2 | 所有文件 | 越狱、AFC2 插件、AFC2 客户端 |
| 其他 | 无 | 不适用于新版 iOS |
在未越狱的设备上,只能处理相机文件和特定 App 中的数据。本文将介绍这两种方法。
PTP:将照片、视频和相机数据作为磁盘挂载来访问
通过 USB 连接时,iOS 会自动将新款设备显示为相机。这使用的是图片传输协议(PTP),该系统功能相当有限,只允许你来回复制照片。你可能会认出照片通常出现的 DCIM 文件夹。
PTP 有许多缺点:最明显的是,你只能访问相机中的文件。而且 PTP 不支持重命名或修改文件或文件夹等功能:要实现更改,它必须先删除再重新创建,这很慢。
通过 iTunes 使用 AFC 访问照片和 App 数据
Apple 的知识库中有一篇文章,介绍如何管理iTunes 的基本文件共享。
通过 USB 使用 FUSE 访问 App 数据
FUSE 是一种让用户无需对系统进行管理员级别的更改,就能在 Windows 或 Mac 电脑上挂载驱动器的系统。FUSE 是“用户空间文件系统”(filesystem in userspace)的缩写,在大多数平台上都有不同形式的实现。FUSE 本身是一个抽象层,也就是说,它并不是直接与设备或数据源通信的技术:通常会使用另一种方法来实现。在将 iPhone 挂载为驱动器的情况下,FUSE 会使用另一种协议与 iPhone 通信:SSH、AFC/AFC2、PTP 或 WebDAV。在 Windows 上,常用的是流行的 Dokan 用户模式文件系统,而在 macOS 上,osxfuse 比较流行。
从用户的角度来看,由于 FUSE 统一了设备数据的呈现方式,因此通常不必在意是哪种底层协议负责挂载。
在 macOS 上使用 FUSE 挂载
让我们在 macOS 上演示这种方法,以及如何挂载设备。要使其正常工作,你需要安装免费的 Homebrew 包管理器,并熟悉 macOS 上“终端”的使用。
首先,让我们找到你设备的 UDID。你可以使用免费版的 iPhone Backup Extractor、lsusb 命令或 ioreg -p IOUSB -l -w 0 来完成。在设备已连接的情况下运行 iPhone Backup Extractor,选择你的设备,然后选择“信息”选项卡。你会在“硬件标识符”部分看到显示的 UDID:

iPhone Backup Extractor 中显示的设备数据
接下来,让我们为 macOS 准备好 FUSE:
$ brew tap homebrew/cask
$ brew cask install osxfuse
==> Caveats
To install and/or use osxfuse you may need to enable their kernel extension in
System Preferences → Security & Privacy → General
For more information refer to vendor documentation or the Apple Technical Note:
https://developer.apple.com/library/content/technotes/tn2459/_index.html
You must reboot for the installation of osxfuse to take effect.
然后安装 ifuse,它是可以通过 FUSE 与 iOS 设备通信的代码:
$ brew install ifuse
安装 ifuse 后,就可以使用我们之前获得的 UDID 来挂载你的 iPhone 或 iPad:
$ mkdir ~/iphone
$ ifuse ~/iphone --udid 000000000000000000000000
这会将你的 iPhone 作为磁盘挂载到你的电脑上。如果你想更进一步,深入挖掘更多数据,这篇 superuser 帖子相当实用,同样,这篇帖子介绍了 usbmuxd 工具的使用。
排查你可能遇到的错误
ifuse 可能会报错:Invalid device UDID specified, length needs to be 40 characters。从 iPhone X 开始,Apple 将 UDID 改为使用 24 字节并带一个连字符(-),而不是旧的 40 字节格式。
如果出现 Failed to connect to lockdownd service on the device. Try again. If it still fails try rebooting your device.,请确保你的设备已连接,并且没有显示“信任此电脑”对话框。你需要先批准该对话框。如果随后出现 ERROR: Device 000000000000000000000000 returned unhandled error code -13,你需要断开并重新连接设备。
在此过程中,最好确保你的 PC 或 Mac 上没有运行其他可能尝试连接 iOS 设备的应用程序。
如果你只打算挂载一台 iOS 设备,只需运行 ifuse ~/iphone。
需要使用 usbmuxd? 的预发布版本
usbmuxd 的更新并不频繁,因此偶尔在新版 iOS 发布时,它会缺乏支持。要解决这一问题,你可以按如下方式安装它的最新开发版本:
brew unlink usbmuxd
brew install --HEAD usbmuxd
brew unlink libimobiledevice
brew install --HEAD libimobiledevice
brew cask uninstall osxfuse
brew cask install osxfuse idevicepair
在越狱设备上通过 USB 使用 FUSE 访问 App 数据
操作说明与上文完全相同。设备越狱后,你会立即看到更多数据。很不错吧?
使用 Filza 的 WebDAV 服务器访问 iOS 根文件
在越狱的 iOS 设备上,可以通过 Cydia 安装一款名为 Filza 的文件管理器 App。在 Filza 的设置中,你可以启用 WebDAV 服务器模式。这为其他设备访问你的 iOS 设备提供了相当简单的界面,不过极不安全。WebDAV 是一种非常通用的处理网络数据的机制,有许多客户端可以访问它,包括 Filza 内置的网页界面。用网页浏览器连接到你的设备,就能看到该界面。很简单。
使用 AFC2 通过 USB 访问 iOS 文件
什么是 AFC2?
AFC 是“Apple File Conduit”的缩写,是 Apple 自己将数据从 iOS 设备传输到主机电脑的机制。AFC 在每台 iOS 设备上运行,但被限制为只能访问一小部分数据。“AFC2”是越狱社区开发的一系列工具的昵称,它们模拟 AFC,但可以访问整台设备。最新的 AFC2 实现由 Cannathea 开发,可在 GitHub 上获取。
AFC2 可以从 Cydia 安装,安装后,AFC 客户端就可以浏览设备的全部内容。
在越狱设备上访问所有数据的其他方法
在 iOS 8 发布之前,针对越狱设备有好几个 Cydia 插件,可以让 iPhone 在连接时呈现为 USB 闪存盘。可惜,新版 iOS 已不再支持这些插件。
从已挂载的 iOS 设备中恢复已删除的文件
如果你可以将 iPhone 或 iPad 作为驱动器挂载,你可能会认为可以在越狱设备上直接操作文件系统来恢复已删除的文件。遗憾的是,你无法通过这种方式从 iPhone 中恢复文件,因为文件系统是加密的。即使你能找到部分数据,也无法解密。每个文件都有自己的加密密钥,而这些密钥会在删除时被丢弃。
Apple 的 iOS 安全指南在第 17 页的“架构概述”中简要介绍了这一点:
每次在数据分区上创建文件时,数据保护都会创建一个新的 256 位密钥(“每文件”密钥),并将其交给硬件 AES 引擎,该引擎使用该密钥,以 AES-XTS 模式在文件写入闪存时对其加密。在配备 A7、S2 或 S3 SoC 的设备上,使用的是 AES-CBC。初始化向量由文件内的块偏移量计算得出,并使用每文件密钥的 SHA-1 哈希值加密。
挂载对于访问现有文件很有效,但对恢复帮助不大。要恢复数据,你需要 iTunes 备份或 iCloud 备份、已同步到 iCloud 的数据,或设备在数据被删除之前的取证镜像。
额外内容:从 iPhone 或 iPad 挂载你的 Windows 电脑
iOS 13 引入了对 SMB 的支持。这让用户可以远程访问 Windows 电脑上的驱动器。具体方法如下:
- 找到你的 Windows 电脑的 IP 地址。
ipconfig命令应该可以告诉你。 - 在 Windows 电脑上,右键点击你想共享的文件夹,然后选择
Properties→Sharing→Advanced sharing。点击“共享此文件夹”。 - 在“共享”选项卡中,选择
Share...,然后在下拉菜单中选择你的用户账户,添加它,并确保它拥有“读取/写入”权限。点击“共享”和“应用”,然后关闭窗口。 - 在你的 iOS 设备上,打开 Apple 的“文件”App,点击“连接服务器”。输入
smb://,后面跟上你 PC 的 IP 地址。然后选择“注册用户”,并输入你的 Windows 账户名称和密码。
完成后,你的 Windows 驱动器应该会出现在 iOS 设备上。