Рубрики
На повестке дня

Ответ на пост «Как MAX помогает РКН строить железный занавес: VPN-детект, сбор IP и проверки на Госуслуги»

Привет, меня зовут Павел, я бывший хакер, а ныне один из разработчиков CachyOS. На прошлой неделе мне прислали ссылку на громкое «расследование» под названием «Как MAX помогает РКН строить железный занавес: VPN-детект, сбор IP и проверки на Госуслуги». Я прочитал оба поста, и как человек за плечами которого много того, о чём публично говорить не стоит, могу громко заявить, что автор умышленно или по незнанию вводит вас в заблуждение. Начнём по порядку.

URL сервисов для определения IP спрятаны в коде как массивы чисел (например, {104, 116, 116, 112, 115…}), чтобы их нельзя было найти поиском и быстрым анализом. Это «инженерия уровня малвари» и намеренное сокрытие следов.

Это не малварь, это базовая работа коммерческого обфускатора. ProGuard, который используют 90% Android-приложений, умеет автоматически превращать строки в массивы байт или int. Это делается не для того, чтобы что-то скрыть от пользователя, а для уменьшения размера APK-файла, защиты от конкурентов и усложнения работы автоматических сканеров уязвимостей. Если бы разработчики ПО действительно хотели бы скрыть веб-адреса, вы бы никогда их не нашли — они лежали бы в нативной библиотеке .so с шифрованием AES-256 и динамической расшифровкой. А тут простой JAVA массив (f28.java), который видит любой, кто открыл JADX. Короче говоря, автор выдаёт стандартную защиту от копипасты и нубо-хакеров за попытку скрыть преступление.

MAX при каждом открытии тайно определяет ваш внешний IP через шесть сервисов (Яндекс, Amazon, Mail.ru и другие). Запросы идут через raw-сокеты в обход стандартных библиотек, а порядок сервисов каждый раз перемешивается. Это «инфраструктура сетевой слежки» в масштабах всей страны.

Это называется STUN-серверы. Они нужны любому мессенджеру с голосовыми и видеозвонками. Пользователь и его собеседник сидит за роутерами, и чтобы установить прямое P2P-соединение, приложение должно узнать свой внешний IP и порт. Для этого оно стучится к STUN-серверу. Шесть серверов — для отказоустойчивости (один упал — работает другой). Их жанглирование (перемешивание порядка) чтобы не перегружать один сервер миллионами запросов. А RAW-сокеты — потому что STUN работает поверх UDP, а не через стандартную HTTP-библиотеку OkHttp, которую автор ожидал увидеть. Да, MAX отправляет ваш IP на свой сервер — иначе как другой пользователь узнает, куда стучаться для звонка? То же самое делают Telegram, Signal, WhatsApp и Wire. Автор нашёл механизм P2P-связи и назвал его слежкой, LOL.

MAX проверяет доступность пяти хостов, включая gosuslugi.ru. Это часть системы сбора данных о пользователе. Комбинация ответов даёт VK полную картину: кто обходит блокировки, кто использует VPN, кто находится за границей.

Это простая диагностика. Приложению нужно знать, почему у вас не идёт звонок. Если Google доступен, а Госуслуги нет — пользователь за границей или у провайдера проблемы внутри РФ. Если Госуслуги доступны, а Google нет — пользователь в России, и его провайдер блокирует западные ресурсы. Если ничего не доступно, кроме API MAX — пользователь на корпоративном прокси с белым списком. На основе этих данных приложение ориентируется, какие подсказки выводить пользователю на экран и какие внутренние сервисы можно задействовать. Если называть проверку доступности сайта «шпионажем», тогда каждый браузер и каждая операционная система шпионят за вами каждую секунду. А учитывая, что правительство планирует сделать из MAX национальный мессенджер «всё влючено», то нет ничего удевительного простукивания им уймы внешних веб-ресурсов.

В MAX встроены ASR (распознавание речи), идентификация голоса и детект ключевых слов во время звонков. Модели доставляются с сервера. Это система прослушки.

Наличие ASR-модели — это давно норма для приложения с поддержкой голосового ввода. С 2024 года крупные мессенджеры внедряют локальные модели для голосового управления («Ответить», «Завершить вызов», «Отключить микрофон»), для шумоподавления и для определения активности речи (чтобы не отправлять пустые пакеты в тишине). Модель работает локально на вашем телефоне. Это легко проверить через сниффинг трафика — который автор, судя по всему, либо не делал, либо не нашёл ничего криминального и потому промолчал.

В коде присутствуют домены main.telegram.org и mmg.whatsapp.net. «Сам факт их наличия рядом с активными проверками примечателен». MAX проверяет, установлен ли Telegram на устройстве!

Эту глупость даже комментировать не хочется. Это нужно для кнопки «Поделиться» — чтобы поставить Telegram первым в списке приложений! И для этого нужно сначала спросить систему: «А Telegram вообще установлен?» Это делают практически все приложения на Android.

Вывод

Автор разбирается в сетевой безопаности, но ничего не знает о стандартах и требованиях к разработке современных приложений на ANDROID или умышленно вводит вас в заблуждение ¯_(ツ)_/¯.