Недавно возникла необходимость восстановить пару удаленных смс на Андроиде. Возможно мой опыт окажется полезным.
1. Для начала разберемся как достать неудаленные данные:
Где лежат
База смс-сообщений лежит по адресу:
/data/data/.com.android.providers.telephony/databases/mmssms.db (для доступа необходим root)
Как достать
Это sqlite БД, в которой собственно и хранится информация обо всех СМС (время, отправитель, текст, объединение в цепочки и т.д.). Причем популярные GUI-интерфейсы (SQLite Database Browser и sqliteman) для работы с sqlite отказались открывать эту БД из-за сильно новой версии.
Остается использовать консоль sqlite или взять готовую обертку, предназначенную как раз для экспорта смс из mmssms.db - yaffs extractor, mmssms.db & contacts2.db converter.
Этот набор приложений позволяет сконвертировать нашу базу в формат xml, совметимый с программой SMS Backup & Restore.
Как закинуть обратно в телефон
В дальнейшем мы можем просматривать содержимое xml в любом текстовом редакторе или же импортировать его обратно в телефон, с помощью SMS Backup & Restore:
Положить xml в /sdcard/SMSBackupRestore , запустить Restore, выбрать наш xml.
Если после удаления сообщений, которые необходимо восстановить, не было новых сообщений, то делаем обычный экспорт БД и достаем всё что нужно.
Если же новые сообщения всё-таки были, то тут уже как повезет:
Удаленные сообщения были помечены как свободные и новые данные могли перезаписать старые.
В моём случае, после одного полученного собщения, удаленные данные не были удалены и прекрасно видны в HEX-редакторе. Готового ПО для восстановления я не нашел.
P.S. Написанное выше относится и к истории звонков, с той оговоркой, что данные хранятся в
data/data/com.android.providers.contacts/databases/contacts2.db и экспорт делается с ключём -c.
База смс-сообщений лежит по адресу:
/data/data/.com.android.providers.telephony/databases/mmssms.db (для доступа необходим root)
Как достать
Это sqlite БД, в которой собственно и хранится информация обо всех СМС (время, отправитель, текст, объединение в цепочки и т.д.). Причем популярные GUI-интерфейсы (SQLite Database Browser и sqliteman) для работы с sqlite отказались открывать эту БД из-за сильно новой версии.
Остается использовать консоль sqlite или взять готовую обертку, предназначенную как раз для экспорта смс из mmssms.db - yaffs extractor, mmssms.db & contacts2.db converter.
Этот набор приложений позволяет сконвертировать нашу базу в формат xml, совметимый с программой SMS Backup & Restore.
extract.exe -s mmssms.db
Как закинуть обратно в телефон
В дальнейшем мы можем просматривать содержимое xml в любом текстовом редакторе или же импортировать его обратно в телефон, с помощью SMS Backup & Restore:
Положить xml в /sdcard/SMSBackupRestore , запустить Restore, выбрать наш xml.
2. А теперь собственно восстановление
Как и в большинстве БД, в sqlite данные при удалении физически не стираются, а только помечаются как удаленные.Удаление из базы происходит не в момент удаления сообщений пользователем, а при записи новых сообщений.Если после удаления сообщений, которые необходимо восстановить, не было новых сообщений, то делаем обычный экспорт БД и достаем всё что нужно.
Если же новые сообщения всё-таки были, то тут уже как повезет:
Удаленные сообщения были помечены как свободные и новые данные могли перезаписать старые.
В моём случае, после одного полученного собщения, удаленные данные не были удалены и прекрасно видны в HEX-редакторе. Готового ПО для восстановления я не нашел.
P.S. Написанное выше относится и к истории звонков, с той оговоркой, что данные хранятся в
data/data/com.android.providers.contacts/databases/contacts2.db и экспорт делается с ключём -c.