- C++ 95.6%
- Python 2.3%
- Objective-C++ 0.7%
- CMake 0.6%
- CSS 0.2%
- Other 0.4%
| .claude | ||
| .codex/skills/tdesktop-local-release | ||
| .github | ||
| cmake@2b73962997 | ||
| docs | ||
| lib/xdg | ||
| snap | ||
| Telegram | ||
| .cursorignore | ||
| .devcontainer.json | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| changelog.txt | ||
| CMakeLists.txt | ||
| LEGAL | ||
| LICENSE | ||
| README.md | ||
| REVIEW.md | ||
ZaStoGram Desktop
ZaStoGram — форк Telegram Desktop, заточенный под работу в сетях с DPI‑цензурой и под приватность. Цель проекта: чтобы клиент уверенно подключался там, где обычный Telegram режут, маскировал трафик под обычный браузерный HTTPS и не терял переписку (удалённые сообщения, истории, правки).
Это неофициальная сборка. Она основана на исходниках официального клиента и сохраняет весь его функционал, добавляя сверху сетевой стелс, WSS‑транспорт и набор приватных функций.
⚠️ Используйте на свой риск. Проект не связан с Telegram FZ‑LLC. Базовый код — под GPLv3 с OpenSSL‑исключением (см. раздел «Лицензия»).
Чем отличается от обычного Telegram Desktop
| Область | Что добавлено |
|---|---|
| Обход DPI | FakeTLS‑стелс: профили ClientHello, правдоподобные повторные TLS‑подключения через поддельные билеты возобновления, маскировка старта, фрагментация ClientHello, варьирование размера TLS‑записей, пейсинг трафика, разнос попыток подключения |
| Надёжность | Классифицированный loop‑backoff переподключения (cap 8 c), деприоритизация «залипших» endpoint'ов (cooldown) |
| Транспорт | Встроенный WSS (MTProto поверх WebSocket к web‑релею Telegram) |
| Прокси | Обязательный прокси (force‑proxy) + дефолтный локальный SOCKS5 127.0.0.1:1353 |
| Приватность | Сохранение удалённых сообщений и историй (stories), скачивание любых (даже защищённых) историй, история правок сообщений |
| Производительность | Ограничение числа потоков софт‑декодера видео, троттлинг под нагрузкой |
| UX | Список прокси больше не устраивает «шквал» проверок при открытии |
| Бренд | Имя и иконка ZaStoGram |
🛡️ Обход DPI — стелс MTProxy
Когда задан MTProxy (FakeTLS), клиент маскирует подключение под настоящий браузерный TLS‑хэндшейк. Всё настраивается тумблерами в окне прокси (Настройки → Продвинутые → Тип соединения → список прокси).
- Профиль ClientHello — ClientHello воспроизводит форму реального браузера/приложения:
Auto (Chrome),Auto‑rotate,Chrome Modern,Android Chrome,Firefox,Firefox Android,Yandex,Android OkHttp. - Маскировка старта (startup‑cover) — первые записи разбиваются и подаются так, чтобы начало сессии не выделялось характерным паттерном.
- Фрагментация ClientHello — ClientHello дробится при отправке, чтобы DPI было сложнее собрать и распознать его целиком.
- Варьирование размера TLS‑записей — размеры записей не фиксированы, что ломает сигнатуры по длине.
- Пейсинг трафика — межзаписевые задержки на старте сглаживают «взрывной» профиль (без удушения уже установленного потока).
- Разнос попыток подключения — попытки к нескольким endpoint'ам и одиночный FakeTLS ClientHello стартуют со сдвигом, а не пачкой.
- Правдоподобные повторные TLS‑подключения — первый ClientHello к узлу и имени назначения идёт без PSK, как обычный «холодный» заход браузера. После успешного fakeTLS‑хэндшейка клиент держит небольшой локальный пул поддельных билетов возобновления с ограниченным временем жизни и при повторных подключениях отправляет один из них с нормальным возрастом. Это убирает подозрительный паттерн «каждый параллельный сокет приносит новый случайный PSK» и делает повторные подключения похожими на обычный браузерный HTTPS. Эти билеты нужны только для маскировки, не используются для шифрования MTProto и не сохраняются на диск.
Надёжность подключения
- Loop‑backoff — классифицированные таймауты переповтора, привязанные к прокси, с верхней границей, чтобы не зацикливаться на мёртвом узле и не спамить коннектами.
- Endpoint cooldown — endpoint, который только что отвалился, временно понижается в приоритете (а не выбрасывается), чтобы клиент пробовал живые маршруты, не теряя резервные.
🌐 WSS‑транспорт
Встроенный MTProto‑over‑WebSocket (чистая реализация на QSslSocket + RFC 6455): настоящий TLS → HTTP‑upgrade (GET /apiws) → бинарные WS‑фреймы, внутри которых идёт обфусцированный MTProto‑поток. Подключается к официальным web‑релеям Telegram (kws2/kws4.web.telegram.org) для DC2/DC4.
Включается тумблером «Route via WSS (web, DC2/DC4 only)». Полезен там, где прямой TCP к DC блокируется, но веб‑Telegram работает. Может ходить как напрямую, так и через заданный SOCKS‑прокси.
Альтернатива встроенному WSS — внешний локальный прокси (telegram_proxy из zapret‑набора) на 127.0.0.1:1353, к которому клиент подключается по SOCKS5 (см. ниже).
🔌 Прокси: обязательный + дефолтный
- Force‑proxy — без выбранного прокси клиент не выходит в сеть; «щит» соединения виден всегда. Исключение — включённый режим WSS (он сам является методом обхода). Это страховка от случайного прямого подключения в опасной сети.
- Дефолтный SOCKS5
127.0.0.1:1353— добавляется в список один раз (если такого ещё нет; существующие прокси не перетираются). Это endpoint внешнего сервисаtelegram_proxy: схемаtdesktop → SOCKS5 1353 → telegram_proxy → WSS/FakeTLS → Telegram.
🔒 Приватность
Клиент‑сайд функции, которые сохраняют данные локально (по умолчанию включены):
- Сохранение удалённых сообщений — когда сервер присылает «удалить», сообщение не уничтожается локально, а остаётся (помечается как удалённое отправителем). Переписка не пропадает.
- Сохранение историй (stories) — локальный снэпшот историй с восстановлением при старте; истории не исчезают по истечении срока.
- Скачивание любых историй — медиа истории сохраняется на диск даже для защищённых от пересылки (noforwards) и чужих историй, без Premium (снят клиентский гейт canDownload).
- История правок — при редактировании сообщения предыдущие версии (текст + время) сохраняются, чтобы видеть, что было изменено.
Это локальные функции: они не влияют на сервер и не нарушают шифрование. Хранение части данных может быть только в памяти до перезапуска (персистентность отдельных частей — в развитии).
⚡ Производительность
- Decoder policy — централизованное ограничение числа потоков софтверного видео‑декодера и троттлинг запуска декодеров под нагрузкой, чтобы тяжёлые медиа не «съедали» CPU и не плодили лишние декодеры.
🧰 Спокойная архитектура прокси
- Список прокси не запускает проверку всех строк при открытии окна — это убирает «шквал» одновременных тестовых коннектов. Строки по умолчанию в состоянии Unknown; проверка запускается вручную по пункту Check Status.
🗺️ Roadmap (запланировано, ещё не реализовано)
- Глобальный лимитер MTProxy‑handshakes — в текущем Desktop каждый аккаунт держит свой
MTP::Instanceсо своей DC‑сессией (разные auth keys, msg_id/seqno, salt), поэтому «один общий поток» для всех аккаунтов сделать нельзя без серверной поддержки. Вместо этого планируется безопасный лимитер: общий cap на число одновременных MTProxy‑handshakes между аккаунтами + jitter/backoff + очередь; снижение числа активных проверок ротации (10 → 1–2); кэширование статусов прокси; единый gate для всехStartProxyCheckи рабочих handshakes. Это сгладит всплеск подключений, не душа уже установленный трафик. - UI приватности — видимая метка «удалено» на сохранённых сообщениях и просмотрщик истории правок (контекст‑меню).
🏗️ Сборка и CI
- Сборка идёт через GitHub Actions (
.github/workflows/win.yml): только Windows, конфигурацииx64иx64_x86(Qt5). После каждого пуша автоматически публикуется пре‑релизdev-Nс готовыми.exe. - Зависимости (Qt, Libraries, ThirdParty) кэшируются между запусками.
- Инструкции по ручной сборке официального клиента (применимы и здесь) — в
docs/.
Базовый клиент собирается стандартным тулчейном Telegram Desktop. Артефакты пре‑релиза переименовываются в
ZaStoGram-<arch>.exe.
📥 Установка
Скачайте ZaStoGram-x64.exe (или x64_x86 для 32‑бит) из раздела Releases (пре‑релиз dev-N). Это сборка из исходников этого репозитория. Для работы дефолтного прокси 127.0.0.1:1353 нужен запущенный внешний сервис telegram_proxy, либо включите встроенный WSS‑транспорт.
📄 Лицензия
Проект основан на Telegram Desktop и распространяется под GPLv3 с OpenSSL‑исключением — тот же текст лицензии, что и у апстрима, см. LICENSE и LEGAL.
ZaStoGram — независимый форк; товарные знаки Telegram принадлежат их владельцам.