iPhone — восстановление удаленных контактов, заметок и sms в отсутствии резервной копии
Invite pending
[Свеже]удаленные из iPhone контакты, заметки и sms можно восстановить, даже если нет их резервной копии.
Это возможно благодаря тому, что все они хранятся в iPhone в файлах БД SQLite, которая при удалении данных не затирает их, а только помечает использованные для хранения записей страницы БД как свободные. Если пользователь удалил контакт/заметку/sms и больше не создавал контактов/заметок/не отправлял или не получал sms — вероятность успешного восстановления удаленного очень высока. К примеру, я собственноручно восстановил удаленные ошибочной синхронизацией ~700 контактов и около 20 заметок. Джейлбрейк не требуется.
Прочитать/восстановить заметку или sms не сложнее пересылки двух байтов, восстановление контактов намного сложнее.
Технические подробности
Места хранения данных в iPhone относительно /var/mobile/ (или /var/root/ — в зависимости от версии прошивки):
Контакты — Library/AddressBook/AddressBook.sqlitedb
Заметки — Library/Notes/notes.db
sms — Library/SMS/sms.db
Делаем резервную копию средствами iTunes. После этого на компьютере под управлением Windows получаем папку %APPDATA%\Apple Computer\MobileSync\Backup\[UID резервной копии из 40 символов]\. В этой папке:
31bb7ba8914766d4ba40d6dfb6113c8b614be442.mddata = AddressBook.sqlitedb
740b7eaf93d6ea5d305e88bb349c8e9643f48c3b.mddata = notes.db
3d0d7e5fb2ce288813306e4d4636395e047a3d28.mddata = sms.db
Если хотим получить общее представление о том, как организованно хранение — смотрим эти файлы с помощью SQLite Expert. Разумеется, удаленных данных там не увидим. Зато увидим, что, например, в sms.db номера телефонов лежат в одной таблице с телом. Что существенно упрощает жизнь. А в AddressBook имена и номера телефонов — в разных таблицах. Что усложняет, и очень сильно.
Чтобы попытаться увидеть удаленные данные — просто открываем нужный файл по F3 в FAR, Shift+F8 — UTF-8. Или в любом вьюере по вкусу с поддержкой UTF.
Смотрим. Понимаем, что скопировать в буфер обмена прямо из окна FAR (Alt+Space, Изменить — Пометить… Enter) заметку или смс — совсем не то же самое, что вычислить «помеченные незанятыми» страницы БД AddressBook, восстановить связи между таблицами ABPerson и ABMultivalue, достать связанные данные… Я предупреждал.
Выводы:
Это возможно благодаря тому, что все они хранятся в iPhone в файлах БД SQLite, которая при удалении данных не затирает их, а только помечает использованные для хранения записей страницы БД как свободные. Если пользователь удалил контакт/заметку/sms и больше не создавал контактов/заметок/не отправлял или не получал sms — вероятность успешного восстановления удаленного очень высока. К примеру, я собственноручно восстановил удаленные ошибочной синхронизацией ~700 контактов и около 20 заметок. Джейлбрейк не требуется.
Прочитать/восстановить заметку или sms не сложнее пересылки двух байтов, восстановление контактов намного сложнее.
Технические подробности
Места хранения данных в iPhone относительно /var/mobile/ (или /var/root/ — в зависимости от версии прошивки):
Контакты — Library/AddressBook/AddressBook.sqlitedb
Заметки — Library/Notes/notes.db
sms — Library/SMS/sms.db
Делаем резервную копию средствами iTunes. После этого на компьютере под управлением Windows получаем папку %APPDATA%\Apple Computer\MobileSync\Backup\[UID резервной копии из 40 символов]\. В этой папке:
31bb7ba8914766d4ba40d6dfb6113c8b614be442.mddata = AddressBook.sqlitedb
740b7eaf93d6ea5d305e88bb349c8e9643f48c3b.mddata = notes.db
3d0d7e5fb2ce288813306e4d4636395e047a3d28.mddata = sms.db
Если хотим получить общее представление о том, как организованно хранение — смотрим эти файлы с помощью SQLite Expert. Разумеется, удаленных данных там не увидим. Зато увидим, что, например, в sms.db номера телефонов лежат в одной таблице с телом. Что существенно упрощает жизнь. А в AddressBook имена и номера телефонов — в разных таблицах. Что усложняет, и очень сильно.
Чтобы попытаться увидеть удаленные данные — просто открываем нужный файл по F3 в FAR, Shift+F8 — UTF-8. Или в любом вьюере по вкусу с поддержкой UTF.
Смотрим. Понимаем, что скопировать в буфер обмена прямо из окна FAR (Alt+Space, Изменить — Пометить… Enter) заметку или смс — совсем не то же самое, что вычислить «помеченные незанятыми» страницы БД AddressBook, восстановить связи между таблицами ABPerson и ABMultivalue, достать связанные данные… Я предупреждал.
Выводы:
- Удаленные из iPhone контакты, заметки и sms могут быть доступны для восстановления неопределенное время. До тех пор, пока они не будут перезаписаны новыми данными.
- Удаление одной записи, а затем создание нескольких новых не гарантирует недоступность удаленной записи — нет гарантии, что SQLite выберет для новых записей место, освободившееся от удаленной.
- Для гарантированного удаления записей можно применять команду VACUUM (удалить на iPhone «чувствительные данные»; сделать резервную копию; SQLite Expert — открыть базу в бэкапе — закладка Database — кнопка VACUUM справа внизу; повторить для каждой очищаемой базы; восстановить iPhone из резервной копии)