habrahabr

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

  • воскресенье, 27 октября 2024 г. в 00:00:04
https://habr.com/ru/articles/852902/

Введение

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

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

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

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

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

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

Итого.

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

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

Практика

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

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

Далее можно пойти разными путями. Если нужно просто просмотреть базу в наглядном виде, то стоит использовать просмотрщик БД, вроде DB Browser for QSLite. Если нужно восстановить сообщения, то можно воспользоваться специальными утилитами, либо простым текстовым редактором. Утилиты для восстановления (я попробовал с десяток) сегодня фактически бесполезны. Возможно, они успешно восстанавливали что-то на базах 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, затем открыть профиль нужного пользователя.

Заключение

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