Блобы (Blobs) в Zapret2
Блоб (blob) — это переменная Lua типа string, содержащая блок двоичных данных произвольной длины (от 1 байта до гигабайтов). Блобы используются для хранения fake-пакетов и других бинарных данных.
📦 Стандартные блобы
nfqws2 автоматически инициализирует 3 стандартных блоба при запуске:
1. fake_default_tls (680 байт)
Что это: TLS Client Hello пакет с SNI www.microsoft.com
Содержимое:
- TLS версия: 1.2/1.3
- Cipher suites: современные шифры
- SNI:
www.microsoft.com(по умолчанию) - Поддержка HTTP/2
- Расширения: supported_groups, signature_algorithms, key_share и др.
Использование:
--payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls2. fake_default_http (227 байт)
Что это: HTTP GET запрос
Содержимое:
GET / HTTP/1.1
Host: www.iana.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, brИспользование:
--payload=http_req --lua-desync=fake:blob=fake_default_http3. fake_default_quic (620 байт)
Что это: QUIC Initial пакет (минимальный валидный пакет)
Содержимое:
- Первый байт:
0x40(QUIC long header) - Остальное: нули (620 байт всего)
Использование:
--payload=quic_initial --lua-desync=fake:blob=fake_default_quic🔧 Модификации TLS блоба (tls_mod)
Функция tls_mod(blob, modlist, payload) модифицирует TLS Client Hello.
Доступные модификации:
1. rnd - Рандомизация поля “random”
- Заменяет 32-байтовое поле “random” в TLS handshake на случайные данные
- Делает каждый fake-пакет уникальным
2. rndsni - Случайный SNI
- Генерирует случайное доменное имя
- Заменяет SNI в TLS расширении
- Пример:
www.microsoft.com→a7b3c.com
3. sni=<домен> - Установить конкретный SNI
- Заменяет SNI на указанный домен
- Пример:
sni=www.google.com
4. dupsid - Дублировать Session ID
- Копирует Session ID из реального TLS handshake (из
payload) - Требует третий параметр — реальный payload пакета
- Делает fake более похожим на настоящий
5. padencap - Padding encapsulation
- Добавляет padding в TLS расширения
- Увеличивает размер пакета
6. none - Без модификаций
- Явно указывает, что модификации не нужны
💡 Примеры использования
Базовое использование стандартных блобов:
# TLS fake без модификаций
--lua-desync=fake:blob=fake_default_tls
# HTTP fake
--lua-desync=fake:blob=fake_default_http
# QUIC fake
--lua-desync=fake:blob=fake_default_quicМодификация TLS при старте:
# Однократно при старте изменить SNI на случайный и рандомизировать поле random
--lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')"Модификация TLS на лету:
# При каждой отправке менять SNI на google.com и копировать session ID
--lua-desync=fake:blob=fake_default_tls:tls_mod=rnd,dupsid,sni=www.google.comКомбинированные примеры:
# Для YouTube: fake с google.com SNI, MD5 signature, 11 повторов
--payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=11:tls_mod=rnd,dupsid,sni=www.google.comСоздание собственных блобов:
# Загрузить blob из hex-строки
--blob=myblob:0x1603010000
# Загрузить blob из файла
--blob=custom_tls:@/path/to/tls_clienthello.bin
# Загрузить с offset
--blob=custom_tls:+100@/path/to/file.bin
# Использовать свой blob
--lua-desync=fake:blob=myblob🔍 Как работает tls_mod
Синтаксис:
tls_mod(blob, modlist, [payload])Параметры:
blob- исходный TLS Client Hello (строка с бинарными данными)modlist- список модификаций через запятуюpayload(опционально) - реальный TLS handshake для копирования Session ID
Возвращает: модифицированный TLS Client Hello
Примеры в Lua:
-- При старте программы
fake_default_tls = tls_mod(fake_default_tls, 'rnd,rndsni')
-- В desync функции с реальным payload
fake_payload = tls_mod(fake_default_tls, 'dupsid,sni=www.google.com', desync.reasm_data)📋 Полный пример конфигурации
nfqws2 \
--lua-init=@zapret-lib.lua --lua-init=@zapret-antidpi.lua \
--lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')" \
--blob=quic_google:@quic_initial_www_google_com.bin \
\
--filter-tcp=80 --filter-l7=http \
--payload=http_req --lua-desync=fake:blob=fake_default_http:tcp_md5 \
--lua-desync=multisplit:pos=method+2 \
--new \
\
--filter-tcp=443 --filter-l7=tls \
--payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls:tcp_md5:repeats=6 \
--lua-desync=multidisorder:pos=1,midsld \
--new \
\
--filter-udp=443 --filter-l7=quic \
--payload=quic_initial --lua-desync=fake:blob=quic_google:repeats=11🎯 Ключевые моменты
- Стандартные блобы инициализируются автоматически — не нужно их загружать
fake_default_tlsсодержит SNIwww.microsoft.comпо умолчаниюtls_modможет применяться:- Один раз при старте через
--lua-init - На лету при каждой отправке через параметр
tls_mod=в desync функции
- Один раз при старте через
dupsidтребует реальный payload — работает только в функцияхfake,syndataи подобных- Модификации комбинируются через запятую:
rnd,rndsni,dupsid,sni=domain.com
Блобы — это мощный механизм для создания fake-пакетов любой сложности без жестко зашитых параметров в коде программы!