mirror of
https://github.com/by-sonic/tglock.git
synced 2026-07-31 15:55:11 +03:00
docs(readme): объяснить срабатывания антивируса и зафиксировать отказ от подписи (#30)
Претензия про VirusTotal всплывала в обсуждениях и не была нигде объяснена. Отмахнуться «это ложное срабатывание» нельзя: движок реагирует на реальное поведение программы. Поэтому в README добавлен раздел, который объясняет механизм и даёт способы проверить, не доверяя автору на слово. Что написано: - что увидит пользователь: SmartScreen на Windows, детекты у части движков на VirusTotal; - почему: неподписанный файл проверяется эвристиками строже, а поведение — открыть локальный порт, объявить себя прокси и прописаться в настройки Telegram — совпадает с профилем прокси-троянов. Программа делает именно это, только по просьбе пользователя, и автоматически отличить одно от другого движок не может; - что подписи не будет: сертификат это ежегодный платёж, проект бесплатный. Формулировка прямая, без «скоро подпишем»; - три проверяемых пути: сверка sha256 с digest, который GitHub публикует на странице релиза (с командами под три ОС), открытый лог сборки в Actions с указанием конкретного run и коммита, сборка из исходников одной командой; - если этого недостаточно — не запускать, и это названо нормальным решением, а не паранойей, со ссылкой на альтернативу. Конкретные числа детектов не приводятся: они меняются от сборки к сборке и со временем, обещать «4 из 59» значит закладывать в документацию то, что устареет. Соответствующие пункты обновлены в ARCHITECTURE_V2.md (Current limitations) и в статусе ISSUE_AUDIT.md — там это было записано как открытый вопрос, требующий покупки сертификата, теперь как принятое решение. Co-authored-by: by-sonic <171230345+by-sonic@users.noreply.github.com>
This commit is contained in:
@@ -92,6 +92,43 @@ TGLock — это **локальный прокси** на твоём компь
|
|||||||
|
|
||||||
> **🖥 `tglock-cli`** — тот же туннель без графического интерфейса, одним бинарём. Нужен там, где окно не создаётся: сервер, контейнер, виртуалка, машина без монитора. Доступен начиная с `v2.0.0-beta.2`. Подробности — [ниже](#-без-графического-интерфейса-tglock-cli).
|
> **🖥 `tglock-cli`** — тот же туннель без графического интерфейса, одним бинарём. Нужен там, где окно не создаётся: сервер, контейнер, виртуалка, машина без монитора. Доступен начиная с `v2.0.0-beta.2`. Подробности — [ниже](#-без-графического-интерфейса-tglock-cli).
|
||||||
|
|
||||||
|
### 🛡 Антивирус ругается, SmartScreen предупреждает, VirusTotal показывает детекты
|
||||||
|
|
||||||
|
Так и будет. Объясню механизм и дам способы проверить, не доверяя мне на слово.
|
||||||
|
|
||||||
|
**Что ты увидишь.** На Windows — «Система Windows защитила ваш компьютер» от SmartScreen. На VirusTotal — детекты у части движков, обычно единицы из примерно шестидесяти.
|
||||||
|
|
||||||
|
**Почему.** Складываются две вещи. Установщик не подписан сертификатом, а неподписанные файлы проверяются эвристиками гораздо строже, чем подписанные. И само поведение программы — открыть локальный порт, объявить себя прокси-сервером, прописаться в настройки соединения Telegram — это ровно тот профиль, по которому эвристики ищут прокси-трояны. Программа делает именно это, только по твоей просьбе. Отличить одно от другого автоматически движок не может, поэтому и реагирует.
|
||||||
|
|
||||||
|
**Подписи не будет.** Сертификат — это ежегодный платёж, а проект бесплатный и ничего не зарабатывает. Значит предупреждение останется, и делать вид, что «скоро подпишем», я не буду.
|
||||||
|
|
||||||
|
**Как проверить вместо доверия.** Три способа, все не требуют верить мне:
|
||||||
|
|
||||||
|
1. **Сверить контрольную сумму.** GitHub публикует `sha256` каждого файла прямо на [странице релиза](https://github.com/by-sonic/tglock/releases/latest) — разверни `Assets` и увидишь digest рядом с именем. Сравни с тем, что скачалось:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Get-FileHash .\TGLock_2.0.0-beta.2_x64-setup.exe -Algorithm SHA256
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sha256sum tglock-cli-x86_64-unknown-linux-gnu # Linux
|
||||||
|
shasum -a 256 tglock-cli-universal-apple-darwin # macOS
|
||||||
|
```
|
||||||
|
|
||||||
|
Это доказывает, что файл не подменили по пути к тебе.
|
||||||
|
|
||||||
|
2. **Посмотреть, как файл собирался.** Бинарники собирает GitHub Actions из публичного коммита, лог открыт и его никто не может отредактировать задним числом. Сборка релиза `v2.0.0-beta.2` — [run 30535555083](https://github.com/by-sonic/tglock/actions/runs/30535555083), коммит `b062724`. Видно, какой исходник взят и какими командами собран.
|
||||||
|
|
||||||
|
3. **Собрать самому.** Для CLI это одна команда и никаких зависимостей кроме Rust:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo build --release --locked --no-default-features --bin tglock-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
Полная сборка с интерфейсом — [ниже](#-сборка-из-исходников).
|
||||||
|
|
||||||
|
**Если этого недостаточно — не запускай.** Это нормальное решение, а не паранойя: исполняемый файл из интернета без подписи заслуживает недоверия по умолчанию. Собери из исходников или возьми [tg-ws-proxy](https://github.com/Flowseal/tg-ws-proxy) — он решает ту же задачу и тоже открыт.
|
||||||
|
|
||||||
> **🍎 macOS:** пока сборка не нотарифицирована Apple, при первом запуске может понадобиться:
|
> **🍎 macOS:** пока сборка не нотарифицирована Apple, при первом запуске может понадобиться:
|
||||||
> ```bash
|
> ```bash
|
||||||
> xattr -cr /Applications/TGLock.app
|
> xattr -cr /Applications/TGLock.app
|
||||||
|
|||||||
@@ -118,10 +118,14 @@ Worker должен принимать WebSocket на:
|
|||||||
заданные оператором значения не перезаписываются, а `TGLOCK_FORCE_GPU=1`
|
заданные оператором значения не перезаписываются, а `TGLOCK_FORCE_GPU=1`
|
||||||
возвращает аппаратное ускорение. Для машин без монитора остаётся
|
возвращает аппаратное ускорение. Для машин без монитора остаётся
|
||||||
`tglock-cli`, которому WebView не нужен вовсе (issues #10, #17).
|
`tglock-cli`, которому WebView не нужен вовсе (issues #10, #17).
|
||||||
- Windows-инсталлятор не подписан, macOS-сборка не нотарифицирована. Часть
|
- Windows-инсталлятор не подписан, macOS-сборка не нотарифицирована, и
|
||||||
антивирусов реагирует на неподписанный установщик, открывающий локальный
|
подписывать их не планируется: сертификат — ежегодный платёж, а проект
|
||||||
сокет; проверяемый ответ — сборка из исходников либо публичные логи
|
бесплатный. Часть антивирусов будет реагировать на неподписанный установщик,
|
||||||
GitHub Actions.
|
который открывает локальный сокет и прописывается прокси-сервером — это тот
|
||||||
|
же профиль, по которому ищут прокси-трояны. Вместо доверия предлагаются
|
||||||
|
проверяемые пути: `sha256` каждого артефакта публикуется GitHub на странице
|
||||||
|
релиза, сборка идёт в GitHub Actions из публичного коммита с открытым логом,
|
||||||
|
CLI собирается одной командой. Подробно — в разделе README про антивирус.
|
||||||
- Работоспособность медиа зависит от конкретного DC аккаунта и доступности
|
- Работоспособность медиа зависит от конкретного DC аккаунта и доступности
|
||||||
Telegram/Cloudflare у провайдера.
|
Telegram/Cloudflare у провайдера.
|
||||||
- Пулы заранее открытых WebSocket-соединений будут добавлены после измерения,
|
- Пулы заранее открытых WebSocket-соединений будут добавлены после измерения,
|
||||||
|
|||||||
+6
-3
@@ -23,9 +23,12 @@
|
|||||||
> `v2.0.0-beta.2` она пересобрана универсальным `.dmg`.
|
> `v2.0.0-beta.2` она пересобрана универсальным `.dmg`.
|
||||||
> - #9 (Android) остаётся единственным открытым — backlog без сроков.
|
> - #9 (Android) остаётся единственным открытым — backlog без сроков.
|
||||||
>
|
>
|
||||||
> Единственная претензия из публичного обсуждения, которую нельзя закрыть
|
> Претензия из публичного обсуждения, которую нельзя закрыть кодом: инсталлятор
|
||||||
> кодом: инсталлятор не подписан, из-за чего часть антивирусов на него
|
> не подписан, из-за чего часть антивирусов на него реагирует. Решение принято
|
||||||
> реагирует. Требует покупки сертификата.
|
> и зафиксировано: подписи не будет, сертификат — ежегодный платёж, а проект
|
||||||
|
> бесплатный. Вместо неё в README описан механизм срабатывания и три
|
||||||
|
> проверяемых пути — сверка `sha256` с публикуемым GitHub digest, открытый лог
|
||||||
|
> сборки в Actions и сборка из исходников одной командой.
|
||||||
>
|
>
|
||||||
> Дополнительно исправлено то, чего в issues не было: коллизия MTProto-init с
|
> Дополнительно исправлено то, чего в issues не было: коллизия MTProto-init с
|
||||||
> байтом `0x05` (одно соединение из 256 уходило в SOCKS5-ветку и умирало),
|
> байтом `0x05` (одно соединение из 256 уходило в SOCKS5-ветку и умирало),
|
||||||
|
|||||||
Reference in New Issue
Block a user