From 1eb780bb065d781529e0c69fc4769330b796154c Mon Sep 17 00:00:00 2001 From: bol-van Date: Tue, 25 Nov 2025 13:04:25 +0300 Subject: [PATCH] update docs --- docs/changes.txt | 5 +++++ docs/readme.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/docs/changes.txt b/docs/changes.txt index bf216eb..a2c156c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -18,3 +18,8 @@ v0.1.4 * winws2: set low mandatory level in process token if possible : no --wlan-filter or --nlm-filter (no windivert reinit required) * nfqws2: optimize debug logging to file + +v0.1.5 + +* nfqws2: # and % arg substitution +* zapret-antidpi: luaexec diff --git a/docs/readme.md b/docs/readme.md index 1c4e927..40275f1 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -365,6 +365,37 @@ start "zapret: http,https,quic" /min "%~dp0winws2.exe" ^ --lua-desync=fake:blob=0x00000000000000000000000000000000:repeats=2 ``` +И напоследок стоит продемонстрировать как делаются нестандартные вещи. То, что очень непросто запрограммировать в чисто описательном виде +в фиксированном коде, не превращая программу в монстро-комбайн, перегруженный частными функциями и разваливающийся под своей тяжестью со временем, +когда эти частные функции перестают быть нужны и забываются. + +Надо послать исходный запрос с известным пейлоадом с seqovl случайного размера от 5 до 10 символов со случайным содержимым, состоящим из букв от ‘a’ до ‘z’. +Здесь раскрывается не декларативный характер стратегий, а алгоритмический. Стратегия - это программа, и пишите ее вы на языке программирования. +Для облегчения простых или стандартных действий есть готовые средства, так что далеко не всегда надо писать свою функцию. +Частенько можно обойтись простенькими кусками LUA кода в дополнение к имеющимся. + +Здесь используется функция `luaexec`, предназначенная для динамического выполнения LUA кода в процессе обработки текущего диссекта. +Она инициализирует требуемый blob, записывая его в таблицу desync, которая передается от инстанса к инстансу. +Следующий инстанс `tcpseg` использует `rnd` как blob - источник seqovl паттерна. + +Символы `%` и `#` используются для разименования блобов и подстановки их размера соответственно. Реализовано на уровне C кода. +desync функция уже получает подставленные значения. В данном случае seqovl устанавливается как размер сгенерированного блоба. + +Функция `tcpseg` предназначена для отсылки tcp сегмента - части текущего пейлоада (или реасма - сборки нескольких пакетов, например в случае tls kyber). +`pos=0,-1` - это диапазон, состоящий из двух маркеров - начала и конца. 0 - положительный абсолютный маркер, соответствующий началу пакета. +-1 - отрицательный абсолютный маркер, соответствующий концу пакета. Получается, мы отсылаем целиком текущий пейлоад, но с seqovl. +`tcpseg` не дропает пакет. Его надо дропнуть отдельно. По умолчанию `tcpseg` работает только с известными пейлоадами, а функция `drop` - с любыми. +Поэтому нужно ей указать дропать только известные пейлоады. + +Такая связка из 3 инстансов решает поставленную задачу без кучи частных параметров вида `--dpi-desync...`. + +``` +nfqws2 \ + --lua-desync=luaexec:code='desync.rnd=brandom_az(math.random(5,10))' \ + --lua-desync=tcpseg:pos=0,-1:seqovl=#rnd:seqovl_pattern=rnd \ + --lua-desync=drop:payload=known +``` + ### Какие есть еще параметры Как узнать какие есть еще функции и какие у них бывают параметры ? Смотрите `zapret-antidpi.lua`. Перед каждой функцией подробно описано какие параметры она берет.