FOG Prime: локальный помощник для стабильной работы Discord и YouTube в Windows

от автора

FOG Prime на GitHub

FOG Prime на GitHub

Когда Discord внезапно теряет голосовую связь, а YouTube открывается через раз, пользователю обычно предлагают длинную инструкцию: проверить DNS, перебрать параметры, запустить несколько скриптов и каким-то образом не запутаться в результатах. FOG Prime предлагает другой подход — превратить всю эту механику в локальное Windows-приложение с понятным сценарием: проверить систему, автоматически настроить соединение и убедиться, что доступ действительно работает.

Проект интересен не только как готовая утилита. Внутри это аккуратно разделённая система из графического интерфейса, фонового агента и сетевого движка. Интерфейс не знает низкоуровневых аргументов запуска, агент не принимает произвольные команды, а файлы runtime проверяются по SHA-256 перед стартом. Получается хороший пример того, как можно завернуть сложную сетевую логику в относительно спокойный пользовательский опыт.

Что такое FOG Prime

FOG Prime — локальное приложение для Windows 10 и Windows 11 x64, предназначенное для автоматического подбора и проверки ограниченного набора сетевых профилей для Discord и YouTube. Оно работает без обязательного аккаунта, отдельного сервера управления и встроенной телеметрии.

Для пользователя процесс выглядит максимально просто:

  1. приложение проверяет Windows, WebView2, права администратора и наличие необходимых компонентов;

  2. агент последовательно запускает разрешённые сетевые профили;

  3. после каждого запуска выполняются проверки DNS, Discord Gateway, API, CDN и YouTube;

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

Смысл здесь именно в автоматизации. Пользователю не нужно выбирать десятки параметров и разбираться, чем TLS отличается от QUIC. При этом проект не превращается в непрозрачную «чёрную коробку»: профили лежат в репозитории, исходный код движка закреплён на конкретной ревизии, а сборочные сценарии доступны для проверки.

Архитектура: три компонента вместо одного монолита

В решении используются .NET 8, WPF и Microsoft WebView2. Оно разделено на три основных проекта: FOG.Protocol, FOG.Agent и FOG.WebView2. Низкоуровневый FOG Engine собирается отдельно из закреплённого upstream-кода.

flowchart TD    UI["FOG Prime.exe<br/>WPF + WebView2"]    IPC["Локальный named pipe<br/>фиксированные команды"]    AG["FOG.Agent.exe<br/>профили, health-check, recovery"]    EN["FOG.Engine.exe + WinDivert<br/>сетевая обработка"]    UI --> IPC --> AG --> EN

Интерфейс

FOG Prime.exe — компактная WPF-оболочка со встроенной HTML-страницей в WebView2. Визуально приложение строится вокруг трёх этапов: «Система», «Соединение» и «Доступ». Белый фон, чёрная типографика и яркий розовый акцент делают интерфейс похожим скорее на небольшой законченный продукт, чем на техническую панель управления.

HTML входит в сборку как embedded resource, поэтому интерфейс не загружается с удалённого сайта. Контекстные меню и DevTools WebView2 отключены, а обмен с .NET-частью ограничен несколькими сообщениями вроде ready, runPrime и close.

Важно, что UI не запускает движок напрямую и не собирает командную строку. Его задача — провести локальную диагностику, попросить агента начать или повторить проверку и визуализировать полученный результат.

Агент

FOG.Agent.exe — центральная часть проекта. Это .NET Worker, который может работать как Windows-служба. Он отвечает за:

  • чтение каталога разрешённых профилей;

  • проверку целостности runtime;

  • запуск и остановку движка;

  • автоматический выбор рабочего профиля;

  • периодические проверки соединения;

  • восстановление движка после неожиданного завершения;

  • сохранение последнего состояния в %ProgramData%\\FOG Prime\\state.json.

