zapret
December 11

Zapret 2 GUI (Запрет: обход блокировки Дискорда и Ютуба)

Ютуб и дискорд не работает через запрет. Обход блокировок дискорда и ютуба доступен здесь. ВПН для YouTube и Discord'a.


Сегодня (в день конституции где прописаны правила на свободу распространения и чтения информации 12 декабря) мы представляем вам нашу самую мощную модель программу в мире — Zapret 20.0 (внутреннее название Zapret 2).

Крупнейшее обновление Zapret за всю историю проекта. Полный редизайн интерфейса, новая система стратегий на основе категорий и поддержка Lua-скриптов для гибкой обработки трафика.

Сегодня мы становимся на шаг ближе к автоматическому анализу трафика и смене стратегий в режиме live, полностью автоматизированного (в идеале) и незаметного для пользователя!

Надеемся что наш основной канал вы уже знаете, как нас поддержать тоже, а также где попросить помощи.


Напоминаем что Zapret не является однокнопочным решением (хотя мы всеми силами стараемся сделать его таковым).

Было замечено что РКН блокирует известные стратегии по их поведению и сигнатуре трафика которые они оставляют у ТСПУ. Единственное решение — сделать свою приватную стратегию и никогда её не показывать.

Zapret 2 позволяет писать свои стратегии (через командные строки, флаги и аргументы), добавлять быстро новые категории (вообще через GUI напрямую), а также даже писать свои собственные АЛГОРИТМЫ на языке lua работы для НОВЫХ стратегий (тех что ещё нет в программе)

Главное меню было полностью переработано — теперь это стиль Settings Windows 11 со вкладками и более удобным и интуитивно понятным интерфейсом.

Zapret 2

Ключевое архитектурное отличие zapret2 от предшественника заключается в переносе логики атак из C-кода в Lua-скрипты.

В zapret1 все стратегии обхода DPI были жёстко вшиты в исходный код на C, что означало необходимость перекомпиляции программы при любом изменении логики работы.

В zapret2 ядро на C отвечает только за низкоуровневую работу с пакетами — перехват, разбор протоколов, отправку — а вся логика принятия решений вынесена в Lua-библиотеки, которые можно редактировать текстовым редактором без каких-либо знаний программирования на C.

Такой подход открывает возможность создания собственных стратегий обхода без глубокого погружения в системное программирование. Пользователь может написать Lua-функцию с произвольной логикой: проверять имя хоста, тип протокола, направление пакета и на основе этого выбирать разные методы атаки. Например, можно сделать так, чтобы для YouTube применялся один метод обхода, для Telegram — другой, а для остальных сайтов — третий. В zapret1 подобная кастомизация требовала бы модификации исходников и пересборки бинарника.

Одним из главных нововведений zapret2 стала система оркестраторов — специальных Lua-функций, управляющих выполнением других стратегий. Наиболее полезный из них — circular — реализует автоматический перебор стратегий.

Если текущая стратегия приводит к сбоям (детектируются ретрансмиты, RST-пакеты от DPI, отсутствие ответа), оркестратор автоматически переключается на следующую стратегию в списке. Это позволяет системе самостоятельно подбирать рабочий метод обхода для каждого конкретного хоста без ручного вмешательства пользователя. Гибкость Lua-подхода проявляется и в скорости экспериментов.

При исследовании новых методов обхода DPI или адаптации под изменившееся поведение блокировщика можно быстро менять параметры, комбинировать атаки, добавлять условия — и сразу проверять результат простым перезапуском программы.

В zapret1 каждая такая итерация требовала бы цикла «редактирование C-кода → компиляция → тестирование», что существенно замедляло процесс подбора рабочей конфигурации. Стоит отметить и расширенные возможности детектирования сбоев.

В zapret2 реализован standard_failure_detector с несколькими методами определения блокировки: по TCP-ретрансмитам, по RST-пакетам с характерными признаками DPI, по HTTP-редиректам на заглушки провайдера, по отсутствию UDP-ответов.

