В первой статье я разобрал как MAX собирает ваш IP, определяет VPN и какие сайты из вашей сети. Как MAX помогает РКН строить железный занавес: VPN-детект, сбор IP и проверки на Госуслуги
Дальше - про звонки. В MAX встроена система распознавания ключевых слов (KWS - Keyword Spotting). Нейросеть, которая прогоняет аудио с микрофона прямо во время разговора.
Я не утверждаю, что MAX прямо сейчас слушает ваши разговоры в поисках слов вроде «Путин», «митинг» или «VPN». Текущая модель распознавания обучена только на фразу «не слышу» - по задумке это для определения плохой связи. Прямо сейчас функция выключена на сервере.
Но....я разобрал архитектуру, проследил весь код от микрофона до отправки на сервер - и вот что важно:
KWS (Keyword Spotting) - распознавание конкретных слов в аудиопотоке. Вы с этим знакомы: «Окей, Google», «Привет, Алиса», «Hey Siri» - всё это KWS.
Принцип простой: нейросеть берёт звук с микрофона, режет на кусочки по 10 миллисекунд и на каждом решает - это ключевое слово или нет?
VK встроил такую штуку прямо в свой модифицированный WebRTC. Нейросеть крутится локально на устройстве и слушает аудио во время звонка.
Я скачал модель с серверов VK (https://st.okcdn.ru/static/calls_android/1-0-1/kws_270525.zip), разобрал её архитектуру и запустил.
Текущий функционал:
Для звонков это имеет смысл: собеседник говорит «не слышу» - значит со связью проблемы, приложение может это подхватить.
Распознавать «не слышу» - безобидно. А вот как это устроено внутри - уже нет.
Нейронка приходит с сервера. KWS не зашит в код приложения. При запуске приложение получает от сервера конфиг с URL модели, забирает файл и грузит в нейросетевой движок. Сервер VK решает:
VK может подменить модель хоть завтра - на любые другие слова. Обновлять приложение не нужно. Спрашивать пользователя - тоже.
Приложение не проверяет, что именно нейронка распознаёт. Если завтра VK положит на CDN модель, обученную на слово «протест» - приложение скачает её и запустит точно так же.
А что в политике конфиденциальности? Я проверил оба документа - Политику конфиденциальности (legal.max.ru/pp) и Пользовательское соглашение (legal.max.ru/ps). Упоминания KWS или анализа аудио во время звонков - ноль.
При этом в Пользовательском соглашении есть описание того, как голосовые и видеосообщения переводятся в текст.
Когда нейронка считает, что услышала ключевое слово, происходит следующее:
VK видит: в таком-то звонке у такого-то пользователя сработал детектор, уверенность такая-то. Всё привязано к userId как и call_id (vchat.clientStats отправляется в привязке к конкретной VoIP-сессии)
Во время анализа я перехватил реальный ответ сервера VK с конфигурацией KWS. Вот что сервер присылает приложению:
Я забрал модель по этому URL - без авторизации, без cookies. Любой может это сделать прямо сейчас. MD5 совпадает с тем, что прислал сервер.
Ещё я побрутил CDN в поисках других моделей - перебрал 200+ вариантов путей. Нашёл только одну модель в трёх версиях SDK (1-0-1, 1-0-2, 1-0-3) - все три идентичны (одинаковый MD5). На данный момент VK использует только одну модель для фразы «не слышу».
Работает только во время звонков - закрыли приложение, и всё. Кода для фоновой работы KWS я не нашёл.
С голосовыми сообщениями не связан - те переводятся с аудио в текст на серверах VK, это другой процесс, другой код.
Сейчас выключен (use: false). Нейронка уже на устройствах, но не запущена. И ищет она только «не слышу», а не что-то «опасное».
KWS - не единственная интересная вещь в работе звонков MAX:
Все звонки идут через сервер VK. P2P-соединений я не увидел - все медиаданные проходят через TURN-сервер VK. Шифрование DTLS-SRTP есть, но от вас до сервера, не от вас до собеседника. На relay-сервере шифрование заканчивается - ключи у VK.
Флаг записи аудио. В коде есть PMS-ключ calls-sdk-log-audio - если VK его включит, аудио звонка пишется в файл. Управляется с сервера.
Модифицированный WebRTC. VK не использует стандартный WebRTC - они его модифицировали. В модификации добавлены: нативная запись аудио в Opus (nativeAudioStartRecord, nativeAudioWriteFrame), KWS-интеграция, и кастомные параметры.
Ниже - код, конфиги и результаты реверс-инжиниринга. Версия APK 26.12.1 (6679).
KWS встроен в модифицированный WebRTC внутри нативной библиотеки libjingle_peerconnection_so.so. Точка входа - JNI-метод:
Java_org_webrtc_PeerConnectionFactory_nativeSetKeywordSpotterParams
Это вызов из Java в нативный код. Принимает два параметра: isEnabled (включить/выключить) и filePath (путь к модели на устройстве).
Полная цепочка от сервера до нейросети:
Пакет: ru.ok.android.externcalls.sdk.audio - это SDK звонков.
/ru/ok/android/externcalls/sdk/audio/KeywordSpotterManagerImpl.java
Файл: calls_kws.tflite из kws_270525.zip
Результаты запуска модели на тестовых данных:
config.cfg
Вот полная карта: какие серверы участвуют, какие запросы идут и в каком формате.
Шаг 1 - Получение конфига (при подключении к серверу):
"android.wordspotter.config" → {"turn_off_in_ms": 60000}"android.mlfeatures.ws_0" → {"url": "https://st.okcdn.ru/static/calls_android/1-0-1/kws_270525.zi...", "cs": "00320292950aa4896ccc057550442789", "use": false}
Шаг 2 - Скачивание модели (при первом запуске или обновлении URL):
Шаг 3 - Работа KWS (во время звонка, если use: true):
Шаг 4 - Отправка результата (после/во время звонка):
{"metric": "bad_call_detected_by_audio_spotter", "string_value": "не слышу", "double_value": 0.95} + userId, sessionId, call_id
Медиаданные самого звонка:
Файл: defpackage/ConversationKwsStat.java
При срабатывании формируется событие:
Имя "не слышу" зашито в код - но модель определяется URL с сервера. Если VK ее заменит, код по-прежнему будет отправлять "не слышу" как строку, даже если реальная модель будет детектить совершенно другую фразу. Или VK обновит и код в следующей версии.
/ru/ok/android/externcalls/sdk/stat/kws/ConversationKwsStat.java
Проверяйте сами:
curl -O https://st.okcdn.ru/static/calls_android/1-0-1/kws_270525.zip
Содержимое config.cfg:
Я проверил три версии SDK на CDN:
Одна и та же модель во всех версиях. Имя файла kws_270525 предполагает дату создания 27.05.2025. Просканировал 200+ вариантов путей - других моделей на CDN не нашёл.
Цепочка замены модели:
На стороне приложения нет проверки того, что именно модель распознаёт. Нет whitelist допустимых слов. Нет уведомления пользователя. MD5 проверяет только целостность файла - что скачалось без ошибок.
Запись аудио через серверный флаг: PMS-ключ calls-sdk-log-audio (key 129) может включить запись аудио звонка в файл. Плюс JNI-методы nativeStartAecDump / nativeStopAecDump позволяют дампить raw-аудио в файловый дескриптор. Всё управляется сервером.
Все звонки через relay VK: Все медиаданные идут через TURN-сервер VK (155.212.206.115:43210). Шифрование DTLS-SRTP - от вас до сервера, не от вас до собеседника. Сертификат сервера: QRtpServer 1.1.10.
Типы ML-фич в конфиге:
MLFeaturesManagerImpl поддерживает несколько типов моделей. Сейчас WS и NS, но подцепить новый тип - дело пары строк.
/ru/ok/tamtam/android/prefs/PmsKey.java - Коротко и наглядно: вот он, переключатель записи аудио, управляемый с сервера.
/one/video/calls/audio/opus/FileWriter.java - Это нативная запись аудио в файл.
Если вы дочитали до сюда - вы уже поняли суть.
Скажу одно: разница между «детектором плохой связи» и «детектором произвольных слов» - это один URL в JSON-конфиге. Модель, код, процесс отправки на сервер - всё одно и то же. Меняется только файл на CDN.
Я не знаю, планирует ли VK это использовать иначе. Но я знаю, что в политике конфиденциальности об этом ни слова, согласие не спрашивается, а модель можно скачать и проверить прямо сейчас. Ссылка выше.
Код - вот он. Модель - в открытом доступе. Проверяйте.
Мы прошли видимо тот этап, когда у нас реализовались Оруэлловские названия министерств.
Вот скажите мне, что в названии "Министерство цифрового развития, связи и массовых коммуникаций" соответствует действительности?!
Правильно ничего... Его однозначно нужно переименовать в:
"Министерство цифровой деградации, отключения связи и запрета массовых коммуникаций"!!!
Есть у меня один знакомый - таёжный охотник. Сергей зовут. Мужик уже немолодой, суровый, охотится в тайге чуть ли не с пелёнок. Во всякую чертовщину, понятное дело, не верит. Добывал всякого зверя, от мышки до мишки. Один раз, даже медведь его помял, хотя тот в него всадил весь магазин из карабина. И вот, однажды за рюмкой чай, рассказ он мне леденящую кровь историю. Честно говоря, она у меня вызывает некоторые сомнения и я бы в жизни не поверил, но уж больно уважаемый это человек.
Собрался Сергей в тайгу на охоту, ставить капканы на соболя. Собрал рюкзак, взял еды на два дня, в отдельный мешок капканы, на плечо повесил любимый и проверенный ТОЗ-54 и выдвинулся пешком в тайгу, осваивать новый путик. Как раз октябрь уже подходил к концу, самый разгар охоты на пушного зверя. Рассчитал достаточно несложный маршрут с одной ночёвкой в лесу. Палатку решил не брать. Тяжелая она у него, брезентовая. От знакомого охотника прознал примерное расположение одного зимовья (охотничьей лесной избушки) рассчитывая там переночевать.
Путь его пролегал мимо небольшой деревушки. Там он остановился на небольшой привал. Угостил папиросой местных мужиков, разговорился. Спросил у них за зимовье ближайшее. Местные начали как-то странно себя вести. Говорят, есть зимовье одно. Не так далеко. Да только никто им почитай уже лет пять не пользуется. Ибо место там плохое. Дурное место. Раньше капище было. А сейчас, говорят, чертовщина там творится всякая. Что за чертовщина, конкретно, не говорят. Просто плохое место. Сразу почувствуешь. В общем, лучше ночуй мужик в лесу, говорят. И то безопаснее будет.
Ну Сергей ни в бога ни в черта не верит. Поблагодарил мужиков, усмехнулся и продолжил путь. Войдя в лес, нашел он перспективное место обитания соболя. Установил пару капканов, приманку разместил. Да пока провозился, смеркаться начало. Всё-таки осень темнеет рано. Ну он ускорился, пытаясь найти зимовье. Да и устал уже, охота перекусить по-человечески, да и рюкзак тяжелый скинуть.
И вот, неожиданно он чувствует, что-то не так. Тревожно как-то стало. Спустя миг, понял он что - птицы не поют. Листва не шелестит. Лес будто замер. И вот, выходит он на пригорок и вот оно - зимовье. Небольшой но добротный бревенчатый сруб. Замка нет! Уже повезло. Внутри, как оказалось, всё заготовлено. Дрова нарублены, тушенка есть, сахар. Даже порядок на удивление полный. Видимо, до этого здесь останавливались люди, знающие охотничий этикет. По правилам, воспользовавшись запасами в охотничьей избушки - будь добр, подготовь всё к приходу следующего гостя.
Сергей снял вещи, затопил печку. А там уже и за окном стемнело. Он отварил гречки, вывалил туда банку тушенки, заварил чай. В общем, поужинал основательно. При свете масляной лампы провел ревизию снаряжения, на завтра, намереваясь встать на рассвете и продолжить осваивать путик. Одна неприятность - обнаружил, что телефон садится. Утром можно было осмотреть двор на предмет генератора, вдруг повезёт. А пока - и так сойдёт. А сейчас спать.
Прилёг он на нары охотничьи, и понял что не на месте душа. Тревожит его что-то. Будто приближается нечто страшное и злое. Может, медведь где поблизости бродит? На всякий случай, пододвинул ружьё поближе. Но на душе всё равно тревога какая-то.
Погасил он лампадку и решил спать, рассудив, что утро вечера мудренее. Заснул Сергей и вдруг сквозь сон, слышит глухой стук в дверь. Вскакивает, хватает ружьё. Вроде тихо. Неужели приснилось? Вокруг звенящая тишина. Встаёт, подходит к двери, проверяет засов. Тишина. Уже повернулся было, чтобы вернуться к спальному месту и вдруг, неожиданно в темноте зимовья, откуда-то из-за печки слышит отчётливый женский шепот: "Максим! Ку-ку!"
Дрожащей рукой зажигает лампу - никого! Включает свой фонарь, проверяет углы. Пусто. Показалось? Присел он, закурил. Вроде отпустило. Решает, что это всё с усталости. Ложится, спать дальше. Будет его очередной громкий стук в дверь. Вскакивает как ошпаренный, а из-за двери голос: "Максим! Максим, открой! Сейчас-же!" И слышно как голос меняется с женского, на грубый мужской бас. Сергей, хоть и является атеистом, но перекрестился трижды и начал читать молитву.
И тут, лежащий на столе телефон подает сигнал. Сергей подходит к нему, берёт в руки и понимает, что с телефоном что-то не так. И когда он понял, что именно не так, то его вмиг прошиб холодный пот. А он уже не может сдержать полного ужаса крика. На экране его телефона виднелась зловещая надпись "Установка мессенджера "МАХ" завершена"!
Продолжая кричать, Сергей отбрасывает телефон в угол, затем хватает ружьё, вещи и бросается бежать прочь из этого проклятого места. Прямо в ночь, через лес. Ветки хлещут по лицу, а он бежит, не помня себя от ужаса, от того, что увидел на своём телефоне.
Говорит, пришёл в себя только после того, как добрался до деревни. А там уже и светать начало. С тех пор, говорит, долго боялся в лес ходить, а в зимовьях больше не останавливался никогда.
Когда все учителя пытаются переместить учеников в МАХ, наш учитель информатики дает рабочий Прокси-сервер от Телеграмма
Привет, меня зовут Иван. Я хочу описать ситуацию, которая случилась недавно с моим отцом.
Отец на работе
Моего отца зовут Сергей, ему 61 год, он всю жизнь честно трудится обычным рабочим. Сейчас работает в «Мосводоканале». Он из тех людей, на которых держится город, но которые абсолютно беззащитны перед циничными юридическими формулировками финтех-гигантов.
2 марта 2026 года. Отцу в рабочий чат мессенджера МАХ приходит сообщение от коллеги: «Беда, знакомые попали в аварию, посмотри». Ссылка вела в Telegram, где предлагалось скачать .apk файл.
Отец, переживая за товарища, установил файл. Это был классический троян, про который писали последнее время в новостях. Телефон незаметно превратился в «зомби»: он читал СМС, видел коды подтверждения и мог рассылать спам по всей записной книжке. Мне самому пришло такое сообщение.
Троян рассылает спам, но уже после того, как покопался в банковских сервисах
Ночью, около 23:00, пока отец спал, мошенники начали «простукивать» все финансовые сервисы:
1.Т-Банк: Пробовали оформить кредитные карты. ОТКАЗ. Система увидела «Самозапрет на выдачу кредитов», который я предусмотрительно установил родителям еще в 2025 году. Государственная защита сработала.
2.ВТБ: Мошенники вывели 15 000 ₽ с дебетовой карты, но при попытке следующих транзакций антифрод ВТБ заблокировал карту. Защита сработала.
3.Яндекс.Маркет: Пытались купить две колонки «Дуо Макс» в рассрочку. Мошенники привязали какую-то свою карту, но заказ отменился (видимо, сработал внутренний скоринг Яндекса)
Попытка оформить заказ в Яндекс.Маркете с самовывозом в Одинцово
Отмена заказа
Мошенники отвязывают свою банковскую карту, с которой собирались сделать первый платеж
4.Сервис "Долями" (Т-Банк): УСПЕХ! Сервис «Долями» одобрил покупку на 69 853 рубля. Мошенники купили две топовые колонки Яндекса. Самое интересное: первый платеж в 21 344 рубля был списан с чужой карты "Озон Банка".
Мошенники оформили заказ в сервисе "Долями". Карта OZON отцу не принадлежит
Я не снимаю ответственности с отца: он совершил ошибку, установив вредоносный файл. Мне даже понятно, как мошенники смогли обчистить его дебетовую карту на 15 000 ₽ — они получили доступ к СМС. Но мне категорически непонятно другое: как при официально установленном самозапрете на выдачу кредитов система позволила навесить на человека долг в 70 000 ₽?
Выписка из БКИ об установке самозапрета на кредит 07.04.2025
Вопрос к комплаенсу «Долями»: почему ваша система позволяет оформить финансовое обязательство на одного человека, принимая оплату с карты абсолютно другого лица (скорее всего, тоже украденную)? Где ваш антифрод?
Отец сходил в полицию. Получил талон КУСП. Мы отправили его в Т-банк (инцидент №702645935).
Талон из полиции
Итог: Спустя 2 недели ожидания и общения с поддержкой Т-Банк ответил: «Претензия не подтверждена. Оформление было через код из СМС. Платите или начислим штрафы».
То есть банк и сервис "Долями" признает: им достаточно СМС, чтобы повесить на 60-летнего человека долг в 70 тысяч, проигнорировав его официальный запрет на кредитование. Сегодня, 16 марта, пришло уведомление: «Оплатите 16 тысяч, иначе штраф».
KYC при оплате более 60 000 ₽ проводят только на основании кода из СМС
Вишенка на торте: я весь день пытался выбить из сервиса "Долями" элементарные документы: договор или чек. Ответ убил: у них ничего нет. Сделку оформили мошенники, оплатили её украденными деньгами с чужой карты, а у Т-Банка на руках нет ни единой бумажки, подтверждающей чистоту сделки. Зато у них есть «счетчик» штрафов и требование: "Просто отдайте нам 50 тысяч". То есть документов нет, но долг — есть. 👏
Ни чеков, ни договор
Когда мы начали разбираться, поддержка «Долями» выдала базу, от которой веет запредельным цинизмом:
«Долями — это не кредит. Мы не проверяем самозапрет. Данные в БКИ не передаем».
Посмотрите на математику этого «не кредита» в чеке:
Сервисный сбор 5 175 ₽. Не перепутайте с кредитом
За полтора месяца (3 платежа раз в две недели) сервис берет более 10% от суммы. В пересчете на годовые — это конские проценты, которые и не снились обычным кредитам. Но юридически они называют это «сервисным сбором», чтобы обходить закон о самозапрете.
Штраф за просрочку 7% от суммы платежа. Но всё ещё "не кредит"
Логика сломана: Когда я спрашиваю, кому писать досудебную претензию — они отправляют в АО «Т-Банк». Т-Банк — это кредитная организация. Но продукт «Долями» внутри него — якобы нет. Удобно, правда?
Здесь поддержка говорит, что они не кредитная организация
Далее они просят отправоять письменные претензии в АО Т-Банк
Мой отец, узнав о долге, сначала впал в ступор, а потом сказал: «Сынок, может, я просто оплачу? Всё равно правды там не найдём».
Мне больно это слышать. Человек, который всю жизнь работал руками, готов отдать одну свою зарплату просто потому, что крупная корпорация нашла лазейку в законе и не хочет признавать дыру в своей безопасности. И даёт возможность использования для мошеннических действий.
Сколько таких обычных людей по всей стране прямо сейчас платит за колонки и телефоны, которые они не покупали? Сколько стариков отдают последние деньги, потому что «Долями» и прочие сервисы рассрочек — это якобы «не кредит»?
Отец с мужиками на работе
Я не собираюсь оплачивать дыры в комплаенсе Т-Банка. Который оформляет кредиты в обход самозапрета. Я готовлю обращение по данной ситуации в суд и надзорные органы. Чтобы они присмотрели к данной схеме и оценили её законность.
Если вы или ваши близкие тоже столкнулись с тем, что на вас оформили «Долями» в обход вашего желания или самозапрета — напиши мне. Вместе мы подадим коллективный иск.
Заполните форму для объединения: https://forms.yandex.ru/u/69b7a36c902902d0a40542de/
UPD: По совету из комментариев зашел в личный кабинет "Золотого яблока". И что вы думаете? Никакого заказа на 70 000 рублей там нет и не было.Мошенники даже не тратили время на взлом аккаунта отца в самом магазине:1. Они создали свой заказ со своего аккаунта.2. На этапе оплаты через «Долями» просто ввели номер телефона отца.3. Сервис Т-Банка «съел» это без проверки личности, без сверки ФИО и без оглядки на самозапреты.Итог: Банк просто выдал деньги случайным людям, а долг повесил на человека, у которого в этом магазине даже корзина пустая.
Владимир Владимирович, Вас обманывают. Мессенджер Мах - полное говнище! Роскомнадзор - враги народа. Яндекс - чмо-контора. Чубайс жив.
Почему с помощью приложения частной конторы можно подтвердить личность, через государственное приложение Госуслуг — нет?
Переходите в Max, тут нет ботов и мошенников. Только установочный файл под видом фото открой, не понятно от кого 🤦♂️
Т.е. если у тебя уведут аккаунт Мах, яля как в Телеграмм или Ватсап, то мошенники легко получат доступ к госуслугам, кредитам и т.д.? Удобно не спорю и смс не надо диктовать.
Vizit отжигает
Сижу себе спокойно среди ночи пикабушечку читаю. А тут на тебе, оповещение!