UI и агент общаются через локальный именованный канал. В текущем протоколе используется fog-prime-agent-v2, при этом в коде оставлено имя канала предыдущей версии для совместимости. Протокол передаёт JSON-запросы и ответы с correlation ID, состоянием движка, активным профилем и результатами сетевых проб.

Это важная архитектурная граница. Вместо возможности передать агенту произвольный путь к программе или набор аргументов интерфейс работает с небольшим фиксированным набором действий: получить статус, запустить автоматическую настройку, остановить, повторно проверить или корректно завершить агент. Для привилегированного процесса такая ограниченность — скорее преимущество, чем недостаток.

Сетевой движок

FOG.Engine.exe основан на Windows-цели nfq/winws проекта bol-van/zapret и работает вместе с WinDivert. В репозитории закреплены конкретные upstream-ревизии, а release-сборка компилирует движок из исходников вместо скачивания случайного готового бинарника.

В собственный набор патчей FOG входит синхронизация SSRC для пакетов Discord Voice IP Discovery. Если говорить проще, движок учитывает актуальный идентификатор голосовой сессии, чтобы ответ сервера не был отброшен Discord как NO_ROUTE. При этом динамическая замена ограничена именно подходящими Discord-пакетами: посторонние QUIC-приманки должны оставаться неизменными.

Как выбирается рабочий профиль

В profiles.json описаны несколько профилей с приоритетами и заранее заданными аргументами для FOG Engine. Они охватывают TCP- и UDP-трафик Discord и YouTube, включая HTTPS, QUIC, Discord Voice и STUN. В профилях используются разные варианты десинхронизации, поддельные QUIC/TLS-пакеты и разбиение трафика.

Алгоритм агента достаточно прямолинеен:

  1. проверить SHA-256 файлов runtime;

  2. остановить оставшиеся процессы FOG Engine;

  3. взять профили по возрастанию приоритета;

  4. запустить очередной профиль без shell-оболочки через ProcessStartInfo.ArgumentList;

  5. подождать несколько секунд и выполнить сетевые пробы;

  6. оставить первый профиль, для которого все проверки завершились успешно.

Если идеального результата нет, агент возвращается к первому профилю и помечает состояние как degraded. Это разумнее, чем бесконечно перебирать конфигурации: у интерфейса появляется определённый результат, а пользователь может повторить проверку.

Сам движок запускается только из доверенной папки runtime. Агент нормализует полный путь и убеждается, что исполняемый файл не оказался за пределами этой директории. cmd.exe, PowerShell и .bat для запуска профиля не используются.

Немного о сети: почему «интернет работает» — слишком общий диагноз

Когда браузер открывает поисковик, это ещё не означает, что все функции Discord или YouTube будут работать одинаково хорошо. Современное приложение использует сразу несколько сетевых механизмов: DNS для поиска адреса сервера, TCP и TLS для защищённых запросов, WebSocket для постоянного обмена событиями, CDN для изображений и файлов, QUIC для быстрой передачи данных и UDP для чувствительного к задержкам голосового трафика.

Упрощённо соединение устанавливается по цепочке:

  1. DNS преобразует доменное имя вроде discord.com в IP-адрес. Если этот этап не работает, приложение даже не знает, куда подключаться.

  2. TCP-соединение с портом 443 подтверждает базовую достижимость Discord Gateway.

  3. TLS и HTTPS защищают запросы к API, веб-интерфейсу и CDN. Успешный ответ API означает, что управляющая часть доступна, но ещё ничего не говорит о голосовом UDP.

  4. Gateway/WebSocket поддерживает длительное двустороннее соединение, через которое Discord передаёт события приложения.

  5. Голосовой канал использует отдельный сценарий согласования и UDP-трафик. Здесь важны не только достижимость адреса, но и прохождение пакетов через NAT, фильтрацию и сетевую обработку.

  6. YouTube может использовать HTTPS поверх TCP или QUIC поверх UDP 443, поэтому поведение видео тоже не всегда совпадает с поведением обычной веб-страницы.

