Keep dist/navis-release/ path and ship Navis.exe as a same-hash alias of EvilFox.exe so 3.x clients can still update from the Windows branch feed.
379 lines
17 KiB
Markdown
379 lines
17 KiB
Markdown
# EvilFox
|
||
|
||
Клиент [NaiveProxy](https://github.com/klzgrad/naiveproxy) + [Hysteria 2](https://github.com/apernet/hysteria) + [AmneziaWG 2.0](https://docs.amnezia.org/documentation/amnezia-wg/) + [Xray](https://github.com/XTLS/Xray-core) (VLESS / VMess / Trojan) с профилями, пингом, централизованной выдачей конфигов (Remnawave) и автообновлением.
|
||
|
||
> Ранее приложение называлось **Navis**. С 4.0.0 бинарник — `EvilFox.exe`. Каталог релиза `dist/navis-release/` и URL-путь сохранены, чтобы клиенты 3.x продолжали обновляться; в той же папке лежит и `Navis.exe` (копия `EvilFox.exe`) как совместимый алиас.
|
||
|
||
## Платформы
|
||
|
||
| OS | Артефакты | UI |
|
||
|----|----------|----|
|
||
| Windows amd64 | `EvilFox.exe` (+ `Navis.exe` alias) | GUI (WebView2) |
|
||
| macOS universal | `Navis.dmg` · `Navis.app.zip` | **GUI** (как Windows) |
|
||
| macOS arm64 / amd64 | `Navis` · DMG · `Navis-cli` | GUI + CLI |
|
||
| Android | `Navis.apk` | GUI (VpnService) |
|
||
|
||
## Скачать macOS прямо с git
|
||
|
||
Репозиторий: https://git.evilfox.cc/test2/navi
|
||
|
||
### Быстрая установка (автовыбор архитектуры)
|
||
|
||
```bash
|
||
curl -fsSL "https://git.evilfox.cc/test2/navi/raw/branch/main/scripts/install-macos.sh" | bash
|
||
```
|
||
|
||
Скрипт скачает **универсальный DMG** (работает на Intel и Apple Silicon) и откроет его.
|
||
|
||
### Универсальный DMG (рекомендуется)
|
||
|
||
Подходит для **всех** Mac — M1/M2/M3/M4 и Intel:
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/universal/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
### 1. Узнайте архитектуру Mac (если нужна отдельная сборка)
|
||
|
||
В Терминале:
|
||
|
||
```bash
|
||
uname -m
|
||
```
|
||
|
||
- `arm64` → Apple Silicon (M1/M2/M3/M4) → папка **macos/arm64**
|
||
- `x86_64` → Intel → папка **macos/amd64**
|
||
|
||
> **Важно:** на Mac M4 нельзя ставить сборку из `macos/amd64` — иконка будет с перечёркиванием. Используйте **macos/universal** или **macos/arm64**.
|
||
|
||
### 2a. Скачать DMG для конкретной архитектуры
|
||
|
||
**Apple Silicon:**
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
**Intel:**
|
||
|
||
```bash
|
||
cd ~/Downloads
|
||
curl -fL -o Navis.dmg \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis.dmg"
|
||
open Navis.dmg
|
||
```
|
||
|
||
Откроется диск с `Navis.app` — перетащите в **Программы** (Applications).
|
||
|
||
Если Gatekeeper ругается:
|
||
|
||
```bash
|
||
xattr -dr com.apple.quarantine /Applications/Navis.app
|
||
```
|
||
|
||
Запуск CLI из .app:
|
||
|
||
```bash
|
||
/Applications/Navis.app/Contents/MacOS/Navis init
|
||
/Applications/Navis.app/Contents/MacOS/Navis install-core
|
||
/Applications/Navis.app/Contents/MacOS/Navis connect
|
||
```
|
||
|
||
Альтернатива DMG — zip с тем же `.app`:
|
||
|
||
```bash
|
||
# arm64
|
||
curl -fL -o Navis.app.zip \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis.app.zip"
|
||
# amd64
|
||
curl -fL -o Navis.app.zip \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis.app.zip"
|
||
unzip Navis.app.zip
|
||
```
|
||
|
||
### 2b. Скачать CLI-бинарник одной командой
|
||
|
||
**Apple Silicon (arm64):**
|
||
|
||
```bash
|
||
mkdir -p ~/Navis && cd ~/Navis
|
||
curl -fL -o Navis \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis"
|
||
chmod +x Navis
|
||
```
|
||
|
||
**Intel (amd64):**
|
||
|
||
```bash
|
||
mkdir -p ~/Navis && cd ~/Navis
|
||
curl -fL -o Navis \
|
||
"https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis"
|
||
chmod +x Navis
|
||
```
|
||
|
||
Проверка версии / обновлений:
|
||
|
||
```bash
|
||
./Navis check-update
|
||
```
|
||
|
||
### 3. Первый запуск (CLI)
|
||
|
||
```bash
|
||
cd ~/Navis
|
||
./Navis init
|
||
./Navis install-core
|
||
./Navis set-proxy 'hysteria2://PASSWORD@HOST:PORT/?sni=...#name'
|
||
# или naive+https://user:pass@host
|
||
./Navis connect
|
||
```
|
||
|
||
Полезные флаги:
|
||
|
||
```bash
|
||
./Navis connect -no-sysproxy # только локальный SOCKS/HTTP, без networksetup
|
||
./Navis connect -probe # проверка туннеля после коннекта
|
||
```
|
||
|
||
Локальные прокси после `connect`:
|
||
|
||
- SOCKS5: `127.0.0.1:1080`
|
||
- HTTP: `127.0.0.1:1081`
|
||
|
||
Системный прокси на macOS выставляется через `networksetup` (может запросить права администратора).
|
||
|
||
### 4. Если macOS блокирует запуск
|
||
|
||
```text
|
||
“Navis” cannot be opened because it is from an unidentified developer
|
||
```
|
||
|
||
```bash
|
||
xattr -dr com.apple.quarantine ~/Navis/Navis
|
||
# или для .app:
|
||
xattr -dr com.apple.quarantine /Applications/Navis.app
|
||
```
|
||
|
||
Затем: **Системные настройки → Конфиденциальность и безопасность → Всё равно открыть**.
|
||
|
||
### 5. Обновление с git
|
||
|
||
```bash
|
||
cd ~/Navis
|
||
./Navis check-update
|
||
./Navis apply-update
|
||
# закройте процесс Navis — бинарник подменится сам
|
||
```
|
||
|
||
Или скачайте DMG/бинарник заново.
|
||
|
||
Прямые ссылки (raw):
|
||
|
||
| Архитектура | CLI | DMG | ZIP (.app) |
|
||
|-------------|-----|-----|------------|
|
||
| **universal** | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/universal/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/universal/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/universal/Navis.app.zip) |
|
||
| arm64 | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/arm64/Navis.app.zip) |
|
||
| amd64 | [Navis](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis) | [Navis.dmg](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis.dmg) | [Navis.app.zip](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/macos/amd64/Navis.app.zip) |
|
||
| манифест | [update.json](https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json) | | |
|
||
|
||
## Android APK
|
||
|
||
Сборка: `build-android.bat` → `dist/navis-release/android/Navis.apk`
|
||
|
||
Установка: скопируйте APK на телефон → разрешите установку из неизвестных источников.
|
||
|
||
В APK: подписка, компактный список нод, пинг, «Лучший», автоподключение. Протоколы VLESS/VMess/Trojan (Xray) и Hysteria 2. Naive/AWG — импорт в UI, полный туннель дорабатывается.
|
||
|
||
Подробнее: [android/README.md](android/README.md)
|
||
|
||
## Сборка Windows
|
||
|
||
```bat
|
||
build.bat
|
||
```
|
||
|
||
Артефакты релиза: `dist/navis-release/windows/Navis.exe` (+ `vpnclient.exe`).
|
||
|
||
или:
|
||
|
||
```bat
|
||
go build -ldflags="-H windowsgui -s -w" -o Navis.exe ./cmd/vpnapp
|
||
```
|
||
|
||
### Microsoft Store (MSIX)
|
||
|
||
Navis — Win32 + WebView2 VPN/прокси-клиент (системный прокси, локальные cores). **PWA в Store не подходит** как замена: без Desktop Bridge нельзя дать те же возможности. Для Store используется **MSIX full-trust** поверх того же `Navis.exe`.
|
||
|
||
```powershell
|
||
build.bat
|
||
.\scripts\pack-msix.ps1 -Version 3.9.0.1
|
||
```
|
||
|
||
Нужен Windows SDK (`MakeAppx.exe`). Перед публикацией подставьте Identity Name / Publisher из Partner Center (см. `packaging/msix/AppxManifest.xml` и [packaging/msix/README.md](packaging/msix/README.md)).
|
||
|
||
Сборка из Store **не** самообновляется через in-app updater (детект MSIX package identity) — только обновления Microsoft Store.
|
||
|
||
### Remnawave
|
||
|
||
Импорт нод из панели [Remnawave](https://remna.st):
|
||
|
||
| Способ | Что указать |
|
||
|--------|-------------|
|
||
| Публичная подписка | `https://<panel>/api/sub/<shortUuid>` в поле «URL подписки» |
|
||
| Панель + short UUID | блок Remnawave API → URL панели + short UUID → «Синхронизировать» |
|
||
| С API token | токен из панели → API Tokens (для `/api/subscriptions/…`, `/api/users/…`) |
|
||
| Caddy auth | опциональный `X-Api-Key` |
|
||
|
||
Токены хранятся только локально в `configs/config.json` (не коммитьте).
|
||
|
||
### Выдача доступа из приложения (admin API)
|
||
|
||
Приложение умеет само создавать пользователей в панели Remnawave и сразу импортировать их конфиги (панель «Выдать доступ» в интерфейсе). Для этого нужен **отдельный** файл с админ-ключом:
|
||
|
||
1. Скопируйте `configs/remnawave-api.example.json` → `configs/remnawave-api.json`.
|
||
2. Вставьте `panel_url` и `api_token` (панель → API Tokens). `caddy_api_key` — только если панель за Caddy-auth.
|
||
3. Перезапустите Navis — появится панель «Выдать доступ».
|
||
|
||
Файл читается **в рантайме** из папки `configs` рядом с `config.json` — пересборка (repack) не требуется, достаточно положить файл и перезапустить приложение.
|
||
|
||
Тариф по умолчанию (настраивается в блоке `provision`):
|
||
|
||
| Поле | Значение по умолчанию |
|
||
|------|----------------------|
|
||
| `traffic_gb` | 50 ГБ |
|
||
| `days` | 30 дней (expireAt = сейчас + days) |
|
||
| `strategy` | `MONTH` (сброс трафика; также `NO_RESET` / `DAY` / `WEEK`) |
|
||
| `hwid_device_limit` | 0 = без лимита устройств |
|
||
|
||
Логика: `GET /api/users/by-username/{username}` — если пользователь есть, берётся его `subscriptionUrl`; иначе `POST /api/users` с тарифом выше, затем подписка импортируется в приложение автоматически.
|
||
|
||
`configs/remnawave-api.json` в `.gitignore` — **никогда не коммитьте** реальный ключ, в репозитории только `remnawave-api.example.json`.
|
||
|
||
## Сборка macOS (кросс с Windows / Linux)
|
||
|
||
```bat
|
||
build-macos.bat
|
||
```
|
||
|
||
Артефакты: `dist/navis-release/macos/{arm64,amd64,universal}/`.
|
||
|
||
или:
|
||
|
||
```bash
|
||
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o dist/navis-release/macos/arm64/Navis ./cmd/vpnclient
|
||
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o dist/navis-release/macos/amd64/Navis ./cmd/vpnclient
|
||
```
|
||
|
||
## Обновления
|
||
|
||
Манифест: `https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json`
|
||
|
||
Релизный layout (с 2.8.0):
|
||
|
||
```
|
||
dist/navis-release/windows/ Navis.exe, vpnclient.exe
|
||
dist/navis-release/macos/arm64|amd64|universal/
|
||
dist/navis-release/android/ Navis.apk
|
||
```
|
||
|
||
Формат (multi-platform):
|
||
|
||
```json
|
||
{
|
||
"version": "2.8.0",
|
||
"notes": "…",
|
||
"platforms": {
|
||
"windows-amd64": { "url": "…/windows/Navis.exe", "sha256": "…" },
|
||
"darwin-arm64": { "url": "…/macos/arm64/Navis", "sha256": "…" },
|
||
"darwin-amd64": { "url": "…/macos/amd64/Navis", "sha256": "…" },
|
||
"darwin-universal": { "url": "…/macos/universal/Navis", "sha256": "…" },
|
||
"android": { "url": "…/android/Navis.apk", "sha256": "…" }
|
||
}
|
||
}
|
||
```
|
||
|
||
Клиент выбирает только ключ `GOOS-GOARCH` (на Mac — fallback на `darwin-universal`). Чужой OS в ленте **не** считается доступным обновлением. Android пока не использует этот in-app feed (APK отдельно).
|
||
|
||
## Купить доступ
|
||
|
||
https://evilfox.win/
|
||
|
||
## Антивирусы (ложные срабатывания)
|
||
|
||
Некоторые AV (Bkav, Microsoft Wacapew/Wacatac, Ikarus Trojan.WinGo.Agent, Google, Trapmine) часто помечают **любые** неподписанные Go-бинарники с сетью и сменой системного прокси.
|
||
|
||
В 3.9.0:
|
||
- выдача конфигов через Remnawave API (`/api/sub/{shortUuid}`, опционально Bearer token);
|
||
- UI в стиле Remnawave (тёмная тема по умолчанию, cyan accent), флаги стран у серверов;
|
||
- MSIX / Store prep для `3.9.0.1`.
|
||
|
||
В 2.9.0:
|
||
- светлая / тёмная тема с переключателем (preference в localStorage, по умолчанию — системная);
|
||
- подготовка к Microsoft Store: MSIX-манифест, `scripts/pack-msix.ps1`, отключение in-app updater в MSIX-сборке.
|
||
|
||
В 2.8.0:
|
||
- релизы разложены по папкам `windows/` · `macos/` · `android/`;
|
||
- обновления строго по платформе (Windows не получит Mac-сборку и наоборот).
|
||
|
||
В 2.7.2:
|
||
- убран вечный цикл обновления (проверка больше не устанавливает сама; только кнопка «Обновить»);
|
||
- номер сборки в версии (`2.7.2+N` / FileVersion `2.7.2.N`); сравнение обновлений только по product semver.
|
||
|
||
В 2.7.1:
|
||
- обновление только по кнопке «Обновить»; можно «Пропустить эту версию» (следующую всё равно предложит).
|
||
|
||
В 2.7.0:
|
||
- GUI на macOS (тот же интерфейс, что на Windows): DMG → Navis.app открывает окно клиента; CLI лежит как `Navis-cli`.
|
||
|
||
В 2.6.2:
|
||
- быстрое отключение AWG: принудительно закрываются прокси-соединения, UI больше не зависает.
|
||
|
||
В 2.6.1:
|
||
- AmneziaWG: перед подключением Endpoint-хост резолвится в IP (предпочтительно IPv4) — обход сбоя IpcSet на Windows («No such host is known»).
|
||
|
||
В 2.6.0:
|
||
- исправлен разбор AmneziaWG: ключ в `awg://KEY@host`, JSON/`vpn://`, пробелы в именах полей, URL-safe base64.
|
||
|
||
В 2.3.0:
|
||
- Android APK: подписка, список нод, пинг, автолучший; VLESS/VMess/Trojan (Xray) и Hysteria 2 через VpnService.
|
||
|
||
В 2.2.1:
|
||
- универсальный macOS DMG (Intel + Apple Silicon), скрипт автоустановки, предупреждения при неверной архитектуре.
|
||
|
||
В 2.2.0:
|
||
- компактный список нод с пингом (как в Happ);
|
||
- параллельный пинг, кнопка «Лучший», автоподключение к серверу с минимальной задержкой после подписки.
|
||
|
||
В 2.1.0:
|
||
- вторичные кнопки перекрашены (не белые), чтобы не путать с основным действием.
|
||
|
||
В 2.0.0:
|
||
- новый интерфейс (connect-first), обновлённая иконка и типографика;
|
||
- чище UX: протокол-бейдж, сворачиваемые сервисные действия, статус-карточка.
|
||
|
||
В 1.9.0:
|
||
- VLESS / VMess / Trojan через официальный Xray-core (кнопка «Установить cores»).
|
||
|
||
В 1.8.0:
|
||
- автопроверка обновлений при старте и установка с автоперезапуском;
|
||
- AmneziaWG 2.0: вставьте полный `.conf` (Jc/Jmin/Jmax, S1–S4, H1–H4, I1–I5) или `awg://…` — встроенный userspace-туннель + локальный SOCKS/HTTP.
|
||
|
||
В 1.7.1 дополнительно:
|
||
- обновление только скачивается в `Downloads` (без самозамены exe);
|
||
- нет автопроверки обновлений и тихой загрузки cores при старте;
|
||
- нет вызова `netsh winhttp`;
|
||
- Windows manifest + metadata EvilFox.
|
||
|
||
Если всё ещё ругается — отправьте файл как False Positive:
|
||
- Microsoft: https://www.microsoft.com/wdsi/filesubmission
|
||
- Google: https://safebrowsing.google.com/safebrowsing/report_error/
|
||
- VirusTotal community vote: «False positive»
|
||
|
||
Полностью убрать ML-детекты обычно можно только с **Authenticode** (code signing).
|