Эти детекторы работают совместно с автохостлистом и оркестраторами, формируя адаптивную систему, которая учится на своих ошибках и запоминает проблемные хосты.

Разумеется, у zapret2 есть и недостатки: порог входа чуть выше из-за необходимости понимать синтаксис Lua, а интерпретатор добавляет небольшой overhead по сравнению с чистым C-кодом.

Однако для большинства пользователей эти минусы несущественны на фоне получаемой гибкости. Zapret2 — это инструмент для тех, кто хочет тонко настраивать обход под свои условия, экспериментировать с новыми методами и иметь систему, которая адаптируется к изменениям в поведении DPI автоматически.


Раньше стратегии представляли из себя жесткий набор параметров — теперь всё изменится. Каждый может писать свою стратегию.

Сами lua файлы лежат в отдельной папке.

Пример стратегии подмены флага:

Обычный мультисплит:

Но мы упростили и создали готовые стратегии (есть набор готовых функций в lua файлов которые можно быстро импортировать и использовать). Вот например использование стратегии мультисплит:

Стратегии лежат в отдельном файле tcp.json и пользователь может создать свои стратегии (подробнее ниже).

Мы также вынесли категории в отдельный файл (так называемые --filter). Их также можно добавлять через гуи или через текстовый json файл:

Чтобы снизить нагрузку на процессор программа пропускает все пакеты через WinDivert фильтр (который позволяет писать свои фильтры или выбирать их из ГУИ), после чего ТОЛЬКО необходимые пакеты проходят в сам Запрет 2 и модифицируются.

Это позволяет:

  • снизить нагрузку на ЦП.
  • снизить пинг (особенно ощутимо в играх).

Двухуровневая фильтрация в zapret (Windows)

Уровень 1: WinDivert фильтр (--wf-*)

Работает в драйвере Windows на уровне ядра. Определяет, какие сетевые пакеты вообще попадут в winws2. Всё остальное драйвер игнорирует — программа их не видит.

Доступные параметры:

--wf-l3=ipv4,ipv6 - какие версии IP обрабатывать

--wf-tcp-out=порт - исходящие TCP соединения на указанные порты

--wf-tcp-in=порт -входящие TCP соединения с указанных портов

--wf-udp-out=порт- исходящие UDP пакеты на указанные порты

--wf-udp-in=порт -входящие UDP пакеты с указанных портов

--wf-iface=номер- только указанный сетевой интерфейс

--wf-filter-lan=1- исключить локальные адреса (по умолчанию включено)

--wf-tcp-empty=1- обрабатывать пустые TCP пакеты

--wf-save=файл- сохранить итоговый фильтр в файл для отладки

Порты можно указывать через запятую (80,443) и диапазонами (1-1024). Можно инвертировать через ~ (~80 — всё кроме 80).


Уровень 2: Hostlist фильтр

Работает внутри winws2. Из пакетов, которые прошли WinDivert, программа извлекает имя домена (из SNI в TLS или заголовка Host в HTTP) и проверяет его по спискам.

Доступные параметры:

--hostlist=файл- применять DPI-обход только к доменам из файла

--hostlist-domains=список- то же, но домены через запятую в командной строке

--hostlist-exclude=файл- не применять к доменам из файла

--hostlist-exclude-domains=список- то же, но домены через запятую

--hostlist-auto=файл- автоматически добавлять домены при обнаружении блокировки

Поддомены применяются автоматически — если в списке youtube.com, то www.youtube.com тоже попадёт.


Разница между уровнями

WinDivert фильтр видит только заголовки пакетов: IP-адреса, порты, протокол, направление. Работает очень быстро, почти не нагружает процессор.

Hostlist фильтр разбирает содержимое пакета, ищет имя домена. Требует больше ресурсов, но даёт точный контроль.


Порядок применения

  1. Пакет проходит через сетевой стек Windows
  2. WinDivert драйвер проверяет пакет по --wf-* правилам
  3. Если не подходит — пакет уходит дальше, winws2 его не видит
  4. Если подходит — пакет передаётся в winws2
  5. winws2 парсит пакет, извлекает домен
  6. Проверяет домен по --hostlist и --hostlist-exclude
  7. Если домен подходит — применяет DPI-атаку
  8. Если не подходит — пропускает пакет без изменений

