Пару лет назад я начал исследовать приложения Telegram, протокол MTProto. Я использовал некоторые методы API не по назначению, в общем, ничего особенного. Спустя 2 года я заметил некоторую особенность, о которой мало кто упоминает, возможность испытать которую отсутствует в большинстве официальных графических приложений (за исключением Telegram X). Я начал исследовать ее и решил поделиться опытом с читателями хабра.
Telegram X
Telegram X - призер конкурса Telegram-Android, проводимый самой компанией в 2016 году, на котором были предложены приложения от многих пользователей. Первое место занял проект под названием Challegram в категории библиотеки TDLib, позже оно было переименовано и выпущено под привычным названием - Telegram X. Приложение использует TDlib (https://github.com/tdlib/td), что позволяет не задумываться насчет собственных реализаций MTProto (какие например используются в приложении Telegram Desktop).
Как работают контакты Telegram
Как вы думаете, что происходит, когда вы разрешаете приложению доступ к контактам? Как не сложно догадаться, они отправляются на сервер, где затем происходит их сверка с аккаунтами Telegram. Вы получаете этот список контактов, вы можете нажать меню "Контакты" и написать любому их них. Хорошо. Однако есть и те номера, которые еще не зарегистрировались в телеграм / скрыли свой номер, что же происходит с ними? Здесь все гораздо интереснее: они сохраняются на сервере телеграм, вы можете получить их, экспортировав пункт "Контакты" через Telegram Desktop. Добавляя контакт с номером телефона которого нет в телеграм / скрыт, вы также автоматически добавляете его на сервер.
Кроме того, вы получите уведомление, когда кто-либо создаст аккаунт с номером, который есть в ваших контактах, избежать этого уведомления для вашего контакта попросту невозможно. Пользователи уже предлагали такую возможность (https://bugs.telegram.org/c/82), но она не была реализована. Вы могли бы подумать, что анонимные номера решают эту проблему... НЕТ. Вернемся к этому чуточку позднее.
Особенность
Во всех приложениях кроме Telegram X при добавлении вы получаете плашку вида "Контакта еще нет в телеграм"
![Пример - приложение для Mac OS. Пример - приложение для Mac OS.](https://habrastorage.org/getpro/habr/upload_files/313/27c/b90/31327cb908f161000894baef7fa0ae88.png)
Таким образом, это похоже на функционал множества мессенджеров.
А теперь посмотрите на то же окно в Telegram X:
![Последнее предложение Последнее предложение](https://habrastorage.org/getpro/habr/upload_files/0dc/ec8/a64/0dcec8a641790efdcace0ef57b55fba9.jpg)
Я думаю вы уже догадались. 8 - число пользователей Telegram, у которых этот номер телефона загружен на сервер. Не верите? Смотрите сами: https://core.telegram.org/constructor/popularContact.
Какова ваша фантазия?
Это может быть использовано в различных направлениях, но одним из интересных - является наблюдение за парсингом Telegram.
Ни для кого не секрет что в 2020 году утекла база пользователей Telegram, предположительно полученная при помощи парсинга. Это было допущено ввиду слишком маленьких ограничений на проверку контактов. Некоторые люди просто купили много аккаунтов и начали загружать на сервер номера, чтобы сверить их. При регистрации они также получили бы чат, из которого могли бы через временные промежутки получать информацию об аккаунте. Как бы пользователь ни старался, у него не вышло бы скрыть себя, он даже не знал бы кто именно добавил его контакт.
Сейчас все эти теории можно проверить наглядно. Введите популярный номер, скрытый или не зарегистрированный в Telegram (например +79998887766) - получите "более 1000 контактов". Введите случайный из существующего диапазона - получите несколько. И этих несколько будет достаточно, чтобы автоматически обновлять информацию о вашем имени в Telegram, статусе, собирать ваши аватарки. У обычных, используемых номеров значение больше 100 - действительно, друзья имеющие доступ к Telegram уже загрузили ваш номер на сервер. Но почему у пустых или виртуальных номеров, которые никогда никому не принадлежали уже есть "знакомые в Telegram"? Думайте сами. Введите случайные цифры из несуществующего диапазона - вы с большой долей вероятности не получите ничего. И действительно, никому не нужно собирать такие номера, они никогда не могут быть кем-либо использованы.
Эксперимент с покупкой виртуальных номеров (не от Telegram)
Я приобрел номера нескольких стран чтобы проверить количество потенциальных знакомых в Telegram. Результаты не обрадовали меня.
![Вот я купил номер кипра. А у него уже целых 8 "знакомых в Telegram"! Вот я купил номер кипра. А у него уже целых 8 "знакомых в Telegram"!](https://habrastorage.org/getpro/habr/upload_files/073/e23/9dd/073e239dd157885eccc9612dbeb7e80a.jpg)
![Я действительно его приобрел Я действительно его приобрел](https://habrastorage.org/getpro/habr/upload_files/c0a/1fa/2be/c0a1fa2be120fbe7395222f33e6af973.jpg)
Так еще с несколькими номерами. Большая часть имела знакомых, вы можете проверить мои слова самостоятельно, приобрести, проверить и отменить номер. Множество сервисов позволяют сделать это.
Анонимные номера
Кладезь для параноиков, покупка криптовалютой, никакой привязки к аккаунту, верно? Да, но все только хуже. Во-первых транзакции в сети TON прозрачны и их может проанализировать каждый. Во вторых АБСОЛЮТНО ВСЕ номера вида +8880XXXXXXX имеют от ДВУХ контактов. А именно такие номера в большинстве случаев продаются на https://fragment.com/. Вы можете проверить случайный номер не с нулём, а, например, с девяткой - получите 0 "знакомых". Получается, что кто-то спарсил 10 млн анонимных номеров, иначе объяснить это сложно. Анонимность новых номеров на нуле, вы также можете добавить их через контакты и получить после уведомление о регистрации.
К чему это все?
1) Добавляем случайный ещё никому не выданный номер в свои контакты
2) Когда он регистрируется в телеге из уведомления получаем ID пользователя (теперь пользователь может как угодно скрывать свой номер настройками приватности - он однозначно идентифицируется)
3) Собираем базу данных с телефонами и ID
4) Проходит много лет и пользователь телеги решает совершить что-нибудь нехорошее в каком-нибудь чате думая, что он анонимен, но он ошибается - все кому надо уже знают его номер телефона
5) Звоним опсосу и просим предоставить данные о клиенте с таким номером
6) Дело раскрыто, все плохие мальчики и девочки наказаны.
[UPD: примерно 9 апреля 2023]
Метод перестал работать как ранее. Теперь необходимо иметь этот номер в списке контактов телеграм. Список можно экспортировать через Telegram Desktop и обновить различными методами (https://core.telegram.org/method/contacts.importContacts), поскольку при добавлении несуществующего или скрытого человеком номера через меню контактов, книжка не обновляется.
Telegram X немного сломали - теперь в нем не показывается предложение отправить СМС, а если номер скрыт или не существует - отображает его некорректность.