Перейти к основному содержимому
Reincubate

Как запрашивать данные из файлов SQLite и Plist в резервных копиях iPhone

Aidan Fitzpatrick

Опубликовано 8 марта 2018 г.· Обновлено 5 января 2021 г.

Cover image for: Как запрашивать данные из файлов SQLite и Plist в резервных копиях iPhone

Некоторые пользователи могут захотеть напрямую работать с необработанными файлами в своих резервных копиях в экспертном режиме. Чаще всего это базы данных SQLite (.sqlite3, .sqllitedb и .db) или файлы Plist (обычно .plist).

В iPhone Backup Extractor есть встроенный редактор Plist, а его пользователи могут автоматически экспортировать данные в форматы PDF, HTML, VCard, ICAL, VCF или CSV для удобного доступа. Однако тем, кто хочет извлечь данные из этих файлов, понадобится клиент баз данных SQLite.

Как работать с базами данных SQLite?

Можно попробовать любое из этих трёх приложений:

  • SQLiteFlow (платное, macOS и iOS). SQLiteFlow — наш выбор среди инструментов SQLite для macOS.
  • Base 2 (платное, macOS). Base — один из наших вторых по предпочтению инструментов SQLite для macOS, его можно скачать напрямую или получить как приложение из 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» должен отобразиться полный список контактов.

Чтобы получить доступ к данным SMS, нужно извлечь Libray/SMS/SMS.db, открыть извлечённый файл в программе просмотра SQLite, выбрать вкладку Browse data, а затем выбрать message в раскрывающемся списке Table. После нажатия кнопки с лупой в поле «Data returned» отобразится вся история SMS.

Один из наших пользователей счёл полезным приведённый ниже запрос, поэтому мы включили его сюда. Помните, что форматы баз данных меняются от одной версии 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

Мы ведём здесь список ключевых файлов различных приложений.

Поля даты и времени отображаются просто как числа. Как их интерпретировать?

Интерпретировать некоторые поля в базах данных может быть непросто. Не забывайте, что iPhone Backup Extractor может извлечь данные автоматически! Но если вы действуете самостоятельно, учтите, что даты представлены либо как количество секунд, прошедших с 2001-01-01, либо как 1970-01-01, в зависимости от положения поля даты. В Excel можно использовать формулу вроде =1/1/2001 + A1/60/60/24, где A1 — ваши данные о времени. Возможно, значение также придётся скорректировать с учётом местного часового пояса.


Об авторе

Aidan Fitzpatrick

Основатель, генеральный директор

Aidan основал Reincubate в 2008 году, создав первый в мире инструмент восстановления данных для iOS. С тех пор он превратил компанию в одного из ведущих в мире независимых поставщиков программного обеспечения (ISV), сотрудничая с такими компаниями, как AMD, Qualcomm и HP, чтобы создавать значимые функции машинного обучения для видеопрограмм, главным примером которых служит экосистема приложений Camo. Под руководством Aidan Reincubate четыре раза получала высшую бизнес-награду Великобритании, вошла в список The Sunday Times 100 Tech и была отмечена номинациями на Apple Design Award и в App Store. Его работы и методы нередко цитируются в научных статьях по мобильной криминалистике, а его приглашают выступать на мероприятиях таких компаний, как Google, Microsoft и Snap.


Похожие статьи

Нужна помощь?

Мы стараемся отвечать на все сообщения в течение одного рабочего дня.

support@reincubate.com
Помощь