Именно поэтому возможна знакомая ситуация: текстовые каналы загружаются, аватары видны, но при входе в голосовой канал соединение зависает на RTC Connecting или заканчивается ошибкой маршрута. Веб-интерфейс, CDN и голос обслуживаются разными сетевыми путями.

Профили FOG Prime учитывают это разделение. В них отдельно описаны фильтры для TCP-портов, QUIC на UDP 443, диапазонов голосового UDP и трафика Discord/STUN. Для голосового IP Discovery в движок внесена синхронизация SSRC — идентификатора источника в медиапотоке. Она помогает Discord принять ответ сервера как относящийся к текущему запросу, а не отклонить его как некорректный маршрут.

Полезно различать и симптомы неполадок:

Симптом

Возможный сетевой уровень

Что проверяет FOG Prime

Discord совсем не открывается

DNS, TCP или HTTPS

DNS для discord.com, TCP к Gateway, запрос к API

Интерфейс работает, но не грузятся вложения

CDN или отдельный домен

доступность cdn.discordapp.com

Текст работает, а голос не подключается

UDP, NAT, Discord Voice/IP Discovery

профиль с голосовыми диапазонами и обработкой Discord/STUN

YouTube открывается, но видео нестабильно

HTTPS/QUIC, CDN видеопотока

контрольный запрос generate_204 и профиль для YouTube-доменов

После запуска всё работало, затем движок остановился

локальный процесс

фоновый recovery агента

Здесь важно не переоценивать диагностику. Проверка публичных адресов показывает достижимость ключевой инфраструктуры, однако не воспроизводит полностью авторизованный звонок конкретного пользователя, маршрутизацию до выбранного voice-сервера и реальную передачу аудио. Поэтому зелёный health-check — сильный индикатор исправности, но не математическая гарантия любой сессии.

Что именно проверяет приложение

Проверка не ограничивается попыткой открыть главную страницу Discord. ConnectionHealthChecker параллельно выполняет несколько разных проб:

Проверка

Что она показывает

DNS для discord.com

Работает ли разрешение доменного имени

TCP к gateway.discord.gg:443

Доступен ли основной шлюз Discord

discord.com/api/v10/gateway

Отвечает ли Discord API

cdn.discordapp.com

Доступна ли инфраструктура раздачи контента

youtube.com/generate_204

Проходит ли короткая проверка доступа к YouTube

Для каждой пробы агент сохраняет результат, задержку в миллисекундах и короткую техническую деталь — например HTTP-код или тип исключения. Интерфейс получает уже структурированный снимок состояния, а не пытается интерпретировать консольный вывод движка.

Фоновый worker повторяет проверку примерно раз в 20 секунд. Если движок должен работать, но процесс завершился, агент пытается запустить его заново. Для установленной Windows-службы дополнительно предусмотрен автоматический старт и несколько попыток восстановления после сбоя.

Безопасность и приватность

Для приложения, работающего на сетевом уровне и требующего административных прав, модель доверия особенно важна. В FOG Prime есть несколько заметных защитных решений:

  • каждый файл runtime сверяется с runtime.manifest.json по SHA-256;

  • исполняемый файл должен находиться внутри доверенной runtime-директории;

  • аргументы берутся из локального каталога профилей, а не приходят из UI;

  • движок запускается напрямую, без командной оболочки;

  • приложение не требует удалённого сервера управления;

  • проект заявляет об отсутствии намеренного сбора аналитики, идентификаторов, истории просмотра, содержимого сообщений и данных Discord.

Манифест в исходном проекте служит заготовкой, а доверенные хеши добавляются при подготовке release-runtime. После упаковки репозиторий и получившийся пакет дополнительно проверяются PowerShell-сценарием.

