## Блобы (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 и др.
**Использование:**
```bash
--payload=tls_client_hello --lua-desync=fake:blob=fake_default_tls
```
### 2. **`fake_default_http`** (227 байт)
**Что это:** HTTP GET запрос
**Содержимое:**
```http
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
```
**Использование:**
```bash
--payload=http_req --lua-desync=fake:blob=fake_default_http
```
### 3. **`fake_default_quic`** (620 байт)
**Что это:** QUIC Initial пакет (минимальный валидный пакет)
**Содержимое:**
- Первый байт: `0x40` (QUIC long header)
- Остальное: нули (620 байт всего)
**Использование:**
```bash
--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`** - Без модификаций
- Явно указывает, что модификации не нужны
---
## 💡 **Примеры использования**
### Базовое использование стандартных блобов:
```bash
# 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 при старте:
```bash
# Однократно при старте изменить SNI на случайный и рандомизировать поле random
--lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')"
```
### Модификация TLS на лету:
```bash
# При каждой отправке менять SNI на google.com и копировать session ID
--lua-desync=fake:blob=fake_default_tls:tls_mod=rnd,dupsid,sni=www.google.com
```
### Комбинированные примеры:
```bash
# Для 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
```
### Создание собственных блобов:
```bash
# Загрузить 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`**
### Синтаксис:
```lua
tls_mod(blob, modlist, [payload])
```
**Параметры:**
1. `blob` - исходный TLS Client Hello (строка с бинарными данными)
2. `modlist` - список модификаций через запятую
3. `payload` (опционально) - реальный TLS handshake для копирования Session ID
**Возвращает:** модифицированный TLS Client Hello
### Примеры в Lua:
```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)
```
---
## 📋 **Полный пример конфигурации**
```bash
nfqws2 \
[email protected] [email protected] \
--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-пакетов любой сложности без жестко зашитых параметров в коде программы!
---