Verschleierte Builds
Erstellen Sie Ihre Wails-Anwendung mit Garble, um Ihren Quellcode vor Reverse Engineering zu schützen
Garble ist ein Go-Build-Tool, das go build ersetzt, um Symbole umzubenennen, Konstanten zu verschleiern und Debug-Informationen aus der resultierenden Binärdatei zu entfernen. Wails v3 bietet über zwei neue Befehle direkte Unterstützung für Garble.
Voraussetzungen
- Go 1.26.2 oder höher – erforderlich für Garble v0.16.0
- Garble v0.16.0
go install mvdan.cc/garble@v0.16.0
Erforderlich: JSON-Tags zu Ihren Servicetypen hinzufügen
Jede Struktur, die eine gebundene Servicemethode zurückgibt oder akzeptiert, muss für jedes exportierte Feld ein explizites JSON-Tag enthalten:
// Without tags — breaks under Garble
type OrderSummary struct {
ID int
Total float64
LineItems []LineItem
}
// With tags — safe under Garble
type OrderSummary struct {
ID int `json:"id"`
Total float64 `json:"total"`
LineItems []LineItem `json:"lineItems"`
}Die Wails-eigenen Typen – Screen, Rect, Point, Size, EnvironmentInfo, OSInfo, Capabilities – sind bereits mit Tags versehen. Sie müssen nur Ihre eigenen Typen mit Tags versehen.
Mit Verschleierung erstellen
Stabile ID-Datei generieren
Führen Sie diesen Befehl immer aus, wenn Sie eine gebundene Servicemethode hinzufügen, umbenennen oder entfernen:
wails3 generate bindings -obfuscated
Dadurch wird wails_obfuscated.gen.go im Verzeichnis Ihres Hauptpakets erstellt – committen Sie diese Datei.
Mit Garble erstellen
wails3 build --obfuscated
Erstellt die Anwendung mit den verschleierten Bindings.
Zusätzliche Flags an Garble übergeben
Verwenden Sie --garbleargs, um Optionen direkt an garble weiterzuleiten:
# Obfuscate string literals and reduce binary size
wails3 build --obfuscated --garbleargs "-literals -tiny"
# Reproducible output — same seed produces the same binary
wails3 build --obfuscated --garbleargs "-seed=deadbeef"
Die vollständige Liste der unterstützten Flags finden Sie in der Garble-Dokumentation.
Für Fortgeschrittene: ID-Datei in ein anderes Paket schreiben
Standardmäßig wird wails_obfuscated.gen.go neben Ihr main-Paket geschrieben. Wenn Ihr Projekt Services in einem Unterpaket verwaltet, das von main importiert wird, können Sie die Datei stattdessen mit -obfuscated-output dorthin schreiben:
wails3 generate bindings -obfuscated -obfuscated-output ./internal/services
Fehlerbehebung
garble: command not found
Garble ist nicht installiert oder $(go env GOPATH)/bin befindet sich nicht in Ihrem PATH.
go install mvdan.cc/garble@v0.16.0
export PATH="$PATH:$(go env GOPATH)/bin"
Frontend erhält falsche oder leere Feldwerte
In den Rückgabetypen Ihres Services fehlen json:"..."-Tags. Prüfen Sie jede von Ihren gebundenen Methoden zurückgegebene Struktur und fügen Sie jedem exportierten Feld ein explizites Tag hinzu.
binding not found-Fehler in der Browserkonsole
Die stabile ID-Datei fehlt oder wurde nicht mitkompiliert. Prüfen Sie Folgendes:
wails_obfuscated.gen.goist im Verzeichnis Ihres Hauptpakets vorhanden (oder in dem Verzeichnis, das Sie an-obfuscated-outputübergeben haben)- Sie haben
wails3 build --obfuscatedausgeführt; dieser Befehl fügt das Build-Tagwails_obfuscatedhinzu - Wenn Sie
-obfuscated-outputverwendet haben, wird das Zielpaket vonmainimportiert
Windows Defender stuft den Build als Virus ein
Mit Garble verschleierte Go-Binärdateien werden während des Builds von Windows Defender aufgrund heuristischer Verfahren als schädlich eingestuft, weil ihnen Debug-Symbole fehlen und sie gepackten ausführbaren Dateien ähneln. Der Build schlägt mit folgender Meldung fehl:
open C:\Users\...\AppData\Local\Temp\go-build...\a.out.exe: The file contains a virus or potentially unwanted software.Fügen Sie Ihr temporäres Verzeichnis (in das Go temporäre Build-Artefakte schreibt) und Ihr Projektverzeichnis zur Ausschlussliste von Defender hinzu:
Add-MpPreference -ExclusionPath "$env:TEMP"
Add-MpPreference -ExclusionPath "C:\path\to\your\project"
Diese Ausschlüsse gelten nur für die angegebenen Pfade und deaktivieren Defender nicht global.
Build schlägt mit unsupported Go version fehl
Garble v0.16.0 erfordert Go 1.26.2 oder höher. Aktualisieren Sie entweder Go oder suchen Sie auf der Garble-Releaseseite nach einer mit Ihrer Toolchain kompatiblen Version.