zapret-Checker - авто-подбор и сохранение стратегий (windows)

О программе Zapret:
О батнике zapret-Checker.cmd:
  • Модификация батника GoodCheck от Ori
  • Система: Windows7 или новее
  • Разрядность: x32/x64
  • Язык: русский
Основные фичи:
  • Остановка, если нашлась стратегия (аналог режима quic в блокчеке; не нужно ждать перебора всех стратегий)
  • Сохранение успешной стратегии в батник (не нужно искать стратегию в логе)
  • Тест на “16КБ” блок включен по умолчанию (взят из блокчека, нужны ссылки > 34КБ в чеклисте)
  • Тест на блок по ip и поиск рабочих ip (взят из блокчека)
  • curl-impersonate с имитацией chrome/firefox (мин. несоответствия между curl и браузером)
  • Отдельные стратегии для tcp и udp
  • Можно использовать --ipset вместо --hostlist (настройка $ipset=yes в zapret-Checker.ini)
  • Генератор стратегий ConfigGenerator (с возможностью настроить под себя)

Инструкция:

  1. Скачать и распаковать архив со сборкой
    zapret-Checker_v2.5.zip (9,3 МБ) - версия с фильтрами по протоколам для udp (--filter-l7=quic/wireguard/stun/discord/dht)
    zapret-CheckerV1.1.zip (5,6 МБ) - устаревшая версия с фильтрами по портам для udp (--filter-udp=443,500,..)
  2. Запустить zapret-update.cmd для установки/обновления zapret
  3. Запустить zapret_Console.cmd либо zapret_Service.cmd и проверить в браузере нужные сайты. Если все ок, дальше можно не читать
  4. Запустить zapret-Checker.cmd
  5. Выбрать протокол (по умолчанию tcp), браузер (по умолчанию chrome145) и чеклист (список адресов для проверки)
  6. Если скрипт нашел стратегию - проверить сайт в браузере (ни в коем случае не закрывать консольное окно с zapret)
  7. Стратегия не устроила - нажать цифру 2 и Enter. Скрипт продолжит поиск
  8. Все открылось - просто нажать Enter. Скрипт сохранит стратегию в zapret_Console.cmd/zapret_Service.cmd и завершит работу. Затем запустить cmd для консоли или службы - как удобнее.
    Стратегии, найденные чекером, не перезаписываются, а добавляются для каждого чеклиста. Т.е. одним батником запускаются стратегии для всех чеклистов сразу. При повторном подборе прежняя стратегия для чеклиста перезаписывается

Примечание: Если стоит антивирус/фаерволл/брандмауэр, то curl-impersonate.exe нужно разрешить все запросы TCP и UDP (либо отключить фаерволл на время проверки)

Составление чеклистов

Чеклистом считается любой файл *.txt в папке CheckLists. В нем можно указывать любые домены и ссылки
Допустим, нужно найти стратегию для сайта example.com

  • Создаете в папке CheckLists файл Example.txt
  • В него вписываете https:\\example.com
  • Запускаете zapret-Checker.cmd , выбираете свой чеклист Example.txt
  • Сохраняете успешную стратегию и запускаете zapret_Console.cmd
  • Открываете в браузере https:\\example.com
  • Если сайт наполовину не грузится, вызываете лог браузера по F12 либо CTRL+SHIFT+J;
  • На вкладке Сеть/Network сортируете по url либо доменам и ищете неудачные запросы [красного цвета]
  • Копируете эти ссылки (или только домены), вставляете в CheckLists\Example.txt
  • Удаляете файл HostLists\Example.txt (чтобы он пересоздался)
  • Запускаете zapret-Checker.cmd с тем же чеклистом Example.txt

Примечание: ищется общая стратегия для всех адресов из чеклиста - если хотя бы один адрес из чеклиста недоступен, стратегия не найдется (т.к. если доступны все домены, кроме главной страницы, сайт не откроется; если доступна только главная страница, сайт откроется, но не будет работать).
Поэтому чеклисты лучше составлять по принципу: “1 сайт + необходимые поддомены” либо “несколько сайтов на одном CDN”

