跳到主要内容
Reincubate

如何查询 iPhone 备份中的 SQLite 和 Plist 文件数据

Aidan Fitzpatrick

发布于 2018年3月8日· 更新于 2021年1月5日

Cover image for: 如何查询 iPhone 备份中的 SQLite 和 Plist 文件数据

有些用户可能希望使用专家模式直接操作备份中存储的原始文件。这些文件通常由 SQLite 数据库(.sqlite3、.sqllitedb 和 .db)或 Plist(通常为 .plist)文件组成。

iPhone Backup Extractor 内置了 Plist 编辑器,其用户可以自动将数据导出为 PDF、HTML、VCard、ICAL、VCF 或 CSV 格式,以便轻松访问。不过,希望从这些文件中提取数据的用户需要一个 SQLite 数据库客户端。

如何处理 SQLite 数据库?

用户可以尝试以下三款应用程序中的任意一款:

  • SQLiteFlow(付费,macOS 和 iOS)。SQLiteFlow 是我们首选的 macOS SQLite 工具。
  • Base 2(付费,macOS)。Base 是我们在 macOS 上的第二推荐 SQLite 工具之一,可以直接下载,也有 App Store 版。
  • DB Browser for SQLite(免费,macOS 和 Windows)。DB Browser 以前名为 SQLite Database Browser。这是我们为 Windows 推荐的工具,而且是免费的。它们也提供 macOS 版本。

如何直接处理 Apple 的数据库文件?

例如,要手动访问联系人数据,用户应提取 Libray/AddressBook/AddressBook.sqllitedb,然后用 SQLite 查看器打开提取出的文件。选择“Execute SQL”选项卡,将以下内容粘贴到“SQL string”字段中:

SELECT ABPerson.first, ABPerson.last, ABMultiValue.value
FROM ABPerson, ABMultiValue
WHERE ABMultiValue.record_id = ABPerson.ROWID

按下 Execute Query 按钮后,应该会在“Data returned”字段中返回完整的联系人列表。

要访问短信数据,用户应提取 Libray/SMS/SMS.db,用 SQLite 查看器打开提取出的文件,选择 Browse data 选项卡,然后从 Table 下拉菜单中选择 message。点击放大镜按钮后,用户应该会在“Data returned”字段中看到完整的短信历史记录。

我们的一位用户发现下面这个查询很有用,因此我们把它收录在这里供用户参考。请记住,数据库格式会随 iOS 版本而变化,因此这些查询往往需要随时间调整。

SELECT ROWID,
  ABPerson.first,
  ABPerson.last,
  ABPerson.Organization AS organization,
  ABPerson.Department AS department,
  DATETIME(ABPerson.Birthday + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Birthday,
  ABPerson.JobTitle as jobtitle,
  ABPerson.Organization,
  ABPerson.Department,
  ABPerson.Note,
  ABPerson.Nickname,
  DATETIME(ABPerson.CreationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Created,
  DATETIME(ABPerson.ModificationDate + STRFTIME('%s', '2001-01-01 00:00:00'), 'unixepoch', 'localtime') AS Modified,
  ( SELECT value FROM ABMultiValue
    WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
      SELECT ROWID FROM ABMultiValueLabel
      WHERE value = '_$!<Work>!$_'
    )
  ) AS phone_work,
  ( SELECT value FROM ABMultiValue
    WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
      SELECT ROWID FROM ABMultiValueLabel
      WHERE value = '_$!<Mobile>!$_'
    )
  ) AS phone_mobile,
  ( SELECT value FROM ABMultiValue
    WHERE property = 3 AND record_id = ABPerson.ROWID AND label = (
      SELECT ROWID FROM ABMultiValueLabel
      WHERE value = '_$!<Home>!$_'
    )
  ) AS phone_home,
  ( SELECT value FROM ABMultiValue
    WHERE property = 4 AND record_id = ABPerson.ROWID AND label IS null
  ) AS email,
  ( SELECT value FROM ABMultiValueEntry
    WHERE parent_id IN (
      SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID
    ) AND key = (
      SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'street'
    )
  ) AS address,
  ( SELECT value FROM ABMultiValueEntry
    WHERE parent_id IN (
      SELECT ROWID FROM ABMultiValue WHERE record_id = ABPerson.ROWID
    ) AND key = (
      SELECT ROWID FROM ABMultiValueEntryKey WHERE lower(value) = 'city'
    )
  ) AS city
FROM ABPerson
ORDER BY ABPerson.first

我们在这里维护着各种 App 的关键文件列表。

日期和时间字段返回的只是数字,该如何解读?

你可能会难以解读数据库中的许多字段。别忘了,iPhone Backup Extractor 可以自动为你提取这些数据!不过,如果你打算自己处理,会发现日期是以自 2001-01-01 或 1970-01-01 以来的秒数表示的,具体取决于日期字段的位置。在 Excel 中,你可以使用类似 =1/1/2001 + A1/60/60/24 的公式,其中 A1 是你的时间数据。你可能还需要调整数值,以适应你所在的时区。


关于作者

Aidan Fitzpatrick

创始人兼首席执行官

Aidan 于 2008 年创立了 Reincubate,此前他打造出了全球首款 iOS 数据恢复工具。自此,他带领公司成长为全球顶尖的独立软件开发商之一,与 AMD、Qualcomm、HP 等公司合作,率先为视频软件打造出具有重要意义的机器学习功能,其中以 Camo 应用生态系统最为突出。在 Aidan 的领导下,Reincubate 四次荣获英国商业界的最高荣誉,入选《星期日泰晤士报》百强科技企业榜单,并凭借 Apple Design Award 与 App Store 提名获得业界认可。他的研究成果与方法常被移动取证领域的学术论文引用,他还曾受邀在 Google、Microsoft、Snap 等公司举办的活动上发表演讲。


相关文章

需要帮助吗?

我们会尽力在一个工作日内回复所有消息。

support@reincubate.com
帮助