💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 21.0.0.6
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 17 files changed, 388 insertions(+), 234 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 21.0.0.6
👤 Автор: loop-uh
🔗 SHA:
8742917📊 Статистика: 17 files changed, 388 insertions(+), 234 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/core/direct_preset_core/common/target_metadata_loader.py✏️
src/core/direct_preset_core/common/target_metadata_service.py✏️
src/core/direct_preset_core/engines/_shared.py🆕
src/core/presets/cache_signatures.py✏️
src/core/presets/direct_facade_backend.py✏️
src/core/presets/runtime_store.py✏️
src/preset_orchestra_zapret2/preset_manager.py✏️
src/preset_orchestra_zapret2/preset_store.py✏️
src/ui/main_window.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/pages/orchestra_zapret2/user_presets_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py🆕
src/ui/pages/zapret2/strategy_detail_mode_policy.py✏️
src/ui/pages/zapret2/strategy_detail_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Update dpi_controller.py
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 1 file changed, 28 insertions(+), 11 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Update dpi_controller.py
👤 Автор: loop-uh
🔗 SHA:
c3ca689📊 Статистика: 1 file changed, 28 insertions(+), 11 deletions(-)
📁 Изменённые файлы:
✏️
src/dpi/dpi_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Теперь в public_zapretgui/src/managers/initialization_manager.py поздний post-init запускается не через QTimer.singleShot(...), а через обычный queued-сигнал _PostInitLaunchBridge. Это значит следующее: - тяжёлая часть всё ещё не выполняется прямо внутри быстрого стартового участка; - но больше нет искусственной задержки вроде 180ms; - запуск переносится просто на следующий проход цикла интерфейса, то есть без «магического ожидания» и без таймерной эвристики. Проще говоря: мы сохранили главную пользу отложенного запуска, но убрали именно тот механизм, который уже раньше показал себя плохим, когда поведение начинает зависеть от случайной задержки, а не от реального жизненного цикла окна. Что изменилось по сути:
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 3 files changed, 266 insertions(+), 65 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Теперь в public_zapretgui/src/managers/initialization_manager.py поздний post-init запускается не через QTimer.singleShot(...), а через обычный queued-сигнал _PostInitLaunchBridge. Это значит следующее: - тяжёлая часть всё ещё не выполняется прямо внутри быстрого стартового участка; - но больше нет искусственной задержки вроде 180ms; - запуск переносится просто на следующий проход цикла интерфейса, то есть без «магического ожидания» и без таймерной эвристики. Проще говоря: мы сохранили главную пользу отложенного запуска, но убрали именно тот механизм, который уже раньше показал себя плохим, когда поведение начинает зависеть от случайной задержки, а не от реального жизненного цикла окна. Что изменилось по сути:
👤 Автор: loop-uh
🔗 SHA:
d17f746📊 Статистика: 3 files changed, 266 insertions(+), 65 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/managers/initialization_manager.py✏️
src/ui/pages/appearance_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 первый запуск теперь отполирован
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 14 files changed, 369 insertions(+), 484 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 первый запуск теперь отполирован
👤 Автор: loop-uh
🔗 SHA:
b06dbf7📊 Статистика: 14 files changed, 369 insertions(+), 484 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/dpi/dpi_controller.py✏️
src/main.py✏️
src/managers/dpi_manager.py✏️
src/managers/dpi_runtime_service.py✏️
src/managers/initialization_manager.py✏️
src/startup/kaspersky.py✏️
src/startup/telega_check.py✏️
src/tray.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/window_notification_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 - закрытие при WindowDeactivate, то есть когда окно перестаёт быть активным; - закрытие при FocusOut, то есть когда popup теряет фокус; - закрытие при смене состояния приложения через applicationStateChanged, то есть как раз при уходе из активного окна, например через Alt+Tab; - для трея сохранена отдельная Windows-специфика: закрытие по клику вне меню через глобальную проверку мыши. На этот общий helper я перевёл все живые popup-меню, которые у вас открывались через menu.exec(...) в пользовательских сценариях: - public_zapretgui/src/ui/pages/preset_actions_menu.py - public_zapretgui/src/ui/pages/preset_rating_menu.py - public_zapretgui/src/ui/pages/preset_subpage_base.py - public_zapretgui/src/ui/pages/zapret2/strategy_detail_page.py - public_zapretgui/src/ui/pages/orchestra_page.py - public_zapretgui/src/ui/pages/strategy_scan_page.py - public_zapretgui/src/tray.py То есть смысл правки такой: раньше у трея была одна отдельно починенная логика, а у остальных меню была своя, местами слабая или вообще отсутствующая. Теперь у программы есть один общий механизм popup-lifecycle, а tray просто использует его через свою обёртку с дополнительным поведением для клика мимо.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 15 files changed, 609 insertions(+), 585 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 - закрытие при WindowDeactivate, то есть когда окно перестаёт быть активным; - закрытие при FocusOut, то есть когда popup теряет фокус; - закрытие при смене состояния приложения через applicationStateChanged, то есть как раз при уходе из активного окна, например через Alt+Tab; - для трея сохранена отдельная Windows-специфика: закрытие по клику вне меню через глобальную проверку мыши. На этот общий helper я перевёл все живые popup-меню, которые у вас открывались через menu.exec(...) в пользовательских сценариях: - public_zapretgui/src/ui/pages/preset_actions_menu.py - public_zapretgui/src/ui/pages/preset_rating_menu.py - public_zapretgui/src/ui/pages/preset_subpage_base.py - public_zapretgui/src/ui/pages/zapret2/strategy_detail_page.py - public_zapretgui/src/ui/pages/orchestra_page.py - public_zapretgui/src/ui/pages/strategy_scan_page.py - public_zapretgui/src/tray.py То есть смысл правки такой: раньше у трея была одна отдельно починенная логика, а у остальных меню была своя, местами слабая или вообще отсутствующая. Теперь у программы есть один общий механизм popup-lifecycle, а tray просто использует его через свою обёртку с дополнительным поведением для клика мимо.
👤 Автор: loop-uh
🔗 SHA:
51466d4📊 Статистика: 15 files changed, 609 insertions(+), 585 deletions(-)
📁 Изменённые файлы:
✏️
src/autostart/autostart_direct.py✏️
src/core/direct_flow.py✏️
src/dpi/dpi_controller.py✏️
src/launcher_common/builder_factory.py✏️
src/managers/dpi_manager.py✏️
src/managers/initialization_manager.py✏️
src/tray.py✏️
src/ui/main_window_mode_switch.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/preset_actions_menu.py✏️
src/ui/pages/preset_rating_menu.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py🆕
src/ui/popup_menu.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 ввёл единый лёгкий cleanup helper для обычного старта: _unload_known_windivert_drivers() и _perform_standard_windivert_cleanup(). Это важно, потому что раньше zapret1 и zapret2 делали почти одинаковую стандартную очистку разными кусками кода, и эти куски уже начали жить как два отдельных владельца одной и той же policy. Теперь обычная очистка перед стартом у них канонически одна. В public_zapretgui/src/zapret1_launcher/strategy_runner.py:410 я разложил ordinary launch path на отдельные этапы: подготовка cleanup через _prepare_cleanup_before_spawn_locked(...), потом отдельное решение о retry через _maybe_retry_after_failed_spawn_locked(...). Самое важное здесь то, что ранее убранный fallback с “selected-source refresh” больше не вернулся: runner не пытается тихо восстанавливать отсутствующий preset через другой путь, а честно падает с ошибкой, если входной preset не существует. В public_zapretgui/src/zapret2_launcher/strategy_runner.py:857 сделал аналогичное разделение, но без насильственного выравнивания поведения под zapret1, потому что у них реально разная retry-модель. Для zapret2 теперь отдельно видны:
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 7 files changed, 347 insertions(+), 283 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 ввёл единый лёгкий cleanup helper для обычного старта: _unload_known_windivert_drivers() и _perform_standard_windivert_cleanup(). Это важно, потому что раньше zapret1 и zapret2 делали почти одинаковую стандартную очистку разными кусками кода, и эти куски уже начали жить как два отдельных владельца одной и той же policy. Теперь обычная очистка перед стартом у них канонически одна. В public_zapretgui/src/zapret1_launcher/strategy_runner.py:410 я разложил ordinary launch path на отдельные этапы: подготовка cleanup через _prepare_cleanup_before_spawn_locked(...), потом отдельное решение о retry через _maybe_retry_after_failed_spawn_locked(...). Самое важное здесь то, что ранее убранный fallback с “selected-source refresh” больше не вернулся: runner не пытается тихо восстанавливать отсутствующий preset через другой путь, а честно падает с ошибкой, если входной preset не существует. В public_zapretgui/src/zapret2_launcher/strategy_runner.py:857 сделал аналогичное разделение, но без насильственного выравнивания поведения под zapret1, потому что у них реально разная retry-модель. Для zapret2 теперь отдельно видны:
👤 Автор: loop-uh
🔗 SHA:
f258b2e📊 Статистика: 7 files changed, 347 insertions(+), 283 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/core/presets/direct_facade_backend.py✏️
src/core/presets/repository.py✏️
src/dpi/dpi_controller.py✏️
src/launcher_common/runner_base.py✏️
src/zapret1_launcher/strategy_runner.py✏️
src/zapret2_launcher/strategy_runner.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 direct-модуль ZapretGUI и много ходов подряд последовательно его приводили к одной модели: - один source preset как источник истины, - одна startup/runtime orchestration модель, - отдельные policy entrypoint’ы для content change и preset switch, - bridge’и между runner/controller/store/watchers, - и меньше локальной логики в UI.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 22 files changed, 643 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
🆕
✏️
✏️
✏️
🆕
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 direct-модуль ZapretGUI и много ходов подряд последовательно его приводили к одной модели: - один source preset как источник истины, - одна startup/runtime orchestration модель, - отдельные policy entrypoint’ы для content change и preset switch, - bridge’и между runner/controller/store/watchers, - и меньше локальной логики в UI.
👤 Автор: loop-uh
🔗 SHA:
4600eea📊 Статистика: 22 files changed, 643 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
🆕
src/core/presets/direct_runtime_events.py✏️
src/core/presets/support_files.py✏️
src/core/presets/v1_builtin_templates.py✏️
src/core/runtime/preset_runtime_coordinator.py🆕
src/dpi/direct_runtime_apply_policy.py✏️
src/dpi/dpi_controller.py🆕
src/dpi/runtime_preset_switch_policy.py✏️
src/dpi/zapret2_core_restart.py✏️
src/launcher_common/preset_runner_support.py✏️
src/main.py✏️
src/managers/initialization_manager.py✏️
src/ui/main_window.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py✏️
src/zapret1_launcher/strategy_runner.py✏️
src/zapret2_launcher/strategy_runner.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 при первом клике боковое меню вызывает show_page(), дальше идёт ensure_page(), и уже там в главном потоке сразу выполняются две дорогие вещи подряд: импорт Python- модуля страницы и создание всего дерева виджетов этой страницы. Это видно в связке public_zapretgui/src/ui/main_window.py:326 -> public_zapretgui/src/ui/main_window_pages.py:82 -> public_zapretgui/src/ui/main_window_pages.py:138. Для DPI Settings я отдельно промерил сам импорт модуля, и только он занял примерно 913 мс, ещё до полноценного показа страницы. То есть пользователь нажимает пункт меню, а приложение в этот же момент начинает “разворачивать” тяжёлый модуль страницы прямо в интерфейсном потоке. Что я поменял. После первого показа окна и завершения базовой сборки интерфейса я добавил отложенный прогрев страниц: приложение теперь не ждёт первого клика пользователя, а по очереди, в спокойном режиме, заранее импортирует тяжёлые модули страниц и прогревает самые неприятные экраны. Это сделано в public_zapretgui/src/ui/main_window.py:340 и public_zapretgui/src/ui/main_window_pages.py:18, public_zapretgui/src/ui/main_window_pages.py:119. Приоритет я дал тем страницам, на которых вы как раз замечаете лаги: DPI Settings, BlockCheck, Logs, Appearance, Servers, а затем уже остальным. Важно, что я не добавлял кривой обход вида “если долго, то открой старую ветку” и не возвращал legacy- путь. Логика открытия страниц осталась одной и той же, просто тяжёлая подготовка теперь выносится из момента клика пользователя в отложенный этап после старта окна. Проверка прошла нормально. Точечный тест на lazy-архитектуру страниц зелёный: python -m pytest private_zapretgui/tests/test_main_window_lazy_wiring.py -q, результат 18 passed. Ещё отдельно прогнал compileall по изменённым файлам, синтаксических ошибок нет. Для этого я добавил и новые тесты в private_zapretgui/tests/test_main_window_lazy_wiring.py:399, чтобы закрепить порядок прогрева тяжёлых страниц и убедиться, что импорт модулей не дублируется. Что было моей задачей и что сейчас происходит в проекте. Задача была понять, почему визуально “почти пустые” страницы открываются медленно, хотя интерфейс вроде бы не должен делать тяжёлую работу прямо на нажатии. По итогам разбора выяснилось, что реальный тормоз сидел в архитектуре lazy-страниц: ленивость была полезна для старта приложения, но плата за это переносилась на первый клик по странице. Сейчас проект устроен так: главное окно по-прежнему использует ленивый реестр страниц, но после старта оно дополнительно делает мягкий прогрев тяжёлых экранов, чтобы пользователь не ловил подвисание в момент навигации. Проще говоря, раньше тяжёлая подготовка происходила “когда вы уже нажали”, а теперь она уходит в отложенную фазу после показа основного окна. Если захотите, следующим шагом я могу по
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 137 insertions(+)
📁 Изменённые файлы:
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 при первом клике боковое меню вызывает show_page(), дальше идёт ensure_page(), и уже там в главном потоке сразу выполняются две дорогие вещи подряд: импорт Python- модуля страницы и создание всего дерева виджетов этой страницы. Это видно в связке public_zapretgui/src/ui/main_window.py:326 -> public_zapretgui/src/ui/main_window_pages.py:82 -> public_zapretgui/src/ui/main_window_pages.py:138. Для DPI Settings я отдельно промерил сам импорт модуля, и только он занял примерно 913 мс, ещё до полноценного показа страницы. То есть пользователь нажимает пункт меню, а приложение в этот же момент начинает “разворачивать” тяжёлый модуль страницы прямо в интерфейсном потоке. Что я поменял. После первого показа окна и завершения базовой сборки интерфейса я добавил отложенный прогрев страниц: приложение теперь не ждёт первого клика пользователя, а по очереди, в спокойном режиме, заранее импортирует тяжёлые модули страниц и прогревает самые неприятные экраны. Это сделано в public_zapretgui/src/ui/main_window.py:340 и public_zapretgui/src/ui/main_window_pages.py:18, public_zapretgui/src/ui/main_window_pages.py:119. Приоритет я дал тем страницам, на которых вы как раз замечаете лаги: DPI Settings, BlockCheck, Logs, Appearance, Servers, а затем уже остальным. Важно, что я не добавлял кривой обход вида “если долго, то открой старую ветку” и не возвращал legacy- путь. Логика открытия страниц осталась одной и той же, просто тяжёлая подготовка теперь выносится из момента клика пользователя в отложенный этап после старта окна. Проверка прошла нормально. Точечный тест на lazy-архитектуру страниц зелёный: python -m pytest private_zapretgui/tests/test_main_window_lazy_wiring.py -q, результат 18 passed. Ещё отдельно прогнал compileall по изменённым файлам, синтаксических ошибок нет. Для этого я добавил и новые тесты в private_zapretgui/tests/test_main_window_lazy_wiring.py:399, чтобы закрепить порядок прогрева тяжёлых страниц и убедиться, что импорт модулей не дублируется. Что было моей задачей и что сейчас происходит в проекте. Задача была понять, почему визуально “почти пустые” страницы открываются медленно, хотя интерфейс вроде бы не должен делать тяжёлую работу прямо на нажатии. По итогам разбора выяснилось, что реальный тормоз сидел в архитектуре lazy-страниц: ленивость была полезна для старта приложения, но плата за это переносилась на первый клик по странице. Сейчас проект устроен так: главное окно по-прежнему использует ленивый реестр страниц, но после старта оно дополнительно делает мягкий прогрев тяжёлых экранов, чтобы пользователь не ловил подвисание в момент навигации. Проще говоря, раньше тяжёлая подготовка происходила “когда вы уже нажали”, а теперь она уходит в отложенную фазу после показа основного окна. Если захотите, следующим шагом я могу по
👤 Автор: loop-uh
🔗 SHA:
bc1785f📊 Статистика: 2 files changed, 137 insertions(+)
📁 Изменённые файлы:
✏️
src/ui/main_window.py✏️
src/ui/main_window_pages.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 акетные lazy-экспорты сработали очень заметно: тот же ui.pages.zapret1 упал примерно с 1772 ms до 50 ms на грубом импорте. Сейчас дождусь итогового статуса тестов и потом сведу всё, что уже вырезано из старой архитектуры.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 42 files changed, 2068 insertions(+), 1755 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
🆕
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 акетные lazy-экспорты сработали очень заметно: тот же ui.pages.zapret1 упал примерно с 1772 ms до 50 ms на грубом импорте. Сейчас дождусь итогового статуса тестов и потом сведу всё, что уже вырезано из старой архитектуры.
👤 Автор: loop-uh
🔗 SHA:
8126884📊 Статистика: 42 files changed, 2068 insertions(+), 1755 deletions(-)
📁 Изменённые файлы:
✏️
src/main.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/main_window_pages.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/appearance_page.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/blockcheck_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/custom_ipset_page.py✏️
src/ui/pages/dns_check_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/ipset_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/netrogat_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/__init__.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/orchestra_zapret2/__init__.py✏️
src/ui/pages/premium_page.py✏️
src/ui/pages/servers_page.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/support_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/user_presets_runtime.py✏️
src/ui/pages/zapret1/__init__.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/strategy_detail_page_v1.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/__init__.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🆕
src/ui/widgets/win11_controls.py✏️
src/updater/__init__.py🆕
src/updater/server_status_workers.py🆕
src/updater/update_page_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:46:29
🔗 SHA:
📊 Статистика:
➕ Добавлено: 424 строк
➖ Удалено: 0 строк
📝 Всего изменений: 424
📁 Изменено файлов: 1
🆕
+424 -0
Добавилось:
... и еще 306 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:46:29
🔗 SHA:
466becf📊 Статистика:
➕ Добавлено: 424 строк
➖ Удалено: 0 строк
📝 Всего изменений: 424
📁 Изменено файлов: 1
🆕
VLESS-SOCKS5-vulnerability.md+424 -0
Добавилось:
# Критическая уязвимость VLESS-клиентов: неаутентифицированный SOCKS5 на localhost
**Дата публикации:** 7 апреля 2026
**Источник:** [runetfreedom — ntc.party](https://ntc.party/t/topic/), [Habr](https://habr.com/ru/...
**POC:** [github.com/runetfreedom/per-app-split-bypass-poc](https://github.com/runetfreedom/per-a...
**Severity:** Critical (массовая эксплуатация неизбежна)
---
## TL;DR
Все популярные VLESS/xray/sing-box клиенты создают на localhost SOCKS5-прокси **без аутентификаци...
---
## 1. Предпосылки
... и еще 306 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 424 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
🔗 SHA:
466becf📊 Статистика: 1 file changed, 424 insertions(+)
📁 Изменённые файлы:
🆕
VLESS-SOCKS5-vulnerability.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:54:52
🔗 SHA:
📊 Статистика:
➕ Добавлено: 788 строк
➖ Удалено: 0 строк
📝 Всего изменений: 788
📁 Изменено файлов: 1
🆕
+788 -0
Добавилось:
... и еще 609 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:54:52
🔗 SHA:
c74b423📊 Статистика:
➕ Добавлено: 788 строк
➖ Удалено: 0 строк
📝 Всего изменений: 788
📁 Изменено файлов: 1
🆕
Localhost-tracking-Meta-Yandex-SOCKS5.md+788 -0
Добавилось:
# Localhost-атака: как Meta, Яндекс и шпионское ПО эксплуатируют loopback-интерфейс
**Дата:** 7 апреля 2026
**Статус:** Верифицировано — исследование USENIX Security 26, POC опубликован
**Оригинал исследования:** [localmess.github.io](https://localmess.github.io/)
**Научная статья:** [Bridges to Self: Silent Web-to-App Tracking on Mobile via Localhost](https:/...
**POC (Meta/Яндекс):** [github.com/localmess/localhost-abuse](https://github.com/localmess/localh...
**POC (VLESS обход split tunneling):** [github.com/runetfreedom/per-app-split-bypass-poc](https:/...
---
## Оглавление
1. [Корневая проблема: архитектура loopback в ОС](#1-корневая-проблема-архитектура-loopback-в-ос)
... и еще 609 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 788 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
🔗 SHA:
c74b423📊 Статистика: 1 file changed, 788 insertions(+)
📁 Изменённые файлы:
🆕
Localhost-tracking-Meta-Yandex-SOCKS5.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:55:34
🔗 SHA:
📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 1 строк
📝 Всего изменений: 2
📁 Изменено файлов: 1
✏️
+1 -1
Удалилось:
Добавилось:
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:55:34
🔗 SHA:
4b0d7f1📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 1 строк
📝 Всего изменений: 2
📁 Изменено файлов: 1
✏️
VLESS-SOCKS5-vulnerability.md+1 -1
Удалилось:
Яндекс **уже использовал** подобную технику ранее (сканирование localhost для обнаружения прокси).
Добавилось:
Яндекс **уже использовал** подобную технику ранее ([[Localhost-tracking-Meta-Yandex-SOCKS5|сканир...
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 1 insertion(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
🔗 SHA:
4b0d7f1📊 Статистика: 1 file changed, 1 insertion(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
VLESS-SOCKS5-vulnerability.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 1114 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
🔗 SHA:
796e43d📊 Статистика: 1 file changed, 1114 insertions(+)
📁 Изменённые файлы:
🆕
VLESS-localhost-protection-guide.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:07:16
🔗 SHA:
📊 Статистика:
➕ Добавлено: 1114 строк
➖ Удалено: 0 строк
📝 Всего изменений: 1114
📁 Изменено файлов: 1
🆕
+1114 -0
Добавилось:
... и еще 890 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:07:16
🔗 SHA:
796e43d📊 Статистика:
➕ Добавлено: 1114 строк
➖ Удалено: 0 строк
📝 Всего изменений: 1114
📁 Изменено файлов: 1
🆕
VLESS-localhost-protection-guide.md+1114 -0
Добавилось:
# Практическое руководство: защита VPN от localhost-атаки
**Дата:** 7 апреля 2026
**Контекст:** Уязвимость VLESS-клиентов + эксплуатация localhost Meta/Яндексом
**Аудитория:** Пользователи VPN, администраторы серверов, разработчики клиентов
**Связанные заметки:**
- [Уязвимость VLESS-клиентов](VLESS-SOCKS5-vulnerability.md)
- [Localhost-трекинг Meta/Яндекс](Localhost-tracking-Meta-Yandex-SOCKS5.md)
---
## Оглавление
1. [Суть проблемы за 30 секунд](#1-суть-проблемы-за-30-секунд)
... и еще 890 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:14:04
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:14:04
🔗 SHA:
📊 Статистика:
➕ Добавлено: 445 строк
➖ Удалено: 29 строк
📝 Всего изменений: 474
📁 Изменено файлов: 2
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+444 -28
Удалилось:
... и еще 18 строк
Добавилось:
... и еще 344 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:14:04
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:14:04
🔗 SHA:
9f735b6📊 Статистика:
➕ Добавлено: 445 строк
➖ Удалено: 29 строк
📝 Всего изменений: 474
📁 Изменено файлов: 2
✏️
VLESS-SOCKS5-vulnerability.md+1 -1
Удалилось:
## 8. Защитные меры
Добавилось:
## 8. [[VLESS-localhost-protection-guide|Защитные меры]]
✏️
VLESS-localhost-protection-guide.md+444 -28
Удалилось:
14. [FAQ: hev-socks5-tunnel, Karing, Husi, v2rayN](#14-faq-hev-socks5-tunnel-karing-husi-v2rayn)
15. [CVE-2023-43644: обход аутентификации sing-box](#15-cve-2023-43644-обход-аутентификации-sing-...
16. [Чеклист действий](#16-чеклист-действий)
| Клиент | Ядро | SOCKS5 auth | UDP auth | Статус | Что делать |
|--------|------|-------------|----------|--------|------------|
| **v2rayNG** | xray (hev-socks5-tunnel) | ❌ Нет | ❌ | 🟡 Уязвим | Перейти на Husi/SFA или ждать ф...
| **Hiddify** | sing-box | ❌ Нет в UI | ❌ | 🟡 Уязвим | Перейти на Husi/SFA |
| **Neko Box** | sing-box | ❌ Нет | ❌ | 🟡 Уязвим | Перейти на Husi/SFA |
| **Npv Tunnel** | xray | ❌ Нет | ❌ | 🟡 Уязвим | Перейти на Husi/SFA |
| **Happ** | xray | ❌ Нет | ❌ | 🔴 **Удалить немедленно** | HandlerService = дамп ключей |
... и еще 18 строк
Добавилось:
14. [**ГАЙД: v2rayNG — как защититься**](#14-гайд-v2rayng--как-защититься)
15. [**ГАЙД: NekoBox — как защититься**](#15-гайд-nekobox--как-защититься)
16. [**ГАЙД: Clash/mihomo — как защититься**](#16-гайд-clashmihomo--как-защититься)
17. [Фаерволы на Android: что реально работает](#17-фаерволы-на-android-что-реально-работает)
18. [FAQ: hev-socks5-tunnel, Karing, Husi, v2rayN](#18-faq-hev-socks5-tunnel-karing-husi-v2rayn)
19. [CVE-2023-43644: обход аутентификации sing-box](#19-cve-2023-43644-обход-аутентификации-sing-...
20. [Чеклист действий](#20-чеклист-действий)
| Клиент | Ядро | Порт | SOCKS5 auth | Статус | Что делать |
|--------|------|------|-------------|--------|------------|
| **v2rayNG** 2.0.0 | xray | 10808 | ❌ Нет в UI. ⚠️ Custom config — ненадёжно (v2rayNG может пере...
... и еще 344 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:14:04
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 2 files changed, 445 insertions(+), 29 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:14:04
👤 Автор: fuckyou
🔗 SHA:
9f735b6📊 Статистика: 2 files changed, 445 insertions(+), 29 deletions(-)
📁 Изменённые файлы:
✏️
VLESS-SOCKS5-vulnerability.md\n✏️ VLESS-localhost-protection-guide.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 222 insertions(+), 13 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
🔗 SHA:
2a925b5📊 Статистика: 1 file changed, 222 insertions(+), 13 deletions(-)
📁 Изменённые файлы:
✏️
VLESS-localhost-protection-guide.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:47:31
🔗 SHA:
📊 Статистика:
➕ Добавлено: 222 строк
➖ Удалено: 13 строк
📝 Всего изменений: 235
📁 Изменено файлов: 1
✏️
+222 -13
Удалилось:
... и еще 3 строк
Добавилось:
... и еще 157 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 13:47:31
👤 Автор: fuckyou
📅 Дата: 07.04.2026 10:47:31
🔗 SHA:
2a925b5📊 Статистика:
➕ Добавлено: 222 строк
➖ Удалено: 13 строк
📝 Всего изменений: 235
📁 Изменено файлов: 1
✏️
VLESS-localhost-protection-guide.md+222 -13
Удалилось:
| **ClashMeta Android** 2.11.25 | mihomo | 7891 | ✅ Да (YAML). ⚠️ НО `skip-auth-prefixes` по дефо...
| **FlClash** | mihomo | 7891 | ✅ Да (YAML). ⚠️ Тот же дефолт `skip-auth-prefixes` | 🟡 Уязвим по ...
| **v2rayN** 7.19.5 | xray/sing-box | 10808 | ✅ Да (JSON + UI) | 🟢 Можно настроить | Включить aut...
| **Nekoray** | sing-box/xray | ? | ❌ Нет в UI | 🔴 **Заброшен (2026)** | Перейти на v2rayN / Clas...
| **Clash Verge Rev** | mihomo | 7890/7891 | ✅ Да (YAML). ⚠️ `skip-auth-prefixes` | 🟡 Уязвим по д...
| **ClashX Meta** (macOS) | mihomo | 7890/7891 | ✅ Да (YAML). ⚠️ `skip-auth-prefixes` | 🟡 Уязвим ...
| **Happ** | xray | ❌ + API без auth | 🔴 **УДАЛИТЬ** | Удалено из App Store, фикса не будет |
| **Shadowrocket** | — | ✅ **Не применимо** | 🟢 **Не уязвим** | Не создаёт SOCKS5-сервер на local...
"domain": ["geosite:category-gov-ru", "regexp:\\.ru$"],
## 16. Фаерволы на Android: что реально работает
... и еще 3 строк
Добавилось:
| **v2RayTun** 5.20.67 | xray | ? | ❌ Нет в UI. Разработчик обещал фикс (март 2026), пока нет | 🟡...
| **ClashMeta Android** 2.11.25 | mihomo | — | ✅ Да (YAML). По дефолту `socks-port` **выключен** ...
| **FlClash** | mihomo | — | ✅ Да (YAML). Аналогично — дефолт TUN-only | 🟢 **Безопасен по дефолту...
| **Incy** 2.0.8 | xray 26.3.27 | ? | ⚠️ Ядро поддерживает, UI-настройка auth не документирована ...
| **anet** 0.4.2 | Собственный (Rust/ASTP) | — | ✅ **Не применимо** | 🟢 **Не уязвим** | Нет SOCKS...
| **v2rayN** 7.20.2 | xray/sing-box | 10808 | ✅ Да (JSON + UI) | 🟢 Можно настроить | Включить aut...
| **Nekoray** | sing-box/xray | ? | ❌ Нет в UI | 🔴 **Заброшен (2026)** | Перейти на Throne / v2ra...
| **Throne** 1.1.1 (март 2026) | sing-box (основной) + xray (для VLESS) | 2080 | ⚠️ Дефолтный mix...
| **Karing** (Windows) | sing-box | 3067/3066 | ⚠️ Ядро поддерживает, UI-настройка не подтвержден...
| **Clash Verge Rev** | mihomo | — | ✅ Да (YAML). По дефолту TUN-only, `socks-port` выключен | 🟢 ...
... и еще 157 строк
🔗 Открыть на GitHub