Some checks failed
Published content check / validate (push) Failing after 5s
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout, видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description — 1–2 предложения для meta description обоих сайтов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
224 lines
7.8 KiB
Markdown
224 lines
7.8 KiB
Markdown
---
|
||
tags:
|
||
link:
|
||
aliases:
|
||
- blob
|
||
- блоб
|
||
img:
|
||
description: "Блобы в Zapret2/nfqws2: стандартные fake_default_tls/http/quic, модификации tls_mod (rnd, sni, dupsid) и загрузка своих fake-пакетов через --blob."
|
||
---
|
||
|
||
> [!mirror] Резервное зеркало
|
||
> Актуальная версия этой страницы — на основной вики: [wiki.zapret.moe/Zapret2/blob](https://wiki.zapret.moe/Zapret2/blob)
|
||
|
||
# Блобы (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 \
|
||
--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-пакетов любой сложности без жестко зашитых параметров в коде программы!
|
||
|
||
|
||
---
|
||
|