diff --git a/.gitignore b/.gitignore index b5c9244..43ce481 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,7 @@ cmd/vpnapp/resource.syso .navis-webview/ navis-update.bat Navis.exe.new +Navis-pending.exe +*.bak +Navis.exe.bak + diff --git a/README.md b/README.md index ffa529f..4567fb9 100644 --- a/README.md +++ b/README.md @@ -205,3 +205,16 @@ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o dist/navis-release/darwin-amd ## Купить доступ https://evilfox.win/ + +## Антивирусы (ложные срабатывания) + +Некоторые AV (Kaspersky, Microsoft Wacatac.B!ml, Ikarus Trojan.WinGo.Agent и др.) часто помечают **любые** Go-бинарники с сетью и сменой системного прокси. + +В 1.7.0 уменьшили «подозрительные» паттерны: +- нет скрытой загрузки cores при старте; +- нет `.bat`-самозамены с `del /f` + hidden detached `cmd`; +- обновление через `Navis-pending.exe` + явный флаг; +- Windows application manifest (`asInvoker`); +- metadata компании EvilFox / Product Navis. + +Если Defender/KAV ругается: добавьте `Navis.exe` в исключения или отправьте файл как False Positive вендору. Надёжнее всего — подпись Authenticode (code signing certificate). diff --git a/assets/app.manifest b/assets/app.manifest new file mode 100644 index 0000000..4c7a87c --- /dev/null +++ b/assets/app.manifest @@ -0,0 +1,32 @@ + + + + Navis — official NaiveProxy / Hysteria 2 client + + + + + + + + + + + + + + + + + + + true/pm + PerMonitorV2 + true + + + diff --git a/build.bat b/build.bat index c18d0d2..9374f1e 100644 --- a/build.bat +++ b/build.bat @@ -11,14 +11,14 @@ if errorlevel 1 ( go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest ) -goversioninfo -icon assets\navis.ico -o cmd\vpnapp\resource.syso versioninfo.json +goversioninfo -64 -icon assets\navis.ico -manifest assets\app.manifest -o cmd\vpnapp\resource.syso versioninfo.json if errorlevel 1 exit /b 1 echo Building Navis GUI and CLI... -go build -ldflags="-H windowsgui -s -w" -o Navis.exe ./cmd/vpnapp +go build -ldflags="-H windowsgui -s -w" -trimpath -o Navis.exe ./cmd/vpnapp if errorlevel 1 exit /b 1 -go build -ldflags="-s -w" -o vpnclient.exe ./cmd/vpnclient +go build -ldflags="-s -w" -trimpath -o vpnclient.exe ./cmd/vpnclient if errorlevel 1 exit /b 1 echo. diff --git a/cmd/vpnapp/main_windows.go b/cmd/vpnapp/main_windows.go index 5af619e..75bf8bc 100644 --- a/cmd/vpnapp/main_windows.go +++ b/cmd/vpnapp/main_windows.go @@ -8,11 +8,9 @@ import ( "fmt" "log" "os" - "os/exec" "path/filepath" "strings" "sync" - "syscall" "time" "unsafe" @@ -59,6 +57,10 @@ type uiState struct { } func main() { + if update.MaybeFinishUpdate(os.Args[1:]) { + return + } + log.SetFlags(log.LstdFlags | log.Lshortfile) cfgPath, err := config.LocateConfig() @@ -95,9 +97,7 @@ func main() { dataPath := filepath.Join(filepath.Dir(cfgPath), ".navis-webview") _ = os.MkdirAll(dataPath, 0o755) - go func() { - _, _ = mgr.EnsureAllCores() - }() + // Do NOT auto-download cores on startup — silent network+write looks like malware to AV. w := webview2.NewWithOptions(webview2.WebViewOptions{ Debug: false, @@ -373,18 +373,7 @@ func openURL(raw string) error { default: return fmt.Errorf("разрешена только ссылка evilfox.win") } - if err := shellOpen(raw); err == nil { - return nil - } - // Fallbacks when ShellExecute is blocked by policy. - cmd := exec.Command("cmd", "/c", "start", "", raw) - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} - if err := cmd.Start(); err == nil { - return nil - } - cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", raw) - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} - return cmd.Start() + return shellOpen(raw) } func shellOpen(raw string) error { diff --git a/dist/navis-release/Navis.exe b/dist/navis-release/Navis.exe index 38e750f..9e5f853 100644 Binary files a/dist/navis-release/Navis.exe and b/dist/navis-release/Navis.exe differ diff --git a/dist/navis-release/darwin-amd64/Navis b/dist/navis-release/darwin-amd64/Navis index 8849b0d..8c4cf70 100644 Binary files a/dist/navis-release/darwin-amd64/Navis and b/dist/navis-release/darwin-amd64/Navis differ diff --git a/dist/navis-release/darwin-amd64/Navis.app.zip b/dist/navis-release/darwin-amd64/Navis.app.zip index a2e8e59..75b00be 100644 Binary files a/dist/navis-release/darwin-amd64/Navis.app.zip and b/dist/navis-release/darwin-amd64/Navis.app.zip differ diff --git a/dist/navis-release/darwin-amd64/Navis.dmg b/dist/navis-release/darwin-amd64/Navis.dmg index e25b0a3..8e3de81 100644 Binary files a/dist/navis-release/darwin-amd64/Navis.dmg and b/dist/navis-release/darwin-amd64/Navis.dmg differ diff --git a/dist/navis-release/darwin-arm64/Navis b/dist/navis-release/darwin-arm64/Navis index dd309ec..09c3e4b 100644 Binary files a/dist/navis-release/darwin-arm64/Navis and b/dist/navis-release/darwin-arm64/Navis differ diff --git a/dist/navis-release/darwin-arm64/Navis.app.zip b/dist/navis-release/darwin-arm64/Navis.app.zip index b034820..200a359 100644 Binary files a/dist/navis-release/darwin-arm64/Navis.app.zip and b/dist/navis-release/darwin-arm64/Navis.app.zip differ diff --git a/dist/navis-release/darwin-arm64/Navis.dmg b/dist/navis-release/darwin-arm64/Navis.dmg index a6bc87c..ed91dd0 100644 Binary files a/dist/navis-release/darwin-arm64/Navis.dmg and b/dist/navis-release/darwin-arm64/Navis.dmg differ diff --git a/dist/navis-release/update.json b/dist/navis-release/update.json index 5a3f878..67e143c 100644 --- a/dist/navis-release/update.json +++ b/dist/navis-release/update.json @@ -1,38 +1,38 @@ { - "version": "1.6.1", - "notes": "Фикс URL подписки: кнопка ↻ снова работает, сообщения об ошибке/успехе видны, лучше парсинг base64/Clash", + "version": "1.7.0", + "notes": "Меньше ложных срабатываний AV: без bat-апдейтера и тихой загрузки cores; Windows manifest; metadata EvilFox", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "94a39a127073ee299902026fe0be6f35506663fb20b9d9dde73f8f7732b1c079", + "sha256": "3e544461c1ce8ec3b508639cb549a759b773da38517c98c9ca634faaf09a601c", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", - "dmg_sha256": "1880a4bac8f52e5ea0ed4f5ed6a6d796f492347a7bb1b0565b6766859839d04a", + "dmg_sha256": "39e88c985867ce6ef37deb00d87e1c6669cfbc8b9f8f0589d11a3f32036a5258", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.app.zip", - "zip_sha256": "16711d3c0544806eefa0ca29b0d2c78b9f159c44e4e526cf05ce9ec1aaf82af9" + "zip_sha256": "213fd7563e068f60a1ae2504c6e48171b9f9e3f2fe3c14ecad75ed809fa05d06" }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "580005bbdaeef92ae6384be7946cef103c45b1150473185bdf70538d77e3b545", + "sha256": "f40a711108e78bfa1a944a1d4946549aba32cb5e00ef9035be352810c700807c", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", - "dmg_sha256": "d80bd24e467886db6fd8486f5e209cb835531b2665bac953267d0fee959dd9c0", + "dmg_sha256": "c70fe7feb000eec34c0fe4ef2d05565dd0285c0c4f18a264ecad540d2c0878db", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.app.zip", - "zip_sha256": "d6e9876ce1a7331f9fd9f8bece86a6bce55a48d874c6e40d22292653029dc486" + "zip_sha256": "5b3e3fea5aef4ac962c18a190c1943c7cfd5357ea233abbdec1d26007e1e6eb4" } } } diff --git a/dist/update.json b/dist/update.json index 5a3f878..67e143c 100644 --- a/dist/update.json +++ b/dist/update.json @@ -1,38 +1,38 @@ { - "version": "1.6.1", - "notes": "Фикс URL подписки: кнопка ↻ снова работает, сообщения об ошибке/успехе видны, лучше парсинг base64/Clash", + "version": "1.7.0", + "notes": "Меньше ложных срабатываний AV: без bat-апдейтера и тихой загрузки cores; Windows manifest; metadata EvilFox", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "94a39a127073ee299902026fe0be6f35506663fb20b9d9dde73f8f7732b1c079", + "sha256": "3e544461c1ce8ec3b508639cb549a759b773da38517c98c9ca634faaf09a601c", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", - "dmg_sha256": "1880a4bac8f52e5ea0ed4f5ed6a6d796f492347a7bb1b0565b6766859839d04a", + "dmg_sha256": "39e88c985867ce6ef37deb00d87e1c6669cfbc8b9f8f0589d11a3f32036a5258", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.app.zip", - "zip_sha256": "16711d3c0544806eefa0ca29b0d2c78b9f159c44e4e526cf05ce9ec1aaf82af9" + "zip_sha256": "213fd7563e068f60a1ae2504c6e48171b9f9e3f2fe3c14ecad75ed809fa05d06" }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "580005bbdaeef92ae6384be7946cef103c45b1150473185bdf70538d77e3b545", + "sha256": "f40a711108e78bfa1a944a1d4946549aba32cb5e00ef9035be352810c700807c", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", - "dmg_sha256": "d80bd24e467886db6fd8486f5e209cb835531b2665bac953267d0fee959dd9c0", + "dmg_sha256": "c70fe7feb000eec34c0fe4ef2d05565dd0285c0c4f18a264ecad540d2c0878db", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.app.zip", - "zip_sha256": "d6e9876ce1a7331f9fd9f8bece86a6bce55a48d874c6e40d22292653029dc486" + "zip_sha256": "5b3e3fea5aef4ac962c18a190c1943c7cfd5357ea233abbdec1d26007e1e6eb4" } } } diff --git a/internal/protocols/hysteria2/sys_windows.go b/internal/protocols/hysteria2/sys_windows.go index 1a581c4..6b103fd 100644 --- a/internal/protocols/hysteria2/sys_windows.go +++ b/internal/protocols/hysteria2/sys_windows.go @@ -8,5 +8,6 @@ import ( ) func applySysProcAttr(cmd *exec.Cmd) { - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} + const createNoWindow = 0x08000000 + cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: createNoWindow} } diff --git a/internal/protocols/naive/sys_windows.go b/internal/protocols/naive/sys_windows.go index 69ece8b..dd771ad 100644 --- a/internal/protocols/naive/sys_windows.go +++ b/internal/protocols/naive/sys_windows.go @@ -8,5 +8,7 @@ import ( ) func applySysProcAttr(cmd *exec.Cmd) { - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} + // CREATE_NO_WINDOW — quieter than HideWindow for console child processes. + const createNoWindow = 0x08000000 + cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: createNoWindow} } diff --git a/internal/sysproxy/windows.go b/internal/sysproxy/windows.go index 694d87b..484782a 100644 --- a/internal/sysproxy/windows.go +++ b/internal/sysproxy/windows.go @@ -143,12 +143,14 @@ func notifyInternetSettingsChanged() error { func setWinHTTPProxy(httpHostPort string) error { cmd := exec.Command("netsh", "winhttp", "set", "proxy", httpHostPort, "bypass-list=localhost;127.*;10.*;192.168.*;") - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} + const createNoWindow = 0x08000000 + cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: createNoWindow} return cmd.Run() } func resetWinHTTPProxy() error { cmd := exec.Command("netsh", "winhttp", "reset", "proxy") - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} + const createNoWindow = 0x08000000 + cmd.SysProcAttr = &syscall.SysProcAttr{CreationFlags: createNoWindow} return cmd.Run() } diff --git a/internal/update/update.go b/internal/update/update.go index 81a3417..04b8acc 100644 --- a/internal/update/update.go +++ b/internal/update/update.go @@ -17,7 +17,7 @@ import ( ) // CurrentVersion is the shipped client version. -const CurrentVersion = "1.6.1" +const CurrentVersion = "1.7.0" // DefaultManifestURL is the update feed (hosted in the project git repo). const DefaultManifestURL = "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json" diff --git a/internal/update/update_stub.go b/internal/update/update_stub.go new file mode 100644 index 0000000..76a7181 --- /dev/null +++ b/internal/update/update_stub.go @@ -0,0 +1,9 @@ +//go:build !windows + +package update + +// MaybeFinishUpdate is Windows-only. +func MaybeFinishUpdate(args []string) bool { + _ = args + return false +} diff --git a/internal/update/update_windows.go b/internal/update/update_windows.go index 989b2b3..97126f7 100644 --- a/internal/update/update_windows.go +++ b/internal/update/update_windows.go @@ -5,46 +5,116 @@ package update import ( "context" "fmt" + "io" "os" "os/exec" "path/filepath" + "strconv" "syscall" + "time" + + "golang.org/x/sys/windows" ) -// Apply downloads the new exe and schedules replacement after exit (Windows). +const finishUpdateFlag = "--navis-finish-update" + +// Apply downloads the new exe and starts it to replace the running binary after exit. +// Avoids writing .bat self-replacer scripts (common AV false-positive pattern). func Apply(ctx context.Context, manifestURL string) (string, error) { latest, _, _, exe, tmp, err := prepareDownload(ctx, manifestURL) if err != nil { return "", err } - dir := filepath.Dir(exe) - bat := filepath.Join(dir, "navis-update.bat") - - script := "@echo off\r\n" + - "setlocal EnableExtensions\r\n" + - "cd /d \"" + dir + "\"\r\n" + - "set \"EXE=" + exe + "\"\r\n" + - "set \"NEW=" + tmp + "\"\r\n" + - ":wait\r\n" + - "ping -n 2 127.0.0.1 >nul\r\n" + - "del /f /q \"%EXE%\" >nul 2>&1\r\n" + - "if exist \"%EXE%\" goto wait\r\n" + - "move /y \"%NEW%\" \"%EXE%\" >nul\r\n" + - "if not exist \"%EXE%\" exit /b 1\r\n" + - "start \"\" \"%EXE%\"\r\n" + - "exit /b 0\r\n" - if err := os.WriteFile(bat, []byte(script), 0o755); err != nil { - return "", err + pending := filepath.Join(filepath.Dir(exe), "Navis-pending.exe") + _ = os.Remove(pending) + if err := os.Rename(tmp, pending); err != nil { + if err2 := copyFile(tmp, pending); err2 != nil { + _ = os.Remove(tmp) + return "", err2 + } + _ = os.Remove(tmp) } + _ = os.Chmod(pending, 0o755) - cmd := exec.Command("cmd.exe", "/C", bat) - cmd.Dir = dir - cmd.SysProcAttr = &syscall.SysProcAttr{ - HideWindow: true, - CreationFlags: 0x00000008 | 0x00000200, // DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP - } + cmd := exec.Command(pending, finishUpdateFlag, strconv.Itoa(os.Getpid()), exe) + cmd.Dir = filepath.Dir(exe) + cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: false} if err := cmd.Start(); err != nil { return "", fmt.Errorf("start updater: %w", err) } return latest, nil } + +// MaybeFinishUpdate handles: Navis-pending.exe --navis-finish-update +// Returns true if this process was the updater and should exit. +func MaybeFinishUpdate(args []string) bool { + if len(args) < 3 || args[0] != finishUpdateFlag { + return false + } + pid, err := strconv.Atoi(args[1]) + if err != nil || pid <= 0 { + return true + } + target := args[2] + self, err := os.Executable() + if err != nil { + return true + } + self, _ = filepath.Abs(self) + target, _ = filepath.Abs(target) + + waitPIDExit(uint32(pid), 90*time.Second) + time.Sleep(500 * time.Millisecond) + + backup := target + ".bak" + _ = os.Remove(backup) + if err := os.Rename(target, backup); err != nil { + // Still locked — wait a bit more. + time.Sleep(2 * time.Second) + _ = os.Rename(target, backup) + } + if err := copyFile(self, target); err != nil { + _ = os.Rename(backup, target) + return true + } + _ = os.Chmod(target, 0o755) + _ = os.Remove(backup) + _ = os.Remove(self) + + cmd := exec.Command(target) + cmd.Dir = filepath.Dir(target) + _ = cmd.Start() + return true +} + +func waitPIDExit(pid uint32, timeout time.Duration) { + const synchronize = 0x00100000 + h, err := windows.OpenProcess(synchronize, false, pid) + if err != nil { + time.Sleep(1500 * time.Millisecond) + return + } + defer windows.CloseHandle(h) + ms := uint32(timeout / time.Millisecond) + if ms == 0 { + ms = 1000 + } + _, _ = windows.WaitForSingleObject(h, ms) +} + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + out, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o755) + if err != nil { + return err + } + defer out.Close() + if _, err := io.Copy(out, in); err != nil { + return err + } + return out.Close() +} diff --git a/server/update.json b/server/update.json index 5a3f878..67e143c 100644 --- a/server/update.json +++ b/server/update.json @@ -1,38 +1,38 @@ { - "version": "1.6.1", - "notes": "Фикс URL подписки: кнопка ↻ снова работает, сообщения об ошибке/успехе видны, лучше парсинг base64/Clash", + "version": "1.7.0", + "notes": "Меньше ложных срабатываний AV: без bat-апдейтера и тихой загрузки cores; Windows manifest; metadata EvilFox", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "b836310af1b946c98d5d84787266d79978cb6d2a45e360c9fc5cb3a0a89059e4", + "sha256": "8bb8bab990292be66f169dc0a23f0aaff45cf349b6c6b5cfbef763f55cfe0d4d", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "94a39a127073ee299902026fe0be6f35506663fb20b9d9dde73f8f7732b1c079", + "sha256": "3e544461c1ce8ec3b508639cb549a759b773da38517c98c9ca634faaf09a601c", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", - "dmg_sha256": "1880a4bac8f52e5ea0ed4f5ed6a6d796f492347a7bb1b0565b6766859839d04a", + "dmg_sha256": "39e88c985867ce6ef37deb00d87e1c6669cfbc8b9f8f0589d11a3f32036a5258", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.app.zip", - "zip_sha256": "16711d3c0544806eefa0ca29b0d2c78b9f159c44e4e526cf05ce9ec1aaf82af9" + "zip_sha256": "213fd7563e068f60a1ae2504c6e48171b9f9e3f2fe3c14ecad75ed809fa05d06" }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "580005bbdaeef92ae6384be7946cef103c45b1150473185bdf70538d77e3b545", + "sha256": "f40a711108e78bfa1a944a1d4946549aba32cb5e00ef9035be352810c700807c", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", - "dmg_sha256": "d80bd24e467886db6fd8486f5e209cb835531b2665bac953267d0fee959dd9c0", + "dmg_sha256": "c70fe7feb000eec34c0fe4ef2d05565dd0285c0c4f18a264ecad540d2c0878db", "zip_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.app.zip", - "zip_sha256": "d6e9876ce1a7331f9fd9f8bece86a6bce55a48d874c6e40d22292653029dc486" + "zip_sha256": "5b3e3fea5aef4ac962c18a190c1943c7cfd5357ea233abbdec1d26007e1e6eb4" } } } diff --git a/versioninfo.json b/versioninfo.json index d1240af..7b296dd 100644 --- a/versioninfo.json +++ b/versioninfo.json @@ -1,7 +1,7 @@ { "FixedFileInfo": { - "FileVersion": { "Major": 1, "Minor": 6, "Patch": 1, "Build": 0 }, - "ProductVersion": { "Major": 1, "Minor": 6, "Patch": 1, "Build": 0 }, + "FileVersion": { "Major": 1, "Minor": 7, "Patch": 0, "Build": 0 }, + "ProductVersion": { "Major": 1, "Minor": 7, "Patch": 0, "Build": 0 }, "FileFlagsMask": "3f", "FileFlags": "00", "FileOS": "40004", @@ -9,13 +9,15 @@ "FileSubType": "00" }, "StringFileInfo": { - "CompanyName": "Navis", - "FileDescription": "Navis — NaiveProxy / Hysteria 2 client for Windows and macOS", - "FileVersion": "1.6.1.0", + "CompanyName": "EvilFox", + "FileDescription": "Navis VPN client (NaiveProxy / Hysteria 2)", + "FileVersion": "1.7.0.0", "InternalName": "Navis", + "LegalCopyright": "Copyright (c) EvilFox", "OriginalFilename": "Navis.exe", "ProductName": "Navis", - "ProductVersion": "1.6.1.0" + "ProductVersion": "1.7.0.0", + "Comments": "Open-source VPN/proxy client. https://evilfox.win/" }, "VarFileInfo": { "Translation": { @@ -23,5 +25,6 @@ "CharsetID": "04B0" } }, - "IconPath": "assets/navis.ico" + "IconPath": "assets/navis.ico", + "ManifestPath": "assets/app.manifest" }