Тестовый стенд
Виртуальная машина с BlissOS Go 16 (Android 13 Go). Отключены все приложения для максимально чистого дампа и упрощения анализа трафика. Используется официальная версия WhatsApp. В качестве анализатора трафика используется Wireshark. Авторизация
Виртуалка определяется не как смартфон (возможно надо править build.prop), поэтому провести авторизацию по номеру телефона не удалось. Приложение затребовало QR-код как дополнительное устройство. Во время авторизации приложение коннектится к доменам v.whatsapp.net (157.240.205.60) и g.whatsapp.net (157.240.205.61). Метаданные находятся по адресу media-hel3-1.cdn.whatsapp.net (157.240.205.60) Отправка сообщения
Сообщения отправляются по протоколу XMPP на порту 5222. При этом используется кастомная реалиция протокола, в которой сохранены только заголовки. Все сообщения отправляются в зашифрованном виде, прочтение сторонним наблюдателем невозможно. Токены авторизации приложение получает с сервера g.whatsapp.net. Звонок
Аудио и видео звонки осуществляются с использованием средств p2p. WhatsApp считывает локальные IP-адреса устройств и пробует установить прямое соединение. Если это удаётся, то звонки проходят по кастомному протоколу на основе UDP. Если установить связь напрямую невозможно, для установки соединения используется STUN. Сервера самого WhatsApp используются минимально.
Что в итоге. Служебная часть работает по протоколу TLSv1.3, QUIC не используется. Сообщеня отправляются через кастомную реализацию XMPP. Видеозвонки работают по неизвестному протоколу на основе UDP. WhatsApp.pcapng (5,7 МБ) WhatsApp.pcap (5,6 МБ) domains.txt (188 байтов) report.txt (484 байта)
Он его не знает, но возможна работа как с any protocol.
В XMPP там не одно сообщение открытым текстом, прежде чем идет переход к шифрованной фазе TLS.
Как на это DPI будет реагировать непонятно. Что именно сечь.
Если пойдет TLS Client Hello после STARTTLS отдельным tcp пакетом, то протокол будет опознан как TLS. Если сам XMPP не будут рубить, а будут смотреть в SNI, то возможна работа как с обычным TLS.
В приложенном дампе по порту 5222 нет стандартного протокола XMPP.
Там сразу идет что-то шифрованное без перехода на TLS.
Сами понимаете, подглядеть токены под https и расшифровать 5222 zapret не может, как и DPI
Вероятно будут банить либо фазу стандартного TLS на 443, либо 5222 по IP (тут может быть им сложно, если будет скакать по CDN)
Я когда-то год назад попробовал в виртуальной тестовой сети забанить Telegram и WhatsApp по ASN и подсетям, тг оказалось забанить очень просто, он сразу же перестал работать, а WhatsApp через некоторое время находил обходной путь через различные CDN (Akami, Amazon) и начинал работать снова. Приложения тестировал на Android.
“Если установить связь напрямую невозможно, для установки соединения используется STUN” И “Видеозвонки работают по неизвестному протоколу на основе UDP” - у нас на оккупирванных как раз заблочены звонки в WhatsApp и не грузятся картинки, но обмен текстовыми сообщениями происходит корректно. Такие жалобы независимо от провайдера и города. Спасибо за исследование.
“попробовал в виртуальной тестовой сети забанить Telegram” - я не пробовал по ASN, на маршрутизаторе не возможно, а только одну подсеть /24 к IP с которой обращается ТГ и он перестал работать (всего 256 IP-адресов). Я наблюдал за поведением Клиента, она постоянно продолжала обращаться к одним и тем же IP-адресам, просто меняя порты port+1. Перед исследованием ожидал, что ТГ больше посопротивляется, а не вот так вот. Впрочем, мой аргумент о том, что его так легко заблочить все равно не приняли, ведь “он неблокируемый”, “так все говорят”.
Сборка zapret с поддержкой звонков WhatsApp и Telegram За основу взято:
YtDisByStro v3.3 от @KDS .
Добавлен файл 1_preset_WhatsApp.cmd для звонков через Telegram и WhatsApp. Также поддержка голосовой и видеосвязи реализована 1_preset_russia.cmd YTDisBystroMod.zip (764,3 КБ)
Для Viber стратегии не найдены до сих пор. Иногда помогает fakedsplit, но только если “звёзды сойдутся”. У кого-то Zapret начинает пробивать после авторизации.
И тут эту глупость с 20000-50000 протиражировали + еще ряд глупостей в настройке.
В соседней теме отвечал, почему это неправильно и чем чревато
Все решается кастомным виндиверт фильтром, без всяких ипсетов, портов и нагрузки на процессор
RTP. В сети есть статьи с детальным анализом, получением ключей и расшифровкой звонков. STUN и RTP отпечатки (аттрибуты, профили, прочее) в сумме делают трафик звонков WhatsApp’а легко узнаваемым.
Блокировку мессенджеров, и отдельно звонки, тестировали в регионах годы тому назад. У них тоже есть список “Вы находитесь здесь”, только они на 100 пунктов впереди и это ToDo. Вам не понравится финал.
Попробуйте использовать другую стратегию. Менять надо где %YTDB_WhatsApp_UDP%.
Сам автор забросил работу над сборкой ровно в тот момент, когда это катастрофически необходимо.
Да и ребята из “запрет-дискорд-ютуба” не особо торопятся выпускать новую версию
Как появится свободное время, сделаю универсальный Windivert фильтр. Дискорд, STUN, tcp 80,443 и udp 443. Попробую создать универсальный пресет для всех блокировок.