November 13

Восстанавливаем удалённые сообщения в Telegram  

Введение

Телеграм довольно ответственно относится к конфиденциальности пользователей. В частности, можно удалить любое сообщение в переписке, как у себя, так и у собеседника. И сообщение действительно удалится, у обоих и навсегда. Но есть пара «но».

Если сообщение было написано не слишком давно, то, скорее всего, на устройстве собеседника есть его локальная копия. Так что:

Во-первых. Чтобы сообщение удалилось с устройства собеседника, он должен открыть телеграм с включённым интернетом. Только тогда чаты синхронизируются, и сообщение будет удалено из базы данных на устройстве.

Во-вторых. Даже если сообщение уже удалилось, всё равно есть небольшой шанс на его восстановление. Хотя для этого на устройствах Android понадобится рут, а на устройствах iOS — джейлбрейк.

Шанс на восстановление будет близок к 100%, если:
а) вы сами удалили сообщение со своего устройства,
б) сразу закрыли телеграм и больше его не открывали,
в) выключили интернет.

Потому что каждое вновь полученное сообщение (из любого, в т.ч. замьюченного, чата) может записаться на место удалённого.

Итого.

Если хотите понадёжнее удалить сообщение, — делайте это заранее и позвольте новым сообщениям окончательно затереть удалённые на вашем устройстве. И собеседника тоже вытаскивайте в онлайн.

Если же хотите восстановить сообщение, которое могло быть удалено без вашего ведома, — наоборот, не допускайте синхронизации данных, как можно быстрее выключите интернет. И, если в самом приложении найти сообщение всё равно не удаётся, готовьтесь взламывать собственное устройство (если в вашем случае оно того стоит, конечно).

Практика

Как делать рут или джейлбрейк, я описывать не стану. Но если вам хочется просто потренироваться «на кошках» (как мне), — то вместо реального устройства можно использовать эмулятор из Android Studio. Эмуляторы по умолчанию имеют рут и, соответственно, дают доступ ко всей файловой системе.

В Android Studio создаём и запускаем эмулятор, ставим на него телеграм. Открываем в студии вкладку Device Explorer и идём в /data/data/org.telegram.messenger.web/ (название может немного отличаться в зависимости от вашей версии телеграма). Ищем там обычную базу данных SQLIite с расширением «.db» (в моём случае это был файл «cache4.db» в подпапке «files») и сохраняем её к себе.

Далее можно пойти разными путями. Если нужно просто просмотреть базу в наглядном виде, то стоит использовать просмотрщик БД, вроде DB Browser for SQLite. Если нужно восстановить сообщения, то можно воспользоваться специальными утилитами, либо простым текстовым редактором. Утилиты для восстановления (я попробовал с десяток) сегодня фактически бесполезны. Возможно, они успешно восстанавливали что-то на базах SQLite старых версий, но не на современных. Так что остаётся лишь вручную разбирать текст.

Чтобы открыть базу данных в виде текста, можно воспользоваться любым редактором. Главное чтобы он мог открыть файл как текст в кодировке UTF-8. Можно сделать это через Notepad++ (после открытия выбрать Кодировки > UTF8). Или через банальный Microsoft Word (сразу при открытии db-файла выбрать Другая > Юникод (UTF-8)). Большая часть текста всё равно останется кракозябрами, но родную речь в нём уже можно будет найти. Если помните какие-то ключевые слова нужного сообщения, воспользуйтесь поиском. Если сообщение было удалено, но ещё не было перезаписано чем-то новым, — вы его найдёте.

Сообщение, только что удалённое из БД, всё ещё находится внутри файла

Если интересно просто посмотреть, как телеграм хранит ваши данные, стоит открыть базу в просмотрщике БД. Открыв наш файл в DB Browser, во вкладке «Данные» можно выбрать таблицу «messages_v2» и поискать сообщения в ней. Текст каждого сообщения хранится в столбце «data». В DB Browser его можно открыть выделив ячейку и выбрав на панели «Редактирование ячейки БД» (справа) кнопку «>>», затем «Open in external application». Далее не забываем про кодировку.

Сообщения от конкретного пользователя можно найти в таблице по полю «uid». Идентификатор пользователя можно выяснить либо через Telegram Desktop, либо на web.telegram.org. В веб-версии uid пользователя будет виден в адресной строке, если просто открыть чат с ним. В версии для ПК нужно зайти в Настройки > Продвинутые настройки > Экспериментальные настройки > Show Peer IDs in Profile, затем открыть профиль нужного пользователя.

Заключение

Очевидно, данная статья не раскрывает каких-то фундаментальных тем и является лишь описанием личного опыта по довольно специфическому вопросу. Однако мне не удалось найти публикаций, которые раскрывали бы эту тему так же подробно и конкретно. Возможно, статья может оказаться полезной в некоторых жизненных ситуациях для самого широкого круга лиц. А также будет занятной и поучительной для тех, кто слишком полагается в вопросах безопасности на инструменты мессенджеров.