Zapret2: обсуждение

Багрепорт. per_instance_condition с cond_lua и code выдаёт ошибку, когда вложенных инстансов больше одного.

Так работает без ошибок:

--filter-tcp=443 --filter-l7=tls --hostlist=my\lists\gcore.txt --out-range=-d10 --payload=tls_client_hello^
 --lua-desync=per_instance_condition:code='return true'^
 --lua-desync=hostfakesplit:host=wargaming.net:tcp_ts=-1:cond=cond_lua

А так выдаёт ошибку “zapret-auto.lua:415: cond_lua: no ‘code’ parameter”:

--filter-tcp=443 --filter-l7=tls --hostlist=my\lists\gcore.txt --out-range=-d10 --payload=tls_client_hello^
 --lua-desync=per_instance_condition:code='return true'^
 --lua-desync=hostfakesplit:host=wargaming.net:tcp_ts=-1:cond=cond_lua^
 --lua-desync=hostfakesplit:host=wargaming.net:tcp_ts=-2:cond=cond_lua:cond_neg

Релизнул CLI-инструмент для проверки доступности заблокированных сайтов и AS под TCP16-20 блоками.
Соседняя тема тузлы

Полезно при тестировании стратегий на работоспособность

Пофиксено, но в итоге получилось несовместимое изменение.
В cond_lua code переименован в cond_code, иначе сломается luaexec

Я не разбираюсь. Мне скидывают результаты проверки коммерческими версиями.
Некоторые результаты откровенно тупят, другие по большей части полезны.
Бывают находят какие-то мелочи, не замечая серьезных проблем

Сам я работал с google AI и chatgpt, но не на анализе больших кусков кода, а на конкретных вопросах.
Оба мне понравились, но GPT глубже смотрит imho.
Чем более конкретный вопрос , тем лучше результат.
В сложных случаях они начинают фантазировать, особенно гугол.
Но они в отличие от комерсов не пытаются выполнять предложенный код, они смотрят статически , и чем сложнее ситуация, тем больше фантазируют.

Неожиданно возникла странная проблема с генерацией лог файла. Запускаю winws2.exe с параметром --debug=@log.txt из cmd под админом, он запускается, пишет “could not make ‘/cygdrive/<путь>/log.txt’ accessible. log file may not be writable after privilege drop.”
Новый файл log.txt создаётся, содержит начальный текст, но дальше по ходу работы программы не заполняется. При открытии вкладки Security у файла log.txt появляется алерт, заголовок “Windows Security”, тeкст: “The permissions on log.txt are incorrectly ordered, which may cause some entries to be ineffective.” После нажатия OK в списке юзеров на 1м месте виден “NULL SID”.
Пробовал ребутать комп и заново распаковывать архив запрета 0.9.4.1 в другую папку, не помогло. Win11.

Скрины


Извращенный DACL это дело рук cygwin. Он эмулирует unix права.
И делает это нестандартным образом, на что ругается диалог винды.

Вся эта шняга началась с введением параметра --chdir.
Я вынужден был скача по директориям все пути абсолютизировать и делаю это в unix стиле.
Но не учел, что такие пути не принимает винда.
Это уже исправлено, но еще не в релизе. В bundle залит самосбор исправленный

Пример динамического переключения между стратегиями путём использования per_instance_condition и cond=cond_lua, начиная с версии v0.9.4.2.

В приоритете hostfakesplit. Но эта стратегия не сработает, если длина реального хоста меньше длины фейкового хоста. В этом случае переключаемся на стратегию fake. А если сервер не поддерживает timestamps, то переключаемся на ttl фулинг.

 --wf-tcp-out=443^
 --lua-init=@"%~dp0lua\zapret-lib.lua" --lua-init=@"%~dp0lua\zapret-antidpi.lua"^
 --lua-init=@"%~dp0lua\zapret-auto.lua"^
 --blob=shopify:@my\fake\shopify.bin^
 --filter-tcp=443 --filter-l7=tls --hostlist=my\lists\test.txt --out-range=-d10 --payload=tls_client_hello^
  --lua-desync=luaexec:code="desync.can_do_hfs=function(desync) return desync.track and #desync.track.hostname>=#'shopify.com' end"^
  --lua-desync=per_instance_condition^
  --lua-desync=hostfakesplit:host=shopify.com:tcp_ts=-100000:cond=cond_lua:cond_code='return cond_tcp_has_ts(desync) and desync.can_do_hfs(desync)'^
  --lua-desync=hostfakesplit:host=shopify.com:ip_ttl=5:cond=cond_lua:cond_code='return not cond_tcp_has_ts(desync) and desync.can_do_hfs(desync)'^
  --lua-desync=fake:blob=shopify:tcp_ts=-200000:cond=cond_lua:cond_code='return cond_tcp_has_ts(desync) and not desync.can_do_hfs(desync)'^
  --lua-desync=fake:blob=shopify:ip_ttl=5:cond=cond_lua:cond_code='return not cond_tcp_has_ts(desync) and not desync.can_do_hfs(desync)'