Настройка браузера:

Если стратегии не работают, то

Описание файлов сборки:
  • zapret-Checker.cmd - батник для авто-подбора стратегии
  • zapret-Checker.log - лог скрипта
  • zapret-remove.cmd - батник, завершающий все копии goodbyedpi.exe/winws.exe/winws2.exe и удаляющий все службы goodbyedpi/zapret/zapret2
  • zapret-update.cmd - батник, устанавливающий zapret для версии windows (плюс скачивает новые версии с github)
  • zapret_Console.cmd - батник, запускающий консольное окно zapret
  • zapret_Service.cmd - батник, устанавливающий zapret как службу
  • \CheckLists*.txt - чеклисты
  • \HostLists*.txt - хостлисты/ipsets (списки доменов/ip для zapret)
  • \Files\zapret-Checker.ini - файл с настройками zapret-Checker.cmd
  • \Files\IpCache.ini - файл с рабочими ip для доменов
  • \Files\x86_64\winws.exe - приложение zapret
  • \Files\x86_64\cygwin1.dll - библиотека zapret
  • \Files\x86_64\WinDivert64.sys - драйвер WinDivert
  • \Files\x86_64\WinDivert.dll - библиотека драйвера WinDivert
  • \Files\x86*.* - аналогично для версии х32
  • \Files\ConfigGeneratorTCP.cmd/ConfigGeneratorUDP.cmd - генератор стратегий zapret для TCP/UDP
  • \Files\Configs\ConfigsTcp.txt/ConfigsUdp.txt - файл с стратегиями для Tcp/Udp
  • \Files\DNS.txt/DoH.txt - файл со списком dns/doh-серверов
  • \Files\DnsChecker.cmd - батник, проверяющий ответы dns-серверов из файла DNS.txt
  • \Files\DohChecker.cmd - батник, проверяющий ответы doh-серверов из файла DoH.txt
  • \Files\AsnSni.csv - таблица соответствия asn/sni (на основе https://cheburcheck.ru/whitelist/domains.csv)
  • \Files\FakeSniFinder.cmd - батник, ищущий белый sni для asn
  • \Files\FakeGenerator.cmd - батник для генерации пейлоадов
  • \Files\fakes*.bin - пейлоады
  • \Files\curl\ - папка утилиты https://github.com/lexiforest/curl-impersonate v1.5.1х32 (форк curl v8.15)
  • \Files\7z\7za.exe - консольная версия 7-zip
  • \Files\dd\dd.exe - утилита для копирования и конвертации файлов, нужна для FakeGenerator
  • \Files\netcat\ncat.exe - сетевая утилита, нужна для FakeGenerator (может реагировать антивирус)
  • \Files\licenses\ - лицензии утилит

P.S. Полезные ссылки:

здорово, но почему старая версия zapret? проще устроен?

Задумка отличная, но для новичка сложнее, чем Гудчек от Ори. А нельзя взять Гудчек и просто настроить для подбора стратегий для Запрета и Запрета 2 с новыми стратегиями? Ведь Гудчек почти год не обновлялся в плане стратегий.

Потому что zapret2 для меня слишком сложен, да)

Чем именно сложнее, не могли бы расписать подробнее плс?

А нельзя взять Гудчек и просто настроить для подбора стратегий для Запрета и Запрета 2 с новыми стратегиями? Ведь Гудчек почти год не обновлялся в плане стратегий.

Теоретически все можно) Но я гудчеком (который батник) не пользуюсь по причине лени (просто лень искать в логе успешную стратегию и потом вручную править батник). А который не батник на go на моей машине банально не запустился (скорее всего, там был бесконечный цикл из-за перезапуска с админ. правами)

у меня почему-то запросы к сайтам идут, которые указаны в check list, однако все запросы, судя по шарку без применения стратегий. например, начиная с 1 оно должно быть с факе, однако в шарке никаких факе нет. итд.
проверял на отдельной чистой винде.

