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

Спасибо за починку листов.

Вопрос: на entware c:

Summary

/opt/zapret2 # iptables -t raw -L
iptables v1.4.21: can’t initialize iptables table `raw’: Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
/opt/zapret2 #

blockcheck есть смысл запускать? :thinking: Или ломается только

Summary

for strategies with incoming packets involved (autottl)

Имеет, но могут не работать тесты ipfrag и ломающие nat.
blockcheck распознает отсутствие таблицы raw и отключает тесты ipfrag
К incoming отношения не имеет

На отсутствие seccomp тоже ругается

Summary

[attempt 1] seccomp: Invalid argument
seccomp: this can be safely ignored if kernel does not support seccomp

Потому что нефиг запускать на всяком неподдерживаемом старье
это не смертельно, но спамить будет
Напоминаю, я не поддерживаю ничего, кроме традиционного linux и openwrt

Уж больно вы меня заинтересовали – спросил у прошки код. Он нашёл ещё больше “багов”, но всё же высказался что код нормальный. Остальное у него там было (в основном) только предложения. Так что у Pro версии процент галлюцинаций поменьше будет.

Думал он минут 30.

ну сколько он нагулицинировал только болван скажет либо тот кто хорошо шарит в коде) 30 минут жоско, у меня 12 минут думает, кинул бы болвану баги, то что мой находил 50 на 50 было, так что какую то пользу он всё равно принёс.

xhigh крутой режим, 200 баксов в месяц не хухры мухры)

Использовать для такого умного ИИ GPU кластеры размером со здание и потреблением множества мегаватт - все равно что, изобрести самолет с паровым двигателем =) Тут что-то иное надо принципиально. На иных физических принципах, может быть в какой-то степени аналоговых. Квантовых в идеале. Мы находимся на этапе ЭВМ 60х годов. Сколько еще пройдет времени, прежде чем любой калькулятор сделает их 10кратно ?
Посмотрю глюконацию, конечно

Однажды я спросил чатгпт как перевести код из под libnl на libmnl. Это нетлинк, кто не в курсе.
Он даже прогу сделал пример.
Но она не собиралась. Потому что был написан бред.
Просил создать картинку с помещением, где на столе и полках кувшины и фигурки.
При детальном рассмотрении что там за фигурки прям скажем можно было немного выпасть в осадок
Он не улавливает суть, он смотрит условно говоря на веб страницу, где написано, что здесь на картинке фигурки, и просекает себе в мозгах, что фигурки выглядят так. Закорючки какие-то.
Или математика на доске - куча формул. Вроде внешне похоже, но если посмотреть что это за математика, понимаешь, что медведь бы стал профессором с таким пониманием математики

Ни один проггер не напишет прогу в блокноте, чтобы она тут же собралась и работала.
Он ее компилирует и смотрит где какие баги.
Надо чтобы ИИ хотя бы пытался запустить свой код, чтобы увидеть свой бред и поправиться

AI

это конечно в идеале, но с чего то надо начинать, сейчас тоже есть прогресс и даже в этом году будут новые технлогии внедряться, если интересно почитай про tpu гугла и вера рубин от нвидия, это уже будет в этом году использоваться. Конечно это не квантовые но сам понимаешь рано или поздно будет.

сейчас так и происходит во всяки кодексах, антигравити и тд ну и наверно в xhigh за 200 баксов, просто в целом они всё равно тупят и ошибаются, но условно через год, три этих ошибок будет меньше а может и не будет, а может и не через 3 а быстрее) Ты видимо давно общался и не в платном режиме, сейчас конечно не идеально но прям лучше чем год назад это точно.

в мультимодальность чатгпт хуже чем gemini3 например, но и опять же они это подтянули тоже в декабре.

В общем прогресс пока идёт и не только в наращивании мощности количественно и качественно, но и в самих технологиях обработки данным самих ИИ моделей. В этом месяце обещали новые chatgpt, должен так же выйти гемини3 с новым методом внимания чтоль который в гемини3 флеш использовался, обновиться грок а в ферале дипсик4 и тд, короче много всего)

PS

Спойлер

image

VR

photo_2026-01-06_14-42-32

Spectrum-X Photonics — это революционная сетевая технология компании NVIDIA, которая станет «нервной системой» для новой архитектуры Vera Rubin.

Простыми словами, это переход от использования медных проводов и внешних оптических модулей к использованию света (фотоники) прямо внутри чипа коммутатора.

Вот подробный разбор того, что это такое и как достигаются указанные вами цифры:

  1. Что такое Spectrum-X Photonics?
    Традиционно в дата-центрах данные выходят из чипа в виде электричества, проходят по плате до порта, а затем преобразуются в свет специальным модулем (трансивером), в который втыкается кабель.

Spectrum-X Photonics использует технологию Co-Packaged Optics (CPO). Это означает, что оптические соединения встроены прямо в корпус чипа (коммутатора).

Суть: Лазеры и фотонные детекторы находятся в микрометрах от кремниевого чипа.

Результат: Не нужно тратить энергию на передачу электрического сигнала до края платы. Свет уходит сразу от чипа.

Наверное, так задумывалось.

23-seqovl.sh.patch (1.8 KB)

Да, косяк

Не новое, да. Но на борту:

Summary

MIPS34Kc @ 700MHz, 2 VPE

ОЗУ 128 Мбайт, Flash 128 Мбайт

Патч с поддержкой платформы был добавлен недавно в основное дерево, может кто-то и допилит, чтобы можно было установить ванильный OpenWRT.

Вопрос: а для чего blockcheck’у mangle? На raw нельзя перейти?

raw не везде установлен. на openwrt его нет без достановки модулей, на прошах вообще может не быть

Ну да. В целом на ndm с blockcheck’ом туго: по событиям (connect/disconnect/dhcp lease…) чистится netfilter. Для работы самого nfqws2 некритично - можно сделать скрипт на restart-fw на хук netfilter, а вот как пересоздать цепочки работы blockcheck’а….. :thinking:

Конект и дисконект вряд ли часто случаются, а dhcp можно временно на статику поменять

Опять я с поддоменами. Идёт ли метчинг для --ipcache-hostname==1 по субдоменам типа *.googlevideo.com? Или это уже реализовано?

Решил тоже приколоться и получить фикбек – правда я решил попробовать “самую умную модели в мире” по крайней мере так OpenII говорит – и в AGI ARC 2 набрала больше всего баллов с различными сложными логическими задачками из разных сфер + пазлы

Скормил только первые 10 файлов основного ядра С кода, lua кину позже. Попросил быть ИИ максимально строгим. Заодно попросил проверить безопасность кода с WinDivert – можно ли как-то обойти через него и получить повышение прав в среде Windows или нет.

Не всё могу разобрать из сие текста, но первое замечание мне кажется вполне корректным.

image

Осторожно полотна огромного ии-сплопного текста!

Посмотрел эти первые файлы (checksum.c, conntrack.c, darkmagic.c, desync.c, gzip.c, helpers.c, hostlist.c, lua.c, nfqws.c, pools.c). Код не меняю — ниже именно разбор логики/обработки и места, где реально может “стрельнуть” на Linux / Windows (WinDivert / winws2).


1) Что выглядит реально критичным (может сломать сборку/запуск)

1.1 darkmagic.c: win_dark_deinit() объявлен как bool, но не возвращает значение

Функция:

bool win_dark_deinit(void)
{
    ...
}

заканчивается без return. Это undefined behavior (и почти гарантированный warning control reaches end of non-void function).
Если у тебя сборка с -Werror, это станет фатальной ошибкой компиляции. Даже если warning не фатален — возвращаемое значение мусорное (правда, сейчас вызовы, похоже, его не используют).

Симптом: “на одних компиляторах собралось, на других нет” / “с -Werror не собирается”.


1.2 darkmagic.c: LowMandatoryLevel() ставит TokenIntegrityLevel, но Label.Attributes = 0

Сейчас:

label_low.Label.Attributes = 0;
bRes = SetTokenInformation(hToken, TokenIntegrityLevel, &label_low, sizeof(label_low));

По типовым примерам для TokenIntegrityLevel атрибуты у integrity SID обычно выставляют как минимум SE_GROUP_INTEGRITY и часто SE_GROUP_INTEGRITY_ENABLED. (Stack Overflow)

Если SetTokenInformation() на какой-то системе/сборке начнёт требовать корректные атрибуты (или integrity SID без атрибутов будет интерпретироваться не так) — песочница может не примениться или функция может вернуть ошибку → win_sandbox() вернёт falsewinws2 завершится.

Симптом: winws2 падает/выходит на этапе sandbox (после открытия WinDivert), либо тихо работает не в том integrity level.

Отдельно: ты параллельно используешь Mandatory Integrity Control (MIC) и метки SACL на объекте WinDivert (SetMandatoryLabelFile). В MIC логика “low не может писать в medium” и маски вида SYSTEM_MANDATORY_LABEL_NO_WRITE_UP — это как раз то, на чём держится идея “дать low доступ к нужному объекту”. (Microsoft Learn)
Поэтому любые нюансы вокруг установки integrity level — реально важны.


1.3 darkmagic.c: nlm_list() всегда вызывает CoUninitialize(), даже если CoInitialize() неуспешен

В nlm_list():

  • если CoInitialize(NULL) не прошёл → bRet=false, но CoUninitialize() вызывается всё равно.

Это риск “разбалансировки” COM init/uninit на потоке. Иногда это может пройти “мимо”, иногда — дать странные побочки (особенно если поток уже был COM-initialized кем-то ещё, или если ошибка CoInitialize была реальной).

Симптом: нестабильность/глюки только в режиме --nlm-list, или в окружениях где COM init может фейлиться.


1.4 darkmagic.c: возможный краш в логировании ошибки WinDivert при FormatMessageA == fail

В windivert_init_filter():

  • LPSTR errormessage = NULL;
  • потом FormatMessageA(..., (LPSTR)&errormessage, ...)
  • если FormatMessageA не смог (бывает на некоторых кодах), errormessage останется NULL,
  • а дальше в DLOG_ERR("... %s", errormessage);

В некоторых CRT %s с NULL печатает (null), а в некоторых/настройках — может упасть. Это редкое, но неприятное.

Симптом: падение именно в момент неудачного WinDivertOpen/компиляции фильтра, вместо нормального сообщения.


2) Потенциальные проблемы/краевые случаи (скорее “странности”, чем краш)

2.1 helpers.c: rtrim() — UB на пустой строке

for (char *p = s + strlen(s) - 1; p >= s && (...); p--)

Если s=="", то strlen(s)-1 даёт уход “до начала” → undefined behavior (указатель s-1).
В этих присланных файлах rtrim() не вызывается, но если он используется дальше (в конфиге/парсинге) — может внезапно стрельнуть на пустых строках.

Симптом: редкий краш при обработке пустых строк/параметров, зависящий от компилятора/опций.


2.2 hostlist.c: чтение построчно буфером char s[256]

AppendHostList() читает fgets(s, sizeof(s), ...).

  • Для доменов это почти всегда ок.
  • Но теоретически максимально длинный FQDN + ^ + \r\n может выйти за 255, и строка разобьётся на 2 fgets(). Тогда в пул попадёт “обрубок”/мусор.

Симптом: “почему-то не матчится один редкий хост” или “в списке появился обрезанный кусок”.


2.3 hostlist.c: tolower(*s) без (unsigned char)

В addpool():

*s = tolower(*s);

Если в строке окажутся байты >127 и char знаковый — это UB. Для доменов обычно ASCII, но если кто-то положит мусор/UTF-8 — может быть не очень.


2.4 gzip.c: z_readfile() не проверяет, что поток завершился Z_STREAM_END

Сейчас функция возвращает Z_OK, даже если gzip оборван (EOF) и inflate так и не увидел Z_STREAM_END.
Это не “краш”, но тихий приём битого gzip как валидного → hostlist/lua-init может прочитаться частично без явной ошибки.

Симптом: “иногда список/скрипт как будто неполный”, особенно если файл качается/обновляется и читается в момент записи.


2.5 lua.c: если найден только file.gz, но он “не gzip” — будет попытка luaL_dofile() по имени без .gz

lua_file_open_test() умеет подставить .gz, но luaL_doZfile() в ветке !b_gzip вызывает luaL_dofile(L, filename) (оригинальное имя), а не fname.
Срабатывает только в странном сценарии “есть <name>.gz, но это не gzip”.


2.6 nfqws.c: exithelp() — риск переполнения all_payloads/all_protos при росте списков

Ты делаешь:

if (pl) strncat(all_payloads, " ", sizeof(all_payloads)-1-1);

Третий аргумент тут константный, не “остаток буфера”. Сейчас строки короткие и список небольшой — вероятно безопасно. Но если список payload’ов/имён вырастет, --help может теоретически выйти за буфер.


3) По логике “файлов” и обработке конкретики (что хорошо и где тонко)

3.1 Hostlist (hostlist.c + pools.c + gzip.c)

Что обработано нормально:

  • Поддержка gzip:
    • is_gzip(FILE*) по сигнатуре 1F 8B
    • плюс fallback на “если файла нет — пробуем .gz
  • Загрузка в память z_readfile() и разбор AppendHostListFromBuffer() корректно режет по \n, тримит \r\n, игнорирует комментарии #, режет по пробелам/табам.
  • Логика strict match ^ сделана осмысленно (строгий матч только на “полном хосте”, без доменного подъёма).
  • Reload по подписи файла (size + mtime) — разумно.

Тонкие места я выше отметил (256-буфер, битый gzip как “ОК”).


3.2 Lua init scripts (lua.c + gzip.c)

  • Есть проверка доступности файлов lua_file_open_test() и тест после droproot на Linux.
  • @file и plain-string скрипты поддержаны.
  • gzip поддержан так же, как hostlist (по сигнатуре и по .gz).

Тонкость: битый gzip и кейс с “.gz но не gzip”.


3.3 WinDivert / winws2 (nfqws.c + darkmagic.c)

Хорошие моменты:

  • windivert_init_filter() защищён mutex’ом от race при старте драйвера (это реально полезно).
  • I/O сделан через overlapped + WaitForMultipleObjects + отдельный quit event.
  • logical_net_filter_match_rate_limited() ограничивает дорогое WLAN/NLM до 1 раза/сек.
  • win_sandbox() идемпотентен (флаг b_sandbox_set), то есть при пропадании/появлении сети ты не пытаешься “перепесочить” процесс снова — это правильно.

Что важно проверить/держать в голове:

  • Вся “устойчивость” WinDivert после sandbox держится на MIC/Integrity и метках на объекте WinDivert. (Microsoft Learn)
    Поэтому пункт про LowMandatoryLevel() (атрибуты) я считаю самым рискованным именно “по WinDivert”.

4) Самый короткий список “возможных стопперов” для WinDivert/Windows

Если нужно прям чеклистом:

  1. win_dark_deinit() без return → может стопорить сборку с -Werror.
  2. LowMandatoryLevel() с Label.Attributes=0 → потенциально может ломать sandbox/доступы (особенно в сочетании с MIC). (Stack Overflow)
  3. nlm_list() unconditional CoUninitialize() → риск COM-глюков в --nlm-list.
  4. FormatMessageA%s с NULL → редкий, но возможный краш на обработке ошибки WinDivert.

Скидывай следующие файлы — особенно интересно будет посмотреть связки: где именно вызывается rtrim(), как устроены DLOG_*, как живёт params.L относительно ConntrackPoolDestroy, и где формируется/применяется params.windivert_filter (чтобы понять, могут ли быть случаи переполнения/усечения фильтра и что тогда будет).

Второй ИИ слоп

Я просмотрел все загруженные сейчас файлы (C: checksum.c, conntrack.c, darkmagic.c, desync.c, gzip.c, helpers.c, hostlist.c, lua.c, nfqws.c, pools.c, protocol.c, sec.c, win.c + Lua: zapret-*.lua). Ниже — как у вас реально проходит обработка пакетов и что выглядит как баги/рискованные места (без попыток “исправлять код”, только фиксация проблем).


Как пакет проходит по проекту (чтобы понимать “всё ли обрабатывается”)

Захват

  • Linux (NFQUEUE): nfqws.c:nfq_cb() получает payload, вызывает processPacketData(...), затем выставляет вердикт nfq_set_verdict2().
  • Windows (WinDivert): nfqws.c:win_main() делает windivert_recv_filter()processPacketData(...) → если VERDICT_PASSобязательно реинжект через windivert_send().

Разбор L3/L4

  • darkmagic.c:proto_dissect_l3l4():

    • IPv4/IPv6: базовая валидация + пропуск IPv6 extension headers.
    • TCP/UDP: достаёт payload/len и указатели на заголовки.
    • Всё остальное (не TCP/UDP) остаётся “неинтересным” — далее обычно PASS.

Conntrack / reassembly

  • conntrack.c: хранит состояние потока, в т.ч. накапливает куски TCP payload для распознавания L7 (ClientHello, HTTP и т.п.) — но только если сегменты приходят без дырок (есть строгая логика про gap/out-of-order).

L7 распознавание

  • protocol.c: детекторы и парсеры (HTTP/1, TLS ClientHello/ServerHello, QUIC Initial + попытка расшифровать Initial, WireGuard, STUN, DNS, XMPP, MTProto и т.п.).

“Desync” логика / отправка фейков

  • desync.c: выбирает стратегию, формирует фейки/фрагменты/сплиты, вызывает rawsend()/windivert_send() и т.д.
  • checksum.c: пересчёт TCP/UDP чеков после модификаций.

Критичные/высокорисковые проблемы

1) Windows: LowMandatoryLevel() очень похоже сломает sandbox (и тогда winws2.exe просто не стартанёт)

Файл: darkmagic.c
Место: LowMandatoryLevel() строки ~615–636 (у вас это SetTokenInformation(...TokenIntegrityLevel...)).

Проблема в двух моментах:

  1. label_low.Label.Attributes = 0; — для TokenIntegrityLevel обычно ожидаются флаги integrity-группы (иначе SetTokenInformation может вернуть ERROR_INVALID_PARAMETER).
  2. В SetTokenInformation передаётся TokenInformationLength = sizeof(label_low), т.е. без учёта размера SID. На практике многие примеры/доки для TokenIntegrityLevel требуют длину “структура + SID”, иначе часто возвращается ошибка.

Так как win_sandbox() жёстко проверяет LowMandatoryLevel() и при ошибке выходит, это реально может дать “не работает на Windows” на части систем.


2) Windows: win_dark_deinit() объявлен как bool, но не возвращает значение (UB)

Файл: darkmagic.c
Место: bool win_dark_deinit() строки ~895–904.

Функция заканчивается без return. Это undefined behavior по C-стандарту (даже если вызывающий код игнорирует значение). Обычно это вылезает как warning, но UB остаётся UB.


3) Windows: возможный крэш при логировании ошибки WinDivert (NULL в %s)

Файл: darkmagic.c
Место: windivert_init_filter() строки ~1150–1180.

Логика:

  • FormatMessageA(..., (LPSTR)&errormessage, ...) может вернуть 0 (не смог выделить/сформировать строку).
  • Тогда errormessage остаётся NULL,
  • И дальше идёт DLOG_ERR("... %s\n", errormessage)%s с NULL это UB (на части libc печатает (null), на части — может упасть).

Да, это на редких условиях, но если WinDivertOpen начинает фейлиться “необычно”, вы можете вместо понятного лога получить падение.


4) Возможное переполнение буфера в l7_payload_str_list() (неправильная проверка размера)

Файл: protocol.c
Место: bool l7_payload_str_list(...) строки ~74–99.

Проверка:

if (size < ((p!=buf) + lstr + 1)) return false;

Она не учитывает уже записанную длину (p-buf), то есть при добавлении нескольких коротких строк может пройти проверку и переписать хвост буфера.

Сейчас у вас обычно буферы большие (512/2048) и список ограничен, поэтому может “не проявляться”. Но формально это реальная уязвимость/баг по памяти.


5) Логика направления “без conntrack”: подозрительный явный typo ifin && ifin

Файл: desync.c
Места:

  • TCP ветка: строка ~1120
  • UDP ветка: строка ~1666

Конкретно:

bReverse = ifin && ifin && (!ifout || !*ifout);

ifin && ifin выглядит как опечатка (обычно смысл — проверить не пустая ли строка, т.е. ifin && *ifin). Сейчас это фактически сводится к bReverse = !*ifout (потому что ifin почти всегда не-NULL).

Почему это важно:

  • В режиме --ctrack-disable вы частично угадываете направление по интерфейсам.

  • Если оба интерфейса пустые/не заполнены (или оба заполнены), направление может определяться неверно, а значит:

    • неверно выбирается “клиент/сервер” сторона,
    • могут не примениться нужные desync-правила/позиции.

6) Windows: snprintf() для mutex-name — несовпадение количества %u и аргументов

Файл: nfqws.c
Место: win_main() строка ~2643.

Формат содержит 10 %u, а вы передаёте 12 аргументов (wf_ipv4, wf_ipv6 лишние и не попадают в строку). Это не краш, но последствия:

  • mutex-name не различает некоторые варианты конфигурации,
  • можно получить ложное “уже запущено” при реально разных настройках.

Средний риск / спорные места (могут проявиться в специфичных условиях)

A) Windows/WinDivert: фиксированный буфер 16384 байт

Файл: nfqws.c
Место: win_main()uint8_t packet[16384];

Если WinDivert отдаст пакет больше вашего буфера, WinDivert вернёт ERROR_INSUFFICIENT_BUFFER — “captured packet is larger than the buffer”; документация также указывает, что при этом пакет будет усечён и операция завершится ошибкой. (GitHub)

У вас это мапится в errno=ENOBUFS и вы просто continue.

Почему это риск:

  • В divert-режиме (не sniff) “не обработанный/не реинжекченный” пакет может фактически превратиться в drop/столл (точное поведение зависит от WinDivert, но факт ошибки и усечения описан в доке). (GitHub)
  • Реально такие пакеты чаще бывают на loopback/виртуалках/туннелях/джамбо, но если пользователь включает loopback или ловит нестандартный MTU — может проявиться.

B) tolower()/isspace() на char без приведения к unsigned char (UB на не-ASCII байтах)

Файлы/места:

  • hostlist.c:21
  • protocol.c:335, protocol.c:642
  • helpers.c:30, и т.п.

Если в hostlist попадут байты с установленным старшим битом (не ASCII), либо если кто-то шлёт “грязный” Host/SNI, то tolower()/isspace() на отрицательных charundefined behavior. В реальности чаще всего “просто неверная обработка”, но формально может быть и краш на некоторых libc.


C) Возможный будущий overflow в exithelp() (если списки станут длиннее)

Файл: nfqws.c
Место: exithelp() строки ~1328–1355.

Вы используете strncat(all_payloads, " ", sizeof(all_payloads)-1-1) с константным n, не остатком места. Сейчас список маленький, буфер 1024, и это не проявляется. Но как “бомба на будущее” — да, если список протоколов/пейлоадов расширится, можно уехать за границы.


По обработке пакетов: что точно “не покрыто” или может не сработать

Это не обязательно баги, но важные ограничения, если вопрос “всё ли конкретно обрабатывается”:

  1. IP-фрагментация (IPv4/IPv6):
    Вы корректно распознаёте IPv4/IPv6 заголовки и (для IPv6) умеете пропускать extension headers, но не делаете полноценную реассембли IP-фрагментов. Если полезная нагрузка (TLS/HTTP) попала не в первый фрагмент или разбита так, что L7-сигнатуры не видны — desync/распознавание не отработает (будет PASS).

  2. TCP reassembly строгий (conntrack.c:ReasmFeed)
    При gap/out-of-order вы часто “фейлите” reasm (return false), чтобы не собирать мусор. Это разумно, но означает:

    • при нестандартной доставке, потере/перестановке, не попадёте в нужную сигнатуру → часть стратегий не применится.
  3. Windows фильтр по умолчанию не ловит ACK-only
    Ваш WinDivert filter (см. wf_make_filter) ориентирован на tcp.PayloadLength > 0 + отдельные “важные” флаги (SYN/FIN/RST и т.п.). Это ускоряет, но:

    • если какая-то стратегия/логика полагается на голые ACK/WindowUpdate и т.д., то в Windows-режиме эти пакеты могут вообще не попадать в обработку.

Lua-часть (кратко)

Lua-скрипты (zapret-*.lua) в основном описывают профили/планы и не выглядят как “место падения” сами по себе (без контекста C-API). Критичных синтаксических косяков “на глаз” не увидел.


Итог: самое важное

Если цель — “чтобы winws2.exe точно не падал/не выходил на Windows”, то самые опасные места сейчас:

  1. darkmagic.c:LowMandatoryLevel() (очень вероятная причина, почему sandbox может не примениться и всё завершится).
  2. darkmagic.c:win_dark_deinit() без return (UB).
  3. darkmagic.c:windivert_init_filter()%s с потенциальным NULL.
  4. protocol.c:l7_payload_str_list() — потенциальный overflow по буферу.
  5. desync.cifin && ifin (на --ctrack-disable может давать неправильное направление).

Если скинешь оставшиеся файлы проекта (особенно заголовки *.h, где константы типа RECONSTRUCT_MAX_SIZE, структуры и прототипы), я так же пройду их и проверю связность “как это реально работает вместе” и нет ли ещё скрытых мест, которые сейчас не видны из .c/.lua.

ipcache это просто источник информации о домене
откуда инфа пришла не суть важно
дальше она идет на стандартный чекер хостлиста, который матчит поддомены

если по ipcache пришло BLABLA.googlevideo.com, в листе googlevideo.com, оно заматчит

Чушь это IMHO. Он начитался источник, который сам не прав.
Структура SID_AND_ATTRIBUTES применяется во многих контекстах, и смысл attributes зависит от применения. То, что написано на стаковерфлов, относится к TOKEN_GROUPS, а у меня TOKEN_MANDATORY_LABEL. Вещи как бы совсем разные

Впрочем, хромиум делает все же. Может и правда надо
label.Label.Attributes = SE_GROUP_INTEGRITY;

Анализ почему я ставлю лов мандатори на девайс windivert у меня в whatsnew. Это компромисс, и секурити импликейшинс я разобрал. Максимум кто получит возможность рулить виндиверт - это такие же сандбокснутые до low процессы, имеющие в токене активную группу администраторов. Что само по себе немного странно. В сандбоксах обычно ее удаляют. Но я не могу, потому что документированное API не позволяет это сделать без запуска дочернего процесса, и тогда мне придется править DACL еще и на windivert девайсе, что еще больше влияет на секурити. Конечно, я мог бы использовать service specific ssid, но это только для службы работает. Для обычного консольного окна из-под администратора есть только LOGON_SSID, который общий для всех процессов сеанса.
Так делаю только если применяется фильтр по SSID или NLM, потому что мне надо в этом случае стопать и стартать каптуру, я не могу это делать без прав. Нет в виндиверте команды паузы каптуры без закрытия хандла. А если я его закрываю, мне надо его открывать заново, что напарывается на отсутствие прав

Такой вариант рассматривался, но он не без недостатков: переводить wan, через который сидишь, на статику чревато - можно потом ехать до железки. К тому же есть ещё Wi-Fi пользователи, которые за часы работы стандартных проверок blockcheck могут не сидеть на месте.

Так что был выбран несколько другой вариант.

blockcheck2.sh.ugly.patch (1.6 KB)

Есть, однако, странность: с REPEATS>1 количество найденых стратегий равно 0. С REPEATS=1 вроде бы верно на первый взгляд находит.