todo/Zapret2/blob.md
loop-uh 0ad0bcc8dd
Some checks failed
Published content check / validate (push) Failing after 5s
seo+зеркало: [!mirror]-плашка со ссылкой на вики и description во frontmatter всех заметок
Каждая публикуемая заметка получила callout-шапку со ссылкой на свою страницу
wiki.zapret.moe (на самой вики она вырезается транформером RemoveMirrorCallout,
видна только на зеркале Obsidian Publish и в Forgejo) и SEO-поле description —
1–2 предложения для meta description обоих сайтов.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 22:05:57 +03:00

224 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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-пакетов любой сложности без жестко зашитых параметров в коде программы!
---