mirror of
https://github.com/bol-van/zapret2.git
synced 2026-03-14 06:13:09 +00:00
update docs
This commit is contained in:
@@ -620,12 +620,6 @@ nfqws2 <глобальные_параметры>
|
||||
или откуда он приходит. Если ему это удается - происходит проверка по списку сетей, если нет - условие фильтра не соблюдается, профиль не выбирается.
|
||||
Такая концепция позволяет работать даже если вы подключаетесь к нескольким wifi сетям на разных адаптерах.
|
||||
|
||||
> [!CAUTION]
|
||||
> Основной способ получения SSID на Linux - через nl80211 был сломан с ядра 5.19 и не исправлен по настоящее время.
|
||||
Дополнительный способ через wireless extensions работает, но API в процессе депрекации, многие ядра собираются без, поэтому определение SSID может не работать.
|
||||
Для проверки nl80211 использовать `iw dev wlan0 info`, wext - `iwgetid wlan0`. Если ни одна команда не вернула корректный SSID, детект работать не будет.
|
||||
iwgetid может не быть по умолчанию, нужно устанавливать wireless-tools.
|
||||
|
||||
В Windows концепция иная. Мониторится наличие указанных wifi сетей на всех wifi адаптерах, и если на любом из них SSID есть,
|
||||
перехват windivert включается, а иначе выключается. Чтобы обслужить wifi сети с разными стратегиями нужно запускать несколько истансов winws2.
|
||||
Один будет включаться, остальные - отключаться. Список SSID задается параметром `--ssid-filter`.
|
||||
@@ -640,3 +634,83 @@ iwgetid может не быть по умолчанию, нужно устан
|
||||
В остальных системах нужно копаться в powershell или лезть в реестр, чтобы раскидать подключения по нужным GUID,
|
||||
если вдруг они раскидались системой неправильно. Но можно и не бороться, а просто внести список GUID, назначенных системой автоматически.
|
||||
|
||||
## Вызов LUA кода
|
||||
|
||||
LUA код вызывается в 2 этапа.
|
||||
|
||||
1. Однократно при запуске программы через `--lua-init=code|@file`. Если значение параметра начинается с `@`, выполняется файл, иначе значение параметра является LUA кодом.
|
||||
2. При обработке профиля через `--lua-desync=function_name:arg1[=val1]:arg2[=val2]:argN[=valN]`.
|
||||
Сначала идет имя функции, затем через двоеточия аргументы и их значения.
|
||||
Все значения являются строками. Если значение не задано, оно равно пустой строке.
|
||||
Реализовано 2 типа автоматических подстановок на строне C кода.
|
||||
`%var` подставляет значение переменной `desync.var` или `var`, если первая отсутствует.
|
||||
`#var` подставляет длину переменной `desync.var` или `var`, если первая отсутствует.
|
||||
Двоеточия и знаки `%`, `#` в начале могут быть эскейпнуты через `\`.
|
||||
|
||||
И `--lua-init`, и `--lua-desync` может быть несколько. Выполнение производится строго в порядке указания.
|
||||
|
||||
### Передача блобов
|
||||
|
||||
Блоб - это двоичный блок данных любого размера, который может быть загружен в переменную LUA средствами C кода при старте программы.
|
||||
|
||||
`--blob=<item_name>:[+ofs]@<filename>|0xHEX`
|
||||
|
||||
* `item_name` - имя переменной LUA.
|
||||
* `[+ofs]@<filename>` - загрузка из файла со смещения ofs.
|
||||
* `0xHEX` - загрузка из HEX строки
|
||||
|
||||
Прямые операции с файлами из кода LUA не рекомендованы без необходимости.
|
||||
LUA код выполняется с ограниченными правами, задуманное может не получиться или не работать на разных ОС в разных условиях.
|
||||
Загрузка blob происходит до вхождения в песочницу, поэтому шансов на успех больше.
|
||||
|
||||
### Внутрипрофильные фильтры
|
||||
|
||||
Они бывают трех видов - `--payload`, `--in-range`, `--out-range`.
|
||||
Значения фильтров действуют с момента их указания до следующего переопределения.
|
||||
|
||||
* `--payload=type1[,type2][,type2]...` принимает список известных пейлоадов через зяпятую, "all" или "known". Список известных пейлоадов доступен в help тексте nfqws2. По умолчанию `--payload=all`.
|
||||
* `--(in-range|out-range)=[(n|a|d|s|p)<int>](-|<)[(n|a|d|s|p)<int>]` задает диапазоны счетчиков conntrack по входящему и исходящему направлениям. По умолчанию `--in-range=x`, `--out-range=a`.
|
||||
|
||||
Диапазоны задаются в формах : `mX-mY`, `mX<mY`, `-mY`, `<mY`, `mX-`, где m - режим счетчика, X - нижнее значение, Y - верхнее значение.
|
||||
Режимы `x` и `a` задаются без диапазона и значения счетчика - единственной буквой. Знак `-` означает включающую верхнюю границу, `<` - исключающую.
|
||||
|
||||
Доступны следующие режимы счетчика :
|
||||
|
||||
* 'a' - всегда
|
||||
* 'x' - никогда
|
||||
* 'n' - номер пакета
|
||||
* 'd' - номер пакета с данными
|
||||
* 'b' - байт-позиция переданных данных
|
||||
* 's' - tcp: relative sequence начала текущего пакета
|
||||
* 'p' - tcp: relative sequence верхней границы текущего пакета (s + длина пейлоада)
|
||||
|
||||
nfqws2 следит за превышением верхней границы счетчиков для всех LUA инстансов.
|
||||
Если во всех инстансах превышена верхняя граница по направлению или инстансы вошли по направлению в состояние cutoff добровольно,
|
||||
происходит lua cutoff - выключение процессинга LUA в текущем потоке. Это нужно для экономии ресурсов процессора,
|
||||
поскольку проверка единственного bool признака практически не требует никаких ресурсов.
|
||||
|
||||
### Типичная схема вызова инстансов внутри профиля
|
||||
|
||||
В рассматриваемом примере решается задача для пейлоадов tls_client_hello и http_req попробовать фейки,
|
||||
отдельные для каждого типа пейлоада, а если это не работает, перейти на multidisorder для tls и multisplit для http.
|
||||
Если и это не работает - крутить стратегии по кругу.
|
||||
|
||||
```
|
||||
--filter-tcp=80,443 --filter-l7=http,tls
|
||||
--in-range=-s1 --lua-desync=circular
|
||||
--in-range=x
|
||||
--payload=tls_client_hello
|
||||
--lua-desync=fake:blob=fake_default_tls:badsum:strategy=1
|
||||
--lua-desync=multidisorder:strategy=2
|
||||
--payload=http_req
|
||||
--lua-desync=fake:blob=fake_default_http:badsum:strategy=1
|
||||
--lua-desync=multisplit:strategy=2
|
||||
```
|
||||
|
||||
Не суть важно как работают конкретные функции, сейчас важно понять как работают внутрипрофильные фильтры и как передаются параметры LUA инстансом.
|
||||
|
||||
* Инстанс circular для своей работы требует начальные пакеты потока, а по умолчанию они отключены.
|
||||
Поэтому включаем вплоть до первого пакета с данными tcp, который имеет relative sequence 1.
|
||||
* Остальные инстансы не нуждаются во входящем трафике. Снова отключаем. Действие `--in-range=x` распространяется до конца профиля.
|
||||
* Действие `--payload` распространяется на два следующих за ним инстанса.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user