Мы применяем множество приёмов, помогая людям восстанавливать данные с помощью наших продуктов, и многое из того, что мы создали за последнее десятилетие, скрыто под поверхностью. Сегодня мы подробно разберём один из подходов к восстановлению удалённых сообщений: криминалистическое восстановление данных SQLite.
Как вообще iPhone хранят данные?
Если коротко, многие приложения хранят данные в базах данных, и большинство из них используют формат SQLite. SQLite — аккуратный небольшой формат базы данных без сервера, который хорошо подходит для задач Apple и разработчиков приложений. Поскольку SQLite работает без отдельного сервера баз данных, он отличается от других баз данных рядом особенностей. В частности, чтобы доступ оставался быстрым, во время работы он не может регулярно заниматься самообслуживанием. Пользователям не нужно, чтобы приложение тормозило, пока база данных выполняет плановое обслуживание, например очищает индексы.
В SQLite такие операции очистки и оптимизации возможны, но обычно выполняются нечасто. Для пользователей это правильный баланс: ваш iPhone работает достаточно быстро, а данные остаются надёжными. И если потребуется, у вас будут выше среднего шансы восстановить удалённые данные iOS именно потому, что это обслуживание выполняется редко.
Не вдаваясь в технические подробности, скажем, что процесс довольно прост. Представьте, что эти базы данных — большие картотечные шкафы:
- Когда в них нужно добавить информацию, вы кладёте папку с аккуратной этикеткой, поясняющей, что в ней лежит, — так работает ваш телефон.
- Но когда вы удаляете данные, телефон не вынимает папку из шкафа, а просто снимает с неё этикетку. Старые данные не удаляются, они остаются без этикетки («осиротевшими», как мы могли бы сказать технически). Поэтому при удалении данных телефону не нужно проходить сравнительно медленный процесс освобождения места в шкафу. Он просто говорит: «А, забудем об этом» — и идёт дальше.
- Когда нужно добавить новые данные, телефон при наличии места просто кладёт новые папки. Если места не хватает, он смотрит, нет ли где-нибудь таких папок без этикеток, и если есть, выбрасывает из них столько, сколько нужно, чтобы освободить место.
Из этого можно сделать вывод: удалять данные на телефоне быстро, а добавлять их тоже довольно быстро, если есть место. И — что неочевидно — именно добавление новых данных на самом деле приводит к тому, что старая информация исчезает.
Восстановление удалённой информации из SQLite на iOS
Допустим, вы пользуетесь телефоном пару месяцев. Базы данных на нём похожи на картотечные шкафы, о которых мы говорили. В них лежит множество файлов, и там, где вы удалили данные, эти файлы всё ещё остаются, но с двумя оговорками: они могут быть частично или полностью перезаписаны и у них нет этикеток.
Техника восстановления в итоге такая, как вы и ожидаете: нужно найти эти осиротевшие файлы, полные или нет, попытаться понять, куда они вписываются и осталось ли в них достаточно данных, чтобы в них был смысл. Как нетрудно догадаться, всё это довольно кропотливо, а различные технические нюансы могут всё усложнить. В частности, базы данных размером больше нескольких мегабайт и базы, содержащие двоичные данные, заметно усложняют процесс.
При этом вернуть какие-то данные не так уж сложно, поэтому на рынке и много инструментов, которые заявляют, что умеют это делать. В целом их можно разделить на три категории:
- Хорошие. Они используют множество разных приёмов, созданных и проверенных на тысячах разных примеров удаления или повреждения.
- Плохие. Они восстанавливают только оставшееся содержимое, которое полностью цело и содержит ряд подсказок о том, куда оно относится.
- Злые. Они сканируют осиротевшее содержимое и помечают любой старый мусор, который хоть как-то может вписаться в контекст, если прищуриться. «NSMutableArray» — может ли это быть названием вашей пропавшей записи контакта? Хм.
Восстановление удалённых данных SQLite с iOS в реальных условиях
Теперь, когда мы немного рассказали о том, как это работает, посмотрим, насколько это эффективно в реальных условиях. Ведь мы хотим дать обычным пользователям возможность вернуть свои данные, не будучи экспертами. Получается ли у нас? Мы сравним четыре ведущих инструмента восстановления SQLite с iPhone Backup Extractor. На момент написания статьи последние версии этих инструментов таковы:
| Название | Версия и дата выпуска | Платформы | Цена |
|---|---|---|---|
| Reincubate iPhone Backup Extractor | 7.6.1.2201, май ’18 | Windows и macOS | $34.95 |
| SQLite Doctor от SQLabs | 1.3.0, авг. ’13 | Windows и macOS | $49 |
| Sqlite Database Recovery от SysTools | 1.2, дата выпуска не указана | Только Windows | $149 |
| Stellar Phoenic Repair For Sqlite от Stellar Data Recovery 1.0, дата выпуска не указана | Только Windows | $599 | |
| Forensic Explorer (FEX) от GetData | 4.3.5.7364, май ’18 | Только Windows | $1,695 |
| Sqlite Forensics Explorer от Acquire Forensics | 2.0, дата выпуска не указана | Только Windows | $149 |
Для этого теста мы возьмём большую базу данных, полную реальных данных. В нашем случае это база данных «Messages» размером 169 МБ с iPhone под управлением iOS 11. Посмотрим на неё: приведённые ниже команды показывают размер файла и результат запроса, подсчитывающего, сколько в ней сообщений.
$ ls -l sms.db
-rw------- 1 afitzpatrick 177565696 Oct 2 2017 sms.db
$ sqlite3 sms.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> SELECT COUNT(*) FROM message;
220261
Итак, сообщений больше 220 000. Это те, которые не были удалены. Но сколько удалённых сообщений смогут найти инструменты восстановления?
Восстановление данных SQLite с iOS: результаты
Мы запустили все перечисленные выше инструменты на одном и том же файле и записали результаты в таблицу ниже. Мы бы с удовольствием использовали Mac, но поскольку не все инструменты поддерживают macOS, мы взяли ПК с 16 ГБ ОЗУ под управлением Windows 10 Pro (версия 1803, сборка 17134.48).
| Reincubate | Acquire Forensics | SQLabs | SysTools | Stellar Data Recovery | GetData | |
|---|---|---|---|---|---|---|
| Восстановлено | 342 | 56 (но в основном мусор) | 0 | 0 (после долгого сканирования найдено 220 261 — столько же, сколько уже было действительных записей!) | 0 (при каждом запуске он досчитывал до 37 удалённых сообщений, но не завершал процесс и вылетал с ошибкой 0x40000015. Экспортировать или сохранить что-либо не удалось.) | 0 (We reached out multiple times to purchase a license, but never heard back.) |
| Восстановлен «мусор»? | Нет; все найденные сообщения оказались действительными восстановленными. Эмодзи, даты, время и номера отправителей и получателей восстановлены. | Большая часть восстановленного — мусор | Нам несколько раз пришлось вручную вводить максимальные значения ROWID, чтобы попробовать разные параметры. Ничего не было восстановлено ни разу. | Найдены только уже существовавшие сообщения. | Вылетал каждый раз, поэтому сказать ничего нельзя. | Wasn’t possible to get it running. |
| Эффективная стоимость одного восстановленного сообщения (в этом примере) | $0.10 | $2.66 | >$49 | >$149 | >$599 | >$1,695 |
Итак, это стало небольшим сюрпризом: мы ожидали, что все они хотя бы что-то восстановят. Оказалось, что наш скромный инструмент лидирует на рынке по восстановлению данных SQLite, хотя и не является специализированным инструментом для этого. (Если вам было интересно, именно поэтому мы также лицензируем свою технологию другим компаниям. Это сложная задача.)
Восстановление данных SQLite в разных версиях iOS
С каждым новым выпуском iOS у Apple есть возможность изменить то, как операционная система работает с базами данных SQLite. Это касается и оптимизации того, как часто выполняются очистка и другие операции обслуживания и когда они запускаются.
По мере роста мощности устройств эти операции можно использовать свободнее, так как их влияние на работу пользователя уменьшается. Поэтому с каждым новым поколением база данных SQLite, вероятно, очищается чаще, что делает её быстрее в обычных операциях. Это согласуется с целью Apple повышать защиту данных и конфиденциальность пользователей, ведь на устройстве не остаётся ненужных данных. Однако есть и оборотная сторона: восстановление данных методом SQLite становится невозможным.
В iOS 11 мы начали замечать рост активности по очистке баз данных SMS и iMessage. Восстановление по-прежнему возможно, и вероятнее для более свежих сообщений, удалённых позже, но не гарантировано.
В iOS 12 частота очистки базы данных SMS и iMessage заметно выросла. Поскольку этот выпуск позиционировался как сосредоточенный на обслуживании и ускорении, такое изменение логично: оно, вероятно, обеспечит более плавную работу в самых распространённых операциях.
Что нужно сделать, чтобы воспользоваться этим при восстановлении данных iOS?
Возможно, это самое приятное: эта технология встроена в Reincubate iPhone Backup Extractor с самых первых дней. Когда вы работаете с приложением, оно применяет эту технологию при просмотре или экспорте сообщений и ряда других типов данных. В зависимости от того, какие данные вы смотрите и как, приложение покажет, какие фрагменты данных были восстановлены, а какие нет. Всё это уже включено.