А какая винда? И запускается ли консоль с названием чеклиста?

win10
консоль cmd с “примененной” стратегией и результатом запускается, winws тоже с каждой стратегией запускается и закрывается. но в шарке идут обычные запросы без применения стратегий. я попробую попозже еще посмотреть, может где-то я сам накосячил

Да вряд ли… Скорее, я) У меня нет win10, не на чем было проверить
А запуск от админа не помогает?

без админа он впринципе не дает запускать.

короче я решил включить дебаг лог, чтобы посмотреть что происходит. в конфиге есть отдельная строчка для включения debug , но она у меня не заработала. я не знаю куда ты ее вставил, но она должна быть на уровне wf
по итогу да, заработала только после того как прописал дебаг в config в строчку для портов.
открыл лог и увидел, что в books.txt (в который я добавил 1 домен и убрал все остальные) он загружает 5 доменов. откуда эти 5 доменов? я хз.
ну и дальше соответственно доходит до clienthello и выдает соответствие negative
(стратегию я тоже оставил только одну для удобства)

далее, я создал отдельный txt файл (в той же папке с checklists), куда прописал свой домен. далее, случился видимо какой-то баг с дебаг логом, потому что по шарку он начал создавать 2 отдельных соединения с разными src port
т.е оригинальное соединение с srcport 10000 ip 1.2.3.4 и
фейковое соединение с srcport 10001 ip 1.2.3.4

я не знаю откуда это и почему нет желания разбираться.убрал дебаг и после этого стратегия наконец-то начала применяться, он даже ее предложил сохранить хд, кодировка в обоих случаях одинаковая. ггвп
p.s я z1 не пользуюсь, проверял просто ради интереса
еще раз напишу, что проблема может быть и на моей стороне. если у остальных, например, работает изкоробки

Из хостлиста. У меня там разделение для чеклистов и хостлистов. В чеклисте могут быть домены, а хостлисте ipset для cdn к примеру. Чтобы получить универсальную стратегию, а не только для 1 сайта. Если хостлиста нет (удалить например), он создается автоматом на основе чеклиста

Точно, это мой косяк, спасибо. Надо было не только в конфиг добавить, но и в батник, лол

Кривая?

то есть предполагается, что нужно указывать домены как в checklist так и в hostlist?
там получается я в books.txt в чеклист указал 1 домен, а в hostlist там по-прежнему 5 доменов. (после запуска чекера)
с кодировкой все ок

Ага. Но для новых чеклистов хостлист создается автоматом. Только если на ипсет менять

Ну это ни на что особо не влияет, курл то берет адреса из чеклиста и проверял 1 домен в твоем случае.
Проблема теоретически будет, если в хостлисте нет нужных доменов/ip

ну если поменять только в чеклист, то получается ситуация, что curl отправляет запросы на домены указанные в чеклисте
а запрет применяет стратегии для доменов, указанных в хостлисте. стратегия в таком случае не применяется

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

Ага, но пока не могу придумать решение, учитывая, что в хостлисте должны быть лишь домены/ip, а в чеклисте - ссылки (для 16кб блока). По-любому разделение нужно. Каждый раз пересоздавать хостлист тоже не вариант - а вдруг там ipset прописан специально

А есть варианты как то чекнуть stun протокол, перестали работать звонки telegram и discord

Не знаю, курлом же не проверить, он только quic/h3 умеет.
Нужна стратегия типо такой

winws.exe ^
--wf-raw-part=@"windivert.filter\windivert_part.stun.txt" ^
--wf-raw-part=@"windivert.filter\windivert_part.discord_media.txt" ^
--filter-l7=discord,stun  --dpi-desync=fake --dpi-desync-repeats=X --dpi-desync-fake-stun=stun.bin --dpi-desync-fake-discord=stun.bin