Если действительно пользователь хочет заплатить – gpt 5.3 codex и opus/sonnet 4.6 единственные более менее рабочие лошадки. Всё остальное большой шлак и мусор, даже эти же модели поколениями ниже.

По крайней мере для программирования или сложных алгоритмов. gpt 5.3 codex неплохо даже на ассемблере пишет.

Хотя впрочем может эта игра вялась на гитхабе и ИИ её стырил, не ясно сколько из этих частей он реально сам написал – даже с учётом того что это всё ещё мимикряторы

image

Gemini 3.1 стала круто генерировать SVG картинки но для продакшена толку мало, только поразвлечься.

@bolvan , а что не так с upx 5.1.0 ?

Валится на старых ядрах , начиная сверху где-то между 3.2 и 3.10 - на x86_64. На других может быть иначе.
4.2.4 запускается даже на ранних 2.6
5.1 был сделан только для risc. В нем поддержка только появилась
Размеры exe практически идентичны, разница в unpack коде

@rem, Пользуясь случаем, хочу спросить - может вернуть двойные кавычки в конфиг?
Ваш пример выше
--lua-init="fake_default_tls = tls_mod(fake_default_tls,'rnd,rndsni')" можно задать так, c отключенным запретом на кавычки:
--lua-init="fake_default_tls=tls_mod\(fake_default_tls,\'rnd,rndsni\'\)", и все работает, единственное - не должно быть пробелов.

Так можно же просто указать так:
--lua-init=fake_default_tls=tls_mod(fake_default_tls,'rnd,rndsni')
Вот во что это превращается:

> /etc/init.d/zapret2 info
{
        "zapret2": {
                "instances": {
                        "instance1": {
                                "running": true,
                                "pid": 17401,
                                "command": [
                                        "/opt/zapret2/nfq2/nfqws2",
                                        "--debug=@/tmp/zapret2+nfqws2+1+main.log",
                                        "--user=daemon",
                                        "--fwmark=0x40000000",
                                        "--lua-init=@/opt/zapret2/lua/zapret-lib.lua",
                                        "--lua-init=@/opt/zapret2/lua/zapret-antidpi.lua",
                                        "--lua-init=@/opt/zapret2/lua/zapret-auto.lua",
                                        "--qnum=300",
                                        "--lua-init=fake_default_tls=tls_mod(fake_default_tls,'rnd,rndsni')",

Да, так работает, сразу не заметил, хорошо что можно проще.

По коду иногда лучше помогал chatgpt, иногда grok. Лучше включать режим размышления.

claude подкинули. очень неплохо.
а есть такие, что бред на бреде совсем. вплоть до того, что он слепнет и говорит типа “нет такого-то вызова”, хотя он там есть. Или начинает искать баги в коде, которого там просто нет. Откуда он его взял ? Придумал ? Небось у самого UB (undefined behavior), OOB (out of bands) , потому что память в GPU кончилась и он начал читать неинциализированный мусор от предыдущих раздумий ? =)

Как в таком случае решить проблему ipset-exclude на Windows (если нужно вырезать все диапозоны ру хостеров) через встроенные --wf фильтры чтобы не гнать ничего в winws2?

При этом на то что само ограничение на размер файл фильтра виндиверта 65535 байт?

Никак. Придется мириться.
Но если это 80,443, которые и так надо перехватывать, то потери небольшие

А точно, до Lua же они всё-равно не дойдут, не велика потеря.

lua - это 20%
80% - kernel и перехват

Клонировал репу zapret-win-bundle и прогнал блокчек2. Если попытаться запустить в терминале найденные стратегии, выдаётся ошибка “функция не существует”

PS F:\zapret2> winws2 --wf-l3=ipv4 --wf-tcp-out=443 --payload=tls_client_hello --lua-desync=fake:blob=0x00000000:tcp_flags_set=SYN:repeats=1 --lua-desync=fake:blob=fake_default_tls:tcp_flags_set=SYN:tls_mod=rnd,dupsid:repeats=1 --lua-desync=fakeddisorder:pos=2:tcp_flags_set=SYN
github version v0.9.4.3 (8b6ea88a239c0795df4f4d32de806fc5f42c44b8) lua_compat_ver 5

we have 1 user defined desync profile(s) and default low priority profile 0
we have 0 user defined desync template(s)
windivert initialized. capture is started.
LUA v5.1 LuaJIT 2.1.1756211046 OpenResty
JIT: ON SSE3 SSE4.1 fold cse dce fwd dse narrow loop abc sink fuse
desync function 'fake' does not exist

почему? Теперь это как-то не так работает?