IPB

Здравствуйте, гость ( Вход | Регистрация )

> Как MAX помогает РКН строить железный занавес: VPN-детект, сбор IP и проверки на Госуслуги
SuperMax
сообщение 16.4.2026, 12:43
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 6 382
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1




отсюда


https://pikabu.ru/story/ kak_max_pomogaet_rkn_stroit_zheleznyiy_zanaves_vpndetekt_sbor_ip_i_proverki_na_g
osuslugi_13874594





TL;DR для тех, кому лень читать
  • MAX (ex-TamTam) от VK при каждом открытии тайно определяет ваш внешний IP и VPN через 6 сервисов (Yandex, Amazon, Mail.ru и др.)
  • URL этих сервисов спрятаны в коде как массивы чисел — чтобы их нельзя было найти поиском и быстрым анализом сетевого трафика
  • Приложение проверяет доступность российских сервисов, включая gosuslugi.ru (Госуслуги интегрированы в MAX, но проверяется именно доступность, а не функции)
  • Определяет VPN и отправляет информацию на сервер. В коде звонков — виджет «Лучше без VPN» (найден в коде, динамически не проверял)
  • В коде присутствуют домены main.telegram.org и mmg.whatsapp.net — в текущей версии не используются, но сам факт их наличия рядом с активными проверками примечателен
  • Все данные привязаны к вашему аккаунту MAX (OK.ru ID): IP + оператор + VPN-статус + время
Если интересно — ниже подробный разбор. Если хочется увидеть сам код — листайте до «Часть 2».


Это первая статья в цикле
Я провожу полный аудит безопасности мессенджера MAX. Эта статья — про систему сбора IP и VPN-детект. Если тема зайдёт, дальше будет:

  • Тихий звонок: как сервер может инициировать вызов без звонка и UI
  • Ключевые слова через микрофон: в MAX встроены ASR (распознавание речи), идентификация голоса и детект ключевых слов — с моделями, которые доставляет сервер
  • End-to-end шифрование? Нет, не слышали: сообщения, контакты и токены хранятся в открытом виде

Предыстория
Я занимаюсь аудитом безопасности мобильных приложений. Недавно взялся за MAX — мессенджер от VK, который активно продвигают как «замену Telegram». Скачал APK из Google Play и RuStore, декомпилировал через JADX и начал копаться в коде.

При анализе сетевого трафика заметил странность: при каждом запуске приложение лезет на checkip.amazonaws.com. Это сервис Amazon, который возвращает твой внешний IP-адрес. Зачем мессенджеру знать мой IP через Amazon?

Потянул за ниточку — и нашёл не баг, а целую подсистему. Спроектированную, отлаженную, с защитой от обнаружения и гарантированной доставкой данных на сервер. Это не аналитика. Это инфраструктура сетевой слежки.


Часть 1: Что я нашёл
Здесь — суть без кода. Что делает приложение, зачем и чем это грозит.



1. Шесть сервисов, чтобы узнать ваш IP

Каждый раз, когда вы открываете MAX, приложение тайно определяет ваш внешний IP-адрес. Для этого у него есть 6 сервисов:

Шесть штук — для одной задачи. Зачем столько? Для надёжности: если один сервис не ответит, сработает другой. Порядок каждый раз перемешивается случайным образом — так сложнее обнаружить запросы по сетевому паттерну.

Но самое интересное: адреса этих сервисов спрятаны в коде. Не как обычные строки вроде "https://ip.mail.ru/", а как массивы чисел:

{104, 116, 116, 112, 115, 58, 47, 47, 105, 112, 46, 109, 97, 105, 108, 46, 114, 117, 47}

Каждое число — это ASCII-код буквы. 104 = «h», 116 = «t», и так далее. Получается https://ip.mail.ru/. Обычный поиск по коду (grep, strings) эти URL никогда не найдёт. Это не ошибка и не оптимизация — это намеренное сокрытие.

И ещё: приложение использует для запросов не стандартную библиотеку OkHttp (которую легко перехватить), а низкоуровневые raw-сокеты (java.net.Socket). Это обходит сетевые перехватчики, прокси и мониторинг трафика.

Для понимания: обычное приложение, которому нужен ваш IP для легитимных целей (например, геолокация для контента), делает один запрос через стандартную библиотеку. MAX делает 6 резервных запросов через скрытые URL по raw-сокетам. Это инженерия уровня малвари.