Мне от Ори Гудчек нравится тем, что просто подставляешь тот же Запрет и начинаешь быстро проверку. Один час - и кучу доменов можно проверить в текстовом файле, удобно закидывать новые. Затем в конце суммирование и ты сам выбираешь стратегию и подставляешь в Запрет. А когда отдельно через браузер - для меня неудобно, какой-то костыль, когда от настроек и расширений браузера что-то не так может пойти. Уж лучше когда вся проверка в одной утилите вместе с результатом.

Спасибо за обратную связь!

Аналогично. Запускаешь, жмешь 2 раза enter, выбираешь чеклист - и начинается проверка. Подставлять запрет даже не нужно

Аналогично. Можно закинуть в существующий чеклист (тот же текстовый файл, что и в гудчеке), можно в новый, только хостлист сейчас нужно удалять при добавлении. Сделаю пожалуй настройку, чтоб не требовалось удалять. И не нужно ждать час. Через пару мин. находит обычно стратегию, ее сразу можно проверить в браузере - все ли открывается или нет? В гудчеке же тоже нужно проверять, только стратегию вручную копировать из лога, вставлять в батник, а здесь все автоматом. На самом деле, можно и не проверять, благодаря curl-impersonate несоответствий с браузером фактически нет. А в файле \Files\zapret-Checker.ini есть настройка

;Интерактив: yes - ручная оценка конфига в браузере; no - конфиг автоматом сохраняется как рабочий
$interactive=yes

Сохраняется в zapret_Console.cmd/zapret_Service.cmd - остается запустить один из них. Причем стратегии не переписываются, а добавляются, сразу с хостлистами. Т.е. вы можете подобрать кучу стратегий под разные сайты, а запускается это все одним батником. Можно наверно еще и автохостлист туда прикрутить…

Нет, это не костыль) От настройки в браузере под названием kyber (или post quantum шифрование) как раз все и зависит. Не случайно у Ori в проге на go используется curl-impersonate, а у bolvan в блокчеке 2 разных скрипта blockcheck.cmd и blockcheck-kyber.cmd - они используют 2 разных версии curl (с kyber и без). Если у вас браузер с kyber, а curl без (или наоборот), то будет много нерабочих стратегий из лога

Пользуйтесь тем, что вам нравится) Ori создал замечательный инструмент, огромное ему спасибо! На основе гудчека и сварганен запрет-чекер) Но гудчек давно не обновляется, там проверка идет по response_code, а значит тест на 16кб блок мимо (здесь, как и в блокчеке по exitcode). Возможно, в проге на go иначе, но у меня она не запускается(

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

Можно так сделать:
Есть допустим N стратегий для stun. Создать батник, который запускает запрет с первой стратегией, и ты в самом дискорде проверяешь (Пробуешь звонить/заходить в войс чат). Не работает - нажимаешь 1 и запускается следующая стратегия, работает - нажимаешь 2 и найденная стратегия записывается в лог/батник.

По самой проге, попробовал её в работе. Очень удобно сделано, всё предельно понятно.

Есть предложение, которое ещё пока никто не реализовал, но которое было бы очень полезным. Конверт полученных стратегий из Zapret в ByeByeDPI. Выбираешь такую опцию, и батник создаст txt файл, команды из которого надо просто скопипастить в “режим командной строки” ByeByeDPI на телефоне. Хостлисты и пейлоады можно хранить в именной папке data андроида, просто указывается пусть до них storage/0/emulated/android/data…, пользователю надо будет докинуть файлы .bin и .txt туда.

насчет браузерной версии не уверен, но для приложения на пк все намного сложнее, нежели перебор одной стратегии для stun

для подключения к голосовому каналу сначала используется TCP (TLS) на различные порты (443,2053,2083,2087,2096), которое блокируется.
затем в зависимости от того, где находится сервер на инфраструктуре CF или GOOGLE используется протокол UDP
для google используется тот, который в zapret называется discord для портов 50000-50099
для CF - websocket, и там свой пул портов
stun в приложении не используется.