Блобы (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_tls

2. 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_http

3. 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.coma7b3c.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])

Параметры:

  1. blob - исходный TLS Client Hello (строка с бинарными данными)
  2. modlist - список модификаций через запятую
  3. 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

🎯 Ключевые моменты

  1. Стандартные блобы инициализируются автоматически — не нужно их загружать
  2. fake_default_tls содержит SNI www.microsoft.com по умолчанию
  3. tls_mod может применяться:
    • Один раз при старте через --lua-init
    • На лету при каждой отправке через параметр tls_mod= в desync функции
  4. dupsid требует реальный payload — работает только в функциях fake, syndata и подобных
  5. Модификации комбинируются через запятую: rnd,rndsni,dupsid,sni=domain.com

Блобы — это мощный механизм для создания fake-пакетов любой сложности без жестко зашитых параметров в коде программы!