Разумеется, «локально» не означает «вообще без сетевых обращений»: health-check связывается с публичными адресами Discord и YouTube. Кроме того, Windows, WebView2, Discord, GitHub, антивирус и интернет-провайдер работают по собственным политикам приватности. Авторы отдельно просят не прикладывать к публичным issue необработанные логи, IP-адреса, токены и приватные домены.

Сборка и воспроизводимость

.NET-часть проекта собирается стандартными командами:

dotnet restore .\\FOG.Prime.sln --locked-modedotnet build .\\FOG.Prime.sln -c Release --no-restore.\\build\\verify-repository.ps1 -SkipBuild

Для полной сборки в Windows понадобятся .NET SDK 8, PowerShell и Cygwin x64 с gcc-core, make и zlib-devel. Через Cygwin компилируется FOG Engine, после чего отдельный сценарий подготавливает runtime, формирует манифест и собирает итоговый ZIP.

CI работает на windows-latest: восстанавливает зависимости в locked mode, собирает solution, проверяет структуру репозитория и отдельно парсит PowerShell-скрипты. Release workflow запускается для тегов v*, собирает движок из исходников, проверяет пакет, создаёт ZIP и файл SHA-256, а затем публикует GitHub Release.

Такой процесс не делает supply chain абсолютно неуязвимым, но заметно повышает проверяемость результата. Можно увидеть версии зависимостей, upstream-коммиты, последовательность сборки и контрольную сумму опубликованного архива.

Установка и требования

Для запуска нужны:

  • Windows 10 или Windows 11 x64;

  • Microsoft Edge WebView2 Runtime;

  • права администратора;

  • доступная системная служба Base Filtering Engine.

Готовую сборку следует брать только на официальной странице Releases. Архив FOG-Prime-<version>-win-x64.zip нужно распаковать в отдельную папку и запустить FOG Prime.exe. Отдельные файлы из каталога runtime вручную запускать не следует.

Административные права здесь нужны не «на всякий случай»: WinDivert работает на сетевом уровне Windows. Это одновременно даёт приложению необходимые возможности и означает, что к источнику сборки стоит относиться внимательно.

Кому проект может быть интересен

В первую очередь FOG Prime рассчитан на пользователей Windows, которым нужен понятный способ автоматически проверить и настроить доступ к Discord, включая голосовую связь, и YouTube. Вместо набора разрозненных скриптов они получают один интерфейс и диагностируемое состояние.

Но репозиторий может быть полезен и разработчикам. Здесь есть несколько удачных инженерных идей: отделение непривилегированного UI от системного агента, узкий IPC-протокол, каталог разрешённых конфигураций, контроль целостности, автоматические health-check и воспроизводимая сборка стороннего движка.

Проект пока остаётся компактным, и это скорее идёт ему на пользу: архитектуру можно охватить целиком, не пробираясь через десятки сервисов и абстракций. При этом уже присутствуют CI, release automation, политика безопасности, документация по приватности, third-party notices и инструкции для контрибьюторов.

Итог

FOG Prime решает неприятную сетевую задачу в правильном для обычного пользователя направлении: прячет перебор технических параметров, но не отказывается от прозрачности и проверяемости. Снаружи — три понятных шага и один статус. Внутри — .NET-агент, именованный канал, профили сетевой обработки, проверки DNS/TCP/HTTP, WinDivert и сборка движка из закреплённого исходного кода.

Это не магическая кнопка, способная исправить любую сеть, и не универсальное кроссплатформенное решение. Но как Windows-инструмент с чёткой областью применения и продуманным разделением ответственности FOG Prime выглядит убедительно.

Репозиторий проекта: github.com/DenisRapira/FOG-Prime

Скачать последнюю версию: GitHub Releases

Лицензия: MIT для кода FOG Prime; сторонние компоненты распространяются на условиях собственных лицензий, указанных в THIRD_PARTY_NOTICES.md.

ссылка на оригинал статьи https://habr.com/ru/articles/1060418/