# Что такое Zapret 2 (*nfqws2*)? **[[home|Zapret 2]]** — инструмент для обхода DPI (Deep Packet Inspection) под авторством [bol-van](https://github.com/bol-van/zapret2) — систем глубокого анализа трафика, которые используются для блокировки сайтов и сервисов. В России это ТСПУ (технические средства противодействия угрозам). Программа перехватывает сетевые пакеты и модифицирует их так, чтобы DPI не мог их правильно проанализировать, но сервер-получатель всё понял корректно. Официальная документация по программе доступна [здесь](https://github.com/bol-van/zapret2/blob/master/docs/manual.md). ## Чем Zapret2 лучше обычного Zapret (*winws, nfqws*)? В старом Zapret все методы обхода блокировок зашиты прямо в код на языке C. Программа делает ровно то, что в неё заложил разработчик при сборке. Хочешь что-то изменить — разбирайся в исходниках, правь C-код, компилируй заново. Для большинства пользователей это невозможно, поэтому при каждом обновлении ТСПУ приходится просто ждать, когда автор выпустит новую версию с исправлениями. В Zapret 2 архитектуру разделили на две части. Ядро на C осталось — оно отвечает за перехват и отправку пакетов, и работает так же быстро, как раньше. А вот вся логика обмана DPI вынесена в отдельные скрипты на языке Lua. Это обычные текстовые файлы с инструкциями: как подменять пакет, как его разрезать, как запутать анализатор. Их можно открыть в любом редакторе, подправить пару строк или полностью заменить на чужой скрипт — и всё заработает без перекомпиляции программы. На практике это меняет всё. Роскомнадзор обновил ТСПУ и старый трюк сломался — достаточно поправить скрипт и проверить, не дожидаясь нового релиза. Кто-то нашёл рабочий способ обхода — он оформляет его как Lua-файл и делится с сообществом, а остальные просто кидают его в папку. Плюс в комплекте уже идёт библиотека готовых скриптов для работы с TLS, QUIC и HTTP, которые можно свободно комбинировать между собой. Дополнительно наш GUI делает точно также с [[preset|пресетами]] - чтобы быстро обмениваться ими между сообществом и люди сами находили способы решения полностью автономно и могли делиться ими с другими (*даже если вдруг с автором что-то случится*) без перелопатывания исходного lua-кода. Наш Zapret 2 GUI решает главную проблему любого большого инструмента обхода цензуры — [фактора автобуса](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B0%D0%B2%D1%82%D0%BE%D0%B1%D1%83%D1%81%D0%B0). По сути старый Zapret — это заводской инструмент, который делает только то, что в него заложили на этапе сборки. Zapret 2 — конструктор, где способы обхода можно собирать, менять и подстраивать под любые изменения блокировок прямо на ходу. ## <img src="https://i.imgur.com/qTfQ4cf.png" width="25px"> [[download|Установка на Windows]] | [[router|Установка на роутеры]] | [[android|Установка на Android]] ## Чем Zapret2 лучше обычного Zapret (*winws, nfqws*)? В старом Zapret все методы обхода блокировок зашиты прямо в код на языке C. Программа делает ровно то, что в неё заложил разработчик при сборке. Хочешь что-то изменить — разбирайся в исходниках, правь C-код, компилируй заново. Для большинства пользователей это невозможно, поэтому при каждом обновлении ТСПУ приходится просто ждать, когда автор выпустит новую версию с исправлениями. В Zapret 2 архитектуру разделили на две части. Ядро на C осталось — оно отвечает за перехват и отправку пакетов, и работает так же быстро, как раньше. А вот вся логика обмана DPI вынесена в отдельные скрипты на языке Lua. Это обычные текстовые файлы с инструкциями: как подменять пакет, как его разрезать, как запутать анализатор. Их можно открыть в любом редакторе, подправить пару строк или полностью заменить на чужой скрипт — и всё заработает без перекомпиляции программы. На практике это меняет всё. Роскомнадзор обновил ТСПУ и старый трюк сломался — достаточно поправить скрипт и проверить, не дожидаясь нового релиза. Кто-то нашёл рабочий способ обхода — он оформляет его как Lua-файл и делится с сообществом, а остальные просто кидают его в папку. Плюс в комплекте уже идёт библиотека готовых скриптов для работы с TLS, QUIC и HTTP, которые можно свободно комбинировать между собой. Дополнительно наш GUI делает точно также с [[preset|пресетами]] - чтобы быстро обмениваться ими между сообществом и люди сами находили способы решения полностью автономно и могли делиться ими с другими (*даже если вдруг с автором что-то случится*) без перелопатывания исходного lua-кода. Наш Zapret 2 GUI решает главную проблему любого большого инструмента обхода цензуры — [фактора автобуса](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B0%D0%B2%D1%82%D0%BE%D0%B1%D1%83%D1%81%D0%B0). По сути старый Zapret — это заводской инструмент, который делает только то, что в него заложили на этапе сборки. Zapret 2 — конструктор, где способы обхода можно собирать, менять и подстраивать под любые изменения блокировок прямо на ходу. ## <img src="https://i.imgur.com/qTfQ4cf.png" width="25px"> [[download|Установка на Windows]] | [[router|Установка на роутеры]] | [[android|Установка на Android]] ## Чем Zapret2 лучше обычного Zapret (*winws, nfqws*)? В старом Zapret все методы обхода блокировок зашиты прямо в код на языке C. Программа делает ровно то, что в неё заложил разработчик при сборке. Хочешь что-то изменить — разбирайся в исходниках, правь C-код, компилируй заново. Для большинства пользователей это невозможно, поэтому при каждом обновлении ТСПУ приходится просто ждать, когда автор выпустит новую версию с исправлениями. В Zapret 2 архитектуру разделили на две части. Ядро на C осталось — оно отвечает за перехват и отправку пакетов, и работает так же быстро, как раньше. А вот вся логика обмана DPI вынесена в отдельные скрипты на языке Lua. Это обычные текстовые файлы с инструкциями: как подменять пакет, как его разрезать, как запутать анализатор. Их можно открыть в любом редакторе, подправить пару строк или полностью заменить на чужой скрипт — и всё заработает без перекомпиляции программы. На практике это меняет всё. Роскомнадзор обновил ТСПУ и старый трюк сломался — достаточно поправить скрипт и проверить, не дожидаясь нового релиза. Кто-то нашёл рабочий способ обхода — он оформляет его как Lua-файл и делится с сообществом, а остальные просто кидают его в папку. Плюс в комплекте уже идёт библиотека готовых скриптов для работы с TLS, QUIC и HTTP, которые можно свободно комбинировать между собой. Дополнительно наш GUI делает точно также с [[preset|пресетами]] - чтобы быстро обмениваться ими между сообществом и люди сами находили способы решения полностью автономно и могли делиться ими с другими (*даже если вдруг с автором что-то случится*) без перелопатывания исходного lua-кода. Наш Zapret 2 GUI решает главную проблему любого большого инструмента обхода цензуры — [фактора автобуса](https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B0%D0%B2%D1%82%D0%BE%D0%B1%D1%83%D1%81%D0%B0). По сути старый Zapret — это заводской инструмент, который делает только то, что в него заложили на этапе сборки. Zapret 2 — конструктор, где способы обхода можно собирать, менять и подстраивать под любые изменения блокировок прямо на ходу. ## [[router|Установка на роутеры]] | [[android|Установка на Android]] ## [[preset|Пресеты]] [[Zapret2 - основные флаги]] [[Zapret2 - wf]] [[filter]] [[Zapret2 - out-range]] [[Zapret2 - payload]] [[Zapret2 - lua-desync]] [[Zapret2 - blob]] [[Zapret2 - последовательность аргументов]] [[Zapret2 - mtproto]] [[Zapret2 - Roadmap обучения]] [[zapret2_start_cutoff]] ![[manual]] ## Техники дурения (стратегии) [[syndata]] [[fake]] [[multisplit]] [[multidisorder]] ```bash start "zapret: http,https,quic" /min "%~dp0winws2.exe" ^ --wf-tcp-out=80,443 ^ --lua-init=@"%~dp0lua\zapret-lib.lua" --lua-init=@"%~dp0lua\zapret-antidpi.lua" ^ --lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')" ^ --blob=quic_google:@"%~dp0files\quic_initial_www_google_com.bin" ^ --wf-raw-part=@"%~dp0windivert.filter\windivert_part.discord_media.txt" ^ --wf-raw-part=@"%~dp0windivert.filter\windivert_part.stun.txt" ^ --wf-raw-part=@"%~dp0windivert.filter\windivert_part.wireguard.txt" ^ --wf-raw-part=@"%~dp0windivert.filter\windivert_part.quic_initial_ietf.txt" ^ --filter-tcp=80 --filter-l7=http ^ --out-range=-d10 ^ --payload=http_req ^ --lua-desync=fake:blob=fake_default_http:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:tcp_md5 ^ --lua-desync=fakedsplit:ip_autottl=-2,3-20:ip6_autottl=-2,3-20:tcp_md5 ^ --new ^ --filter-tcp=443 --filter-l7=tls --hostlist="%~dp0files\list-youtube.txt" ^ --out-range=-d10 ^ --payload=tls_client_hello ^ --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=11:tls_mod=rnd,dupsid,sni=www.google.com ^ --lua-desync=multidisorder:pos=1,midsld ^ --new ^ --filter-tcp=443 --filter-l7=tls ^ --out-range=-d10 ^ --payload=tls_client_hello ^ --lua-desync=fake:blob=fake_default_tls:tcp_md5:tcp_seq=-10000:repeats=6 ^ --lua-desync=multidisorder:pos=midsld ^ --new ^ --filter-udp=443 --filter-l7=quic --hostlist="%~dp0files\list-youtube.txt" ^ --out-range=-d10 ^ --payload=quic_initial ^ --lua-desync=fake:blob=quic_google:repeats=11 ^ --new ^ --filter-udp=443 --filter-l7=quic ^ --out-range=-d10 ^ --payload=quic_initial ^ --lua-desync=fake:blob=fake_default_quic:repeats=11 ^ --new ^ --filter-l7=wireguard,stun,discord ^ --out-range=-d10 ^ --payload=wireguard_initiation,wireguard_cookie,stun_binding_req,discord_ip_discovery ^ --lua-desync=fake:blob=0x00000000000000000000000000000000:repeats=2 ``` 🎉 Да! Теперь можем добавить "упрощённые" варианты стратегий! ## 🆕 Новые стратегии с tcpseg (без резки) ### 1️⃣ Простой seqovl без dup и без split ```python # ============================================================ # TCPSEG: ЧИСТЫЙ SEQOVL (БЕЗ РЕЗКИ, БЕЗ ДУБЛИРОВАНИЯ) # ============================================================ "tcpseg_211_simple": { "name": "SeqOvl 211 (Simple, No Split)", "description": "Только overlap 211 байт, без резки и дублирования", "author": "hz", "label": None, "args": f"""--blob=bin_tls5:@{BIN_FOLDER}\\tls_clienthello_5.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=211:seqovl_pattern=bin_tls5""" }, "tcpseg_226_simple": { "name": "SeqOvl 226 (Simple, No Split)", "description": "Только overlap 226 байт, без резки и дублирования", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18""" }, "tcpseg_286_simple": { "name": "SeqOvl 286 (Simple, No Split)", "description": "Только overlap 286 байт, без резки и дублирования", "author": "hz", "label": None, "args": f"""--blob=bin_tls11:@{BIN_FOLDER}\\tls_clienthello_11.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=286:seqovl_pattern=bin_tls11""" }, "tcpseg_308_simple": { "name": "SeqOvl 308 (Simple, No Split)", "description": "Только overlap 308 байт, без резки и дублирования", "author": "hz", "label": None, "args": f"""--blob=bin_tls9:@{BIN_FOLDER}\\tls_clienthello_9.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=308:seqovl_pattern=bin_tls9""" }, ``` --- ### 2️⃣ SeqOvl + Dup (БЕЗ резки) ```python # ============================================================ # TCPSEG: SEQOVL + DUP (БЕЗ РЕЗКИ) # ============================================================ "tcpseg_211_dup_d1": { "name": "SeqOvl 211 + Dup (No Split)", "description": "Overlap 211 + дублирование 1-го пакета, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls5:@{BIN_FOLDER}\\tls_clienthello_5.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d1 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=211:seqovl_pattern=bin_tls5""" }, "tcpseg_226_dup_d1": { "name": "SeqOvl 226 + Dup (No Split)", "description": "Overlap 226 + дублирование 1-го пакета, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d1 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18""" }, "tcpseg_226_dup_n3": { "name": "SeqOvl 226 + Dup n3 (No Split)", "description": "Overlap 226 + дублирование первых 3 пакетов, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-n3 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18""" }, "tcpseg_286_dup_n3": { "name": "SeqOvl 286 + Dup n3 (No Split)", "description": "Overlap 286 + дублирование первых 3 пакетов, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls11:@{BIN_FOLDER}\\tls_clienthello_11.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-n3 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=286:seqovl_pattern=bin_tls11""" }, "tcpseg_308_dup_n3": { "name": "SeqOvl 308 + Dup n3 (No Split)", "description": "Overlap 308 + дублирование первых 3 пакетов, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls9:@{BIN_FOLDER}\\tls_clienthello_9.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-n3 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=308:seqovl_pattern=bin_tls9""" }, ``` --- ### 3️⃣ С динамической генерацией (Google SNI) ```python # ============================================================ # TCPSEG: ДИНАМИЧЕСКИЕ (БЕЗ ФАЙЛОВ) # ============================================================ "tcpseg_226_google_simple": { "name": "SeqOvl 226 Google (Simple, No Split)", "description": "Overlap 226 с Google SNI, без резки и дублирования", "author": "hz", "label": LABEL_RECOMMENDED, # Рекомендуется - не требует файлов "args": f"""--lua-init="tls_google = tls_mod(fake_default_tls,'sni=www.google.com')" {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=tls_google""" }, "tcpseg_226_google_dup_d1": { "name": "SeqOvl 226 Google + Dup (No Split)", "description": "Overlap 226 с Google SNI + дублирование 1-го пакета, БЕЗ резки", "author": "hz", "label": LABEL_RECOMMENDED, "args": f"""--lua-init="tls_google = tls_mod(fake_default_tls,'sni=www.google.com')" {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d1 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=tls_google""" }, "tcpseg_226_google_dup_n3": { "name": "SeqOvl 226 Google + Dup n3 (No Split)", "description": "Overlap 226 с Google SNI + дублирование первых 3 пакетов, БЕЗ резки", "author": "hz", "label": None, "args": f"""--lua-init="tls_google = tls_mod(fake_default_tls,'sni=www.google.com')" {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-n3 --lua-desync=send:repeats=2 --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=tls_google""" }, ``` --- ### 4️⃣ С различными fooling параметрами ```python # ============================================================ # TCPSEG: С FOOLING # ============================================================ "tcpseg_226_datanoack": { "name": "SeqOvl 226 + DataNoAck (No Split)", "description": "Overlap 226 с убиранием ACK флага, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18:tcp_flags_unset=ack""" }, "tcpseg_226_ttl": { "name": "SeqOvl 226 + TTL (No Split)", "description": "Overlap 226 с TTL=5, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18:ip_ttl=5:ip6_ttl=5""" }, "tcpseg_226_badseq": { "name": "SeqOvl 226 + BadSeq (No Split)", "description": "Overlap 226 с badseq, БЕЗ резки", "author": "hz", "label": None, "args": f"""--blob=bin_tls18:@{BIN_FOLDER}\\tls_clienthello_18.bin {RUTRACKER_BASE_ARG} --payload=tls_client_hello --out-range=-d10 --lua-desync=tcpseg:pos=0,-1:seqovl=226:seqovl_pattern=bin_tls18:tcp_ack=-66000""" }, ``` --- ## 📊 Сравнительная таблица: multisplit vs tcpseg | Параметр | multisplit + seqovl | tcpseg(pos=0,-1) + seqovl | |----------|---------------------|---------------------------| | **Количество пакетов** | 2 (резка по умолчанию на pos=2) | **1 (без резки)** | | **Сложность** | Средняя | **Минимальная** | | **Нагрузка на сеть** | Выше | **Ниже** | | **Эффективность** | Высокая (запутывание + резка) | Средняя (только запутывание) | | **CPU нагрузка** | Выше | **Ниже** | --- ## 🎯 Когда использовать какую стратегию? ### Используй **multisplit**: - ✅ Когда DPI анализирует целостность пакетов - ✅ Для агрессивного обхода - ✅ Когда tcpseg не помогает ### Используй **tcpseg** (pos=0,-1): - ✅ **Для начала тестирования** (проще) - ✅ Когда достаточно "запутать" DPI мусором - ✅ Для экономии ресурсов - ✅ Когда резка не нужна --- ## 💡 Рекомендуемая стратегия тестирования: ```python # Шаг 1: Самая простая (tcpseg без dup) "tcpseg_226_google_simple" # Шаг 2: Добавить дублирование "tcpseg_226_google_dup_d1" # Шаг 3: Если не помогло - добавить резку "multisplit_226_seqovl_dynamic" # Шаг 4: Если не помогло - агрессивная стратегия "multisplit_286_pattern" (dup n3 + резка) ``` --- ## 📝 Полная структура новых стратегий: ```python # ============================================================ # КАТЕГОРИЯ: TCPSEG (SEQOVL БЕЗ РЕЗКИ) # ============================================================ TCPSEG_STRATEGIES = { # Простые (без dup) "tcpseg_211_simple": {...}, "tcpseg_226_simple": {...}, "tcpseg_286_simple": {...}, "tcpseg_308_simple": {...}, # С дублированием (dup -d1) "tcpseg_211_dup_d1": {...}, "tcpseg_226_dup_d1": {...}, # С дублированием (dup -n3) "tcpseg_226_dup_n3": {...}, "tcpseg_286_dup_n3": {...}, "tcpseg_308_dup_n3": {...}, # Динамические (без файлов) "tcpseg_226_google_simple": {...}, # ← РЕКОМЕНДУЕТСЯ для начала "tcpseg_226_google_dup_d1": {...}, # ← РЕКОМЕНДУЕТСЯ для YouTube "tcpseg_226_google_dup_n3": {...}, # С fooling "tcpseg_226_datanoack": {...}, "tcpseg_226_ttl": {...}, "tcpseg_226_badseq": {...}, } ``` --- ## ✅ Преимущества добавления tcpseg стратегий: 1. ✅ **Больше вариантов для тестирования** 2. ✅ **Меньше нагрузки** (1 пакет vs 2+) 3. ✅ **Проще для понимания** (нет резки) 4. ✅ **Быстрее работает** (меньше операций) 5. ✅ **Градация сложности** (от простого к сложному) --- **Да, определённо стоит добавить эти стратегии! Они дадут пользователям "мягкий вход" - начать с простых вариантов и постепенно усложнять.** 🚀 ``` "multidisorder_badseq_pos": { "name": "original bol-van v2 (badsum)", "description": "Дисордер стратегия с фуллингом badseq нарезкой и повтором 6", "author": "hz", "label": None, "args": f"""--payload=tls_client_hello --out-range=-d10 --lua-desync=fake:blob=fake_default_tls:repeats=6:tcp_ack=-66000 --lua-desync=multidisorder:pos=1,midsld:tcp_ack=-66000""" }, "fake_fakedsplit_autottl_2": { "name": "fake fakedsplit badseq (рекомендуется для 80 порта)", "description": "", "author": "hz", "label": None, "args": f"""--payload=http_req --out-range=-d10 --lua-desync=fake:blob=fake_default_http:ip_autottl=2,3-20:ip6_autottl=2,3-20:tcp_ack=-66000:tcp_ts_up --lua-desync=fakedsplit:ip_autottl=2,3-20:ip6_autottl=2,3-20:tcp_ack=-66000:tcp_ts_up""" }, ```