iPhone Backup Extractor 包含一个名为 rictl 的命令行工具,用于处理 iOS 备份和设备。rictl 可在 iPhone Backup Extractor 支持的所有平台上运行,在参数、帮助语法和 shell 返回值方面,与任何 UNIX 风格的命令行工具用法一致。
功能一览:
- UNIX 兼容格式(
$?shell 返回码、按区域设置格式化的日期、便于 awk 处理的输出、导出数据的stdout流) - 支持同时使用多个搜索路径
- 支持所有格式的加密备份
- 支持相对路径和以主目录为基准(
~)的路径

macOS 终端中显示的 rictl

Windows 命令提示符中显示的 rictl
快速入门:从 iOS 备份中提取数据库文件
查找本地系统上可用的备份:
$ rictl backup search
00000000-0000000000000000 02/07/2019 11:33:41 12.3.1 iPhone11,6 ok
从备份中提取所有数据库文件(请注意正则表达式的格式):
$ rictl backup extract -u 00000000-0000000000000000 -r "\.db"
Extracting HomeDomain/Library/Voicemail/voicemail.db
Extracting HomeDomain/Library/Safari/Bookmarks.db
Extracting RootDomain/Library/Caches/locationd/consolidated.db
Extracting WirelessDomain/Library/CallHistory/call_history.db
...
命令词汇表
获取帮助
你可以像往常一样,通过 rictl help 命令获取 rictl 的帮助:
$ rictl help
Usage: rictl <command> [args]
Available commands:
backup Work with a local backup
device Work with devices over USB and Wi-Fi
Use 'rictl help <command>' for detailed help on a particular command
rictl 提供用于处理本地备份的 backup 模式,以及用于通过 USB 或 Wi-Fi 处理 iOS 设备的 device 模式。
处理本地备份
$ rictl help backup
Usage: rictl backup <command> [args]
Work with local backups
Available commands:
search Search for local backups
info Show info about a backup
list List files in a backup
extract Extract files from a backup
export Export data from a backup
Use 'rictl help backup <command>' for detailed help on a particular backup command
处理备份时,有五个选项:search、info、list、extract 和 export。
使用 search 搜索本地 iOS 备份
$ rictl help backup search
Usage: rictl backup search [args]
Search for local backups
Available arguments:
-s, --search-path=VALUE path to search for backups (two directories deep)
-l include full path in listing output
-h, --help show this message and exit
最简单的用法是,search 会显示你系统上的备份:
$ rictl backup search
00000000-0000000000000000 02/07/2019 11:33:41 12.3.1 iPhone11,6 ok
显示的字段以空白字符分隔,依次为:
UDID 有两种格式
别忘了,Apple 的 UDID 有两种不同的格式。rictl 两种都支持。
选项 -l 显示备份路径
你可以使用 -l 额外输出一个包含备份路径的字段:
$ rictl backup search -l
00000000-0000000000000000 02/07/2019 11:33:41 12.3.1 iPhone11,6 ok /Users/afit/Library/Application Support/MobileSync/Backup/00000000-0000000000000000
选项 -s 搜索其他路径
你可以使用 -s 在查找备份时加入其他搜索路径。
$ rictl backup search -s /Users/afit/Google\ Drive\ File\ Stream/My\ Drive/My\ backups/ -s Downloads/
00000000-0000000000000000 02/07/2019 11:33:41 12.3.1 iPhone11,6 ok
DB72CB76A00CB81675F19907D4AC2B298628D83C 09/06/2014 13:57:08 7.1.1 iPhone6,2 ok
DB72CB76A00CB81675F19907D4AC2B298628D83C 23/07/2014 12:37:55 8.0 iPhone6,2 ok
DB72CB76A00CB81675F19907D4AC2B298628D83C 28/07/2014 12:43:56 8.0 iPhone6,2 ok
CDBF062964613D325EB9E41AD83E85EA16B7E399 10/02/2014 14:29:59 7.0.4 iPad4,1 ok
57BE3B9E8087809F53666B887B9DD81B06299078 29/07/2014 14:18:54 7.1 iPhone3,1 ok
F60040E968F533434B9B6CCA10C7E0C673B7CC13 07/10/2014 09:44:17 8.0.2 iPhone7,2 ok
CC5D2A27218BD9E4A14B1E59918171A8676EF5BB 26/03/2015 11:07:42 2.2.1 iPhone1,1 ok
46A663D1A1A5C5146476A2C6164EA5F5FE771294 26/03/2015 11:09:54 4.2.1 iPhone1,2 ok
9F8FDEEFFCDA4BD53CA4D6F8229A04497CA5FA4C 31/10/2016 17:05:36 10.1.1 iPhone9,4 ok
- 和你预期的一样,路径中的空格可以用引号(
"My folder")括起来,也可以转义(My\ folder) -s既可以指定备份文件夹,也可以指定包含备份的文件夹
默认搜索路径
rictl 的搜索始终会包含默认的 iOS 备份搜索路径,以及已在 iPhone Backup Extractor 中配置的所有其他搜索文件夹。
使用 info 获取本地 iOS 备份的信息和元数据
$ rictl help backup info
Usage: rictl backup info [args]
Show info about a backup
Available arguments:
-u, --udid=VALUE backup UDID
-s, --search-path=VALUE path to search for backups (two directories deep)
-h, --help show this message and exit
我们来试一试:
$ rictl backup info -u 00000000-0000000000000000
UDID: 00000000-0000000000000000
Path: /Users/afit/Library/Application Support/MobileSync/Backup/00000000-0000000000000000
Backup in progress: False
Device name: Aidan's iPhone
Backup display name: Aidan's iPhone
Backup date: 02/07/2019 11:33:41
Backup size: 104258399691 bytes
Backup encrypted: True
Product version: 12.3.1
Product type: iPhone11,6
Serial number: FK1XH•••KPH6
Phone Number: +44 •••• ••••••
ICCID: 894411••••••••••••5
MEID: 35728209••••••
当然,iOS 设备的 UDID 是唯一的,但你的电脑上可能有不止一个该设备的备份,例如存在归档备份时,如下所示:
$ rictl backup search -l | grep B919
DB72CB76A00CB81675F19907D4AC2B298628D83C 09/06/2014 13:57:08 7.1.1 iPhone6,2 ok /Users/afit/Library/Application Support/MobileSync/Backup/backup1
DB72CB76A00CB81675F19907D4AC2B298628D83C 23/07/2014 12:37:55 8.0 iPhone6,2 ok /Users/afit/Library/Application Support/MobileSync/Backup/backup2
DB72CB76A00CB81675F19907D4AC2B298628D83C 28/07/2014 12:43:56 8.0 iPhone6,2 ok /Users/afit/Library/Application Support/MobileSync/Backup/backup3
$ rictl backup info -u DB72CB76A00CB81675F19907D4AC2B298628D83C
Multiple backups found with UDID DB72CB76A00CB81675F19907D4AC2B298628D83C. Use the '--search-path' option to specify the backup's location. This can be shown with the '-l' argument on 'rictl backup search'.
解决办法是什么?缩小搜索路径:指定备份所在的文件夹,而不是包含该备份文件夹的上一级文件夹!
$ rictl backup info -s /Users/afit/Library/Application Support/MobileSync/Backup/backup3 -u DB72CB76A00CB81675F19907D4AC2B298628D83C
UDID: DB72CB76A00CB81675F19907D4AC2B298628D83C
Path: /Users/afit/Library/Application Support/MobileSync/Backup/backup3
Backup in progress: False
Device name: Aidan's iPhone
Backup display name: Aidan's iPhone
Backup date: 28/07/2014 12:43:56
Backup size: 239001214 bytes
Product version: 8.0
Product type: iPhone6,2
Serial number: C7KNG•••G5MV
Phone Number: +44 •••• ••••••
ICCID: 894411••••••••••••5
MEID: 35728209••••••
指定备份时,为什么 `-u` 比 `-s` 更快?
你可能会注意到,使用 -u 选择备份可能比使用 -s 快得多。
这样很快:
$ rictl backup extract -u 00000000-0000000000000000
这样较慢:
$ rictl backup extract -u 00000000-0000000000000000 -s "My backups"
这两条命令的执行过程截然不同。-u 命令会从默认搜索位置(以及已在 iPhone Backup Extractor 中预先配置的所有搜索路径)获取备份,而 -s 会在你指定的路径下向下搜索一级,因为你指定的可能是包含备份的文件夹,也可能是备份文件夹本身。
备份通常包含许多子文件夹,因此当 -s 进行搜索,以确保你没有把一个备份嵌套在另一个备份中(我们见过这种情况!)时,可能会花上一点时间。
使用 list 列出 iOS 备份中的文件
$ rictl help backup list
Usage: rictl backup list [args]
List files in a backup
Available arguments:
-u, --udid=VALUE backup UIUD
-s, --search-path=VALUE path to search for backups (two directories deep)
-p, --password=VALUE backup password
-l use a long listing format
-r, --pattern=VALUE file pattern (regex)
--allow-in-progress allow use of in-progress backups
-h, --help show this message and exit
我们来试一试:
$ rictl backup list -u 00000000-0000000000000000 -r plist$ -l
rw-r--r-- 321 24/06/2019 13:04:37 ManagedPreferencesDomain\mobile\.GlobalPreferences.plist
rw------- 16975 21/06/2019 14:52:54 AppDomainPlugin-com.apple.stocks.widget\Library\Preferences\com.apple.stocks.widget.plist
rw-r--r-- 219 01/07/2019 09:37:24 HomeDomain\Library\UserNotifications\A4CCFF5B-F963-425F-8068-729972F77C67\DeliveredNotifications.plist
...
使用 extract 从 iOS 备份中提取文件
$ rictl help backup extract
Usage: rictl backup extract [args]
Extract files from a backup
Available arguments:
-u, --udid=VALUE backup UIUD
-s, --search-path=VALUE path to search for backups (two directories deep)
-p, --password=VALUE backup password
-o, --output-path=VALUE path to extract files to
-r, --pattern=VALUE file pattern (regex)
--allow-in-progress allow use of in-progress backups
-h, --help show this message and exit
我们来把备份中所有的 .db 文件提取到名为 Extracted 的文件夹中,并提供备份密码 password:
$ rictl backup extract -u 00000000-0000000000000000 -r "\.db" -o "Extracted" -p "password"
Extracting HomeDomain/Library/Voicemail/voicemail.db
Extracting HomeDomain/Library/Safari/Bookmarks.db
Extracting RootDomain/Library/Caches/locationd/consolidated.db
Extracting WirelessDomain/Library/CallHistory/call_history.db
...
使用 export 从 iOS 备份中导出数据
$ rictl help backup export
Usage: rictl backup export [args]
Export data from a backup
Available arguments:
-u, --udid=VALUE backup UIUD
-s, --search-path=VALUE path to search for backups (two directories deep)
-p, --password=VALUE backup password
-t, --type=VALUE data type (messages, whatsapp, viber, kik, wechat,
line, hike, tinder, photos, videos, recordings,
contacts, calendar, notes, calls, locations,
voicemail)
-o, --output-path=VALUE associated file output path
-r, --pattern=VALUE search pattern (regex)
-f, --force allow overwriting exising files
--allow-in-progress allow use of in-progress backups
-h, --help show this message and exit
导出的数据采用与 ricloud API 相同的 JSON 格式,这些格式的文档见此。
我们来提取备份中的所有信息数据。这些数据会通过控制台的标准输出流(stdout)返回,因此我们将其重定向到名为 messages.json 的文件。相关的文件会保存在名为 Associated files 的文件夹中,同时提供备份密码 password:
$ rictl backup export -u 00000000-0000000000000000 -t messages -o "Associated files" -p "password" > messages.json
...
$ cat messages.json
[
{
"From": "789789",
"To": "Me",
"Date": "2012-12-17T14:12:30Z",
"Deleted": false,
"Message": "All done! You're now on our Big Data Texts Tariff. We switched you over on 17/12/12",
"Attachments": []
},
{
"From": "789789",
"To": "Me",
"Date": "2012-12-17T18:12:50Z",
"Deleted": false,
"Message": "You have 300 Texts and Unlimited data",
"Attachments": []
},
...
处理设备
$ rictl help device
Usage: rictl device <command> [args]
Work with devices over USB and Wi-Fi
Available commands:
search Show connected devices over USB and Wi-Fi
backup Backup a connected device
restart Restart a connected device
shutdown Shutdown a connected device
Use 'rictl help device <command>' for detailed help on a particular device command
处理设备时,有四个选项:search、backup、restart 和 shutdown。
将 rictl 添加到你的路径中
iPhone Backup Extractor 可以通过 Preferences 窗格,自动将 rictl 添加到你的 Windows 或 macOS 电脑的路径中,这样你就能在电脑上的任何终端中轻松使用它。

iPhone Backup Extractor 的“脚本”偏好设置窗格
不过,你也可以自己设置路径,或使用 alias 命令。rictl 的功能是通过 iPhone Backup Extractor 的二进制文件来访问的,封装脚本如下所示:
$ cat `which rictl`
#!/bin/bash
/Applications/iPhone\ Backup\ Extractor.app/Contents/MacOS/iPhoneBackupExtractor cli "$@"
文件搜索中常用的正则表达式模式
- 查找以文本
plist结尾的路径:-r plist$ - 查找文件扩展名为
.db的路径:-r \.db
企业使用
rictl 的功能大体上与 iPhone Backup Extractor 一致:该工具允许在浏览备份时不受限制地操作,但每次运行时最多只能提取四个文件或导出四项数据。
我们很想了解这项技术的应用情况,并为一些基于该技术构建内部管理或合规工具及产品的企业提供支持。如果这对你有价值,请与我们联系。