Пример команды

winws2.exe --wf-tcp-out=443 --wf-udp-out=443 --wf-l3=ipv4,ipv6 --hostlist=blocked.txt --lua-desync=fake

Здесь:

  • Драйвер перехватывает только исходящие TCP и UDP на порт 443
  • Из них winws2 обрабатывает только домены из blocked.txt
  • К подходящим пакетам применяется атака fake

Пример на картинке:

Далее в дело вступает фильтр winws.

Фильтр --filter-l7 — фильтрация по L7 протоколу

Определяет, к каким протоколам прикладного уровня (L7) будет применяться текущий профиль десинхронизации. Программа анализирует содержимое пакета и определяет протокол по характерным сигнатурам.

Все значения представлены ниже:

Это третий уровень фильтрации, работает после WinDivert (--wf-*) и портовых фильтров (--filter-tcp, --filter-udp).

Порядок проверки:

  1. WinDivert пропустил пакет в программу
  2. Пакет прошёл фильтр по портам
  3. Программа определила L7 протокол по содержимому пакета
  4. Проверка --filter-l7 — протокол в списке?
  5. Если да — переход к проверке hostlist и применению атаки

Как определяется протокол

Программа проверяет начало payload пакета на характерные байты:

  • HTTP — начинается с методов GET, POST, HEAD, PUT и т.д.
  • TLS — байт 0x16 (handshake), версия протокола
  • QUIC — специфичный формат Initial пакета
  • WireGuard — magic bytes handshake initiation
  • DHT — bencode формат BitTorrent
  • STUN — magic cookie 0x2112A442

Если пакет не соответствует ни одной сигнатуре — протокол unknown.

Зачем нужен этот фильтр

На одном порту могут работать разные протоколы. Например, порт 443:

  • HTTPS (TLS)
  • QUIC (UDP)
  • Другие сервисы через TLS

Фильтр --filter-l7 позволяет применять разные стратегии атаки к разным протоколам на одном порту, создавая отдельные профили для каждого.

Стратегии

Основное меню стратегий переботано, теперь стратегии применяются автоматически (кнопки применить нет) — а их применение сопровождается красивой анимацией синего кружка:

Теперь Вы можете создавать свои файлы или HEX значения не выходя из гуи, это позволит создавать свои собственные стратегии.

Пока что поддержки .bin на лету нет, но в будущем эта опция появится.

Редактор стратегия позволяет быстро создавать новые стратегии (используя аргументы командой строки).

Дополнительно мы заменили Прямой запуск и Bat запуск на Запрет 2 и Запрет 1. Переключать их можно прямо в GUI.

Также добавлена новая опция которая позволяет задавать лимит на обработку пакетов (например чтобы снизить пинг).

Отдельно можно указывать какой вообще тип трафика может обрабатывать Zapret 2 (как и ранее но более удобно):

В списке стратегий можно указывать рабочие и нерабочие стратегии (цвет их покрасится в зелёный и красный соответственно).

Можно добавить свою категорию:

Добавление своих сайтов или исключеняи стали проще — теперь это полноценный текстовый редактор который автоматически убирает лишние символы а также перезагружает Запрет 2. Больше лезть внутрь файлов не нужно:

Автозапуск стал более надежным и всё также предлагает 3 разных варианта:

ДНС теперь применяется в несколько раз быстрее:

Старый тест соединения переименован в диагностику и пока не дописан до конца (в будущем будет удалён и заменён на секретную строящуюся вкладку):

Управление hosts теперь применяется мгновенно как только Вы выбрали какой-либо сайт (кнопки применить также нет):

Темы переработаны и добавлены новые премиум возможности (например новогоднее оформление):

Теперь у программы 3 лога (обычный, с ошибками и внутренний лог программы winws2.exe — ядра программы).

Программа теперь умеет проверять обновления через телеграм что повысит надежность и снизит риск ддос серверов (а также имеет красивую анимацию):