2. Пять проверок доступности: приложение определяет, в России ли вы
Параллельно со сбором IP приложение проверяет доступность пяти хостов — может ли ваш телефон до них «дотянуться»:

  • api.oneme.ru (VK Group) — свой API
  • gstatic.com (Google) — проверка доступности интернета
  • mtalk.google.com (Google) — push-уведомления
  • calls.okcdn.ru (VK Group) — CDN для звонков
  • gosuslugi.ru (Правительство РФ) — российский государственный сервис
Госуслуги в этом списке не случайность — в MAX интегрирована авторизация через ЕСИА (об этом в следующих статьях). Но проверка касается не авторизации, а базовой сетевой доступности: можно ли с вашего устройства достучаться до gosuslugi.ru? Результат — просто «да» или «нет» — уходит на сервер вместе с VPN-флагом и IP.

Зачем? Комбинация ответов даёт VK полную картину:

  • Госуслуги доступны + нет VPN + российский оператор = обычный пользователь в России
  • Госуслуги не доступны + есть VPN + российский оператор = пользователь обходит блокировки
  • Госуслуги не доступны, но другие иностранные сервисы доступны + нет VPN + неизвестный оператор = пользователь обходит блокировку + пользователь обходит проверку на VPN
Та же логика с другими хостами: gstatic.com и mtalk.google.com показывают, доступен ли Google (актуально для стран с фильтрацией как Китай ). Все пять проверок — это не «работает ли сервис», а снятие отпечатка вашей сетевой среды.


3. VPN-детект: MAX знает и докладывает
MAX определяет VPN через стандартный API Android. Ловит любой — NordVPN, WireGuard, OpenVPN корпоративный, встроенный.

Что происходит дальше: при каждом открытии приложения VPN-статус отправляется на сервер VK вместе с вашим IP и остальными данными. Это подтверждено и анализом кода, и наблюдением трафика. VK точно знает: пользуетесь ли вы VPN, в какой момент и с какого IP.

Кроме того, в коде найден виджет «Лучше без VPN» — панель, которая должна появляться во время звонков при включённом VPN. В ресурсах приложения есть строки на русском и английском. Динамически (на реальном устройстве) я это пока не воспроизводил, но код и ресурсы — на месте.


4. Полное досье при каждом открытии
Каждый раз, когда вы открываете MAX (или приложение просыпается в фоне), оно собирает и отправляет на сервер VK следующие данные:

  • Ваш ID аккаунта MAX (OK.ru ID) — из аккаунта
  • ID сессии — из приложения
  • Ключ авторизации — из HTTP-запроса
  • Внешний IP-адрес — через один из 6 IP-сервисов
  • Мобильный оператор — из SIM-карты (напр. «MTS»)
  • Тип соединения — WiFi / 4G / 5G
  • VPN включён? — через системный API
  • Доступность 5 сервисов — через сетевые проверки
  • Время — системные часы
Вот как выглядит пакет, который уходит на сервер (реконструкция из кода):

Кто: пользователь #123456789 (аккаунт MAX)

Когда: 2026-04-12, 14:30:00

IP: 185.xxx.xxx.xxx

VPN: ДА

Оператор: MTS

Связь: WiFi

Сервисы: gosuslugi.ru — да, Google — да, API MAX — да, CDN звонков — да, push — да

Это не анонимная аналитика. Каждая запись однозначно привязана к вашему аккаунту. А поскольку VK Group владеет OK.ru, VK.com и Mail.ru — аккаунт MAX связывается с профилем ВКонтакте, почтой и другими сервисами экосистемы.


Масштаб
У MAX 107 миллионов зарегистрированных пользователей и 77 миллионов ежедневной аудитории (данные VK, март 2026). С сентября 2025 приложение обязательно предустановлено на все Android-устройства, продаваемые в России и Беларуси.

Представьте: 77 миллионов человек открывают MAX каждый день. При каждом открытии — пакет с IP, VPN-статусом, оператором. Это десятки миллионов точек данных ежедневно: кто использует VPN, кто нет, с какого IP, через какого оператора, доступны ли заблокированные сервисы. В реальном времени.

Это не просто «аналитика одного приложения». Это инфраструктура мониторинга сетевой среды в масштабе целой страны. С каждой новой блокировкой РКН данные HOST_REACHABILITY становятся ценнее — они показывают, работает ли блокировка и кто её обходит.


5. Домены Telegram и WhatsApp в коде
В том же файле, где хранятся адреса активных сервисов, закодированы домены конкурентов: main.telegram.org и mmg.whatsapp.net.

В текущей версии они не используются.

Я не утверждаю, что проверка доступности Telegram «готова к мгновенной активации». Но сам факт — домены конкурентов лежат в одном файле с рабочей системой сбора данных — примечателен.

Отдельно: MAX проверяет, установлен ли Telegram на вашем устройстве — ищет три варианта приложения: основной, бета и веб-версию. Официально это для кнопки «Поделиться» (Telegram ставится первым в списке).

Подробности — в технической части ниже.


6. Сервер контролирует всё
Вся система слежки управляется одним серверным флагом через систему PMS (Push Management System) от VK. Это как remote config, только мощнее: PMS-значения доставляются через постоянное TCP-соединение и применяются мгновенно.

Что это значит на практике:

  • VK может включить сбор IP для всех пользователей одним переключателем
  • Может включить для конкретного пользователя (таргетированная слежка)
  • Может включить для когорты (A/B-тест, определённый оператор, определённый регион)
  • Может выключить перед проверкой (например, перед аудитом Google Play)
  • Всё это — без обновления приложения
Для этой функции даже выделен отдельный пул потоков с именем "host-reachability". Это не аналитика, прикрученная сбоку — это самостоятельная подсистема, спроектированная как отдельный компонент.

И ещё: данные никогда не теряются. Если отправка не удалась — 3 повтора. Если и после 3 раз не получилось — данные сохраняются в локальное хранилище и отправляются позже. При сворачивании приложения — принудительный flush всех накопленных событий. VK спроектировал это так, чтобы получить 100% собранных данных.


7. Правовая реальность
Я не буду спекулировать о том, передаёт ли VK эти данные спецслужбам. Вместо этого — факты.

VK/MAX — зарегистрированный «организатор распространения информации» по 149-ФЗ. По закону Яровой (374-ФЗ) он обязан хранить метаданные коммуникаций 1 год и предоставлять их по запросу. IP-адрес + userId + timestamp + VPN-статус — это именно те метаданные, которые подлежат хранению. А 276-ФЗ (поправки 2024) ужесточил ответственность за использование VPN для обхода блокировок — и HOST_REACHABILITY даёт точные доказательства: кто, когда и откуда использовал VPN.

При этом IP-адрес — это персональные данные по 152-ФЗ. Согласие на такой сбор у пользователя не запрашивается.

Важно: я не утверждаю, что VK злоупотребляет этими данными. Я утверждаю, что код собирает их, закон обязывает хранить и отдавать, а у пользователя нет возможности отказаться. Выводы — за вами.


Часть 2: Доказательства (для тех, кто хочет проверить)
Ниже — конкретный код из декомпилированного APK. Все ссылки на файлы и строки — из JADX-дизассемблера, версия APK 26.12.1.


2.1 Как спрятаны URL: обфускация через int[]
Файл: defpackage/f28.java:43

Вот как выглядит адрес https://ip.mail.ru/ в коде MAX:

// f28.java:53 x = new int[]{104, 116, 116, 112, 115, 58, 47, 47, 105, 112, 46, 109, 97, 105, 108, 46, 114, 117, 47};

Декодируем вручную:

104 → h 116 → t 116 → t 112 → p 115 → s 58 → : 47 → / 47 → / 105 → i 112 → p 46 → . 109 → m 97 → a 105 → i 108 → l 46 → . 114 → r 117 → u 47 → /

Результат: https://ip.mail.ru/

Все 16 URL в файле f28.java закодированы таким образом. Декодирование происходит лениво через rd4.java (cases 17-22 для IP-сервисов, 12-16 для проверок).

Это не минификация и не оптимизация. ProGuard обфусцирует имена классов и методов, но не превращает строковые литералы в массивы int. Это ручная работа разработчиков, цель которой — сделать URL невидимыми для инструментов статического анализа (grep, strings, jadx string search).


2.2 Сбор IP: w18.java
Файл: defpackage/w18.java:139-140

// Собираем все 6 IP-сервисов в список

List o1 = rz3.o1(sz3.U(

f28.o.getValue(), // Yandex IPv4

f28.q.getValue(), // Yandex IPv6

f28.s.getValue(), // ifconfig.me

f28.u.getValue(), // api.ipify.org

f28.w.getValue(), // checkip.amazonaws.com

f28.y.getValue())); // ip.mail.ru

// Перемешиваем — каждый раз случайный порядок

Collections.shuffle(o1);

Дальше — последовательный перебор: первый сервис, который вернул IP ≠ 127.0.0.1, побеждает. Остальные не опрашиваются.

Ключевой момент: запросы идут через java.net.Socket + ByteArrayOutputStream — это raw TCP, не OkHttp.