Сборки с обфускацией
Соберите приложение Wails с помощью Garble, чтобы защитить исходный код от обратной разработки
Garble — это инструмент сборки Go, который подменяет go build, чтобы переименовывать символы, обфусцировать константы и удалять отладочную информацию из полученного исполняемого файла. В Wails v3 полноценная поддержка Garble реализована с помощью двух новых команд.
Предварительные требования
- Go 1.26.2 или более поздней версии — требуется для Garble v0.16.0
- Garble v0.16.0
go install mvdan.cc/garble@v0.16.0
Обязательно: добавьте теги JSON к типам сервисов
У каждой структуры, которую возвращает или принимает метод привязанного сервиса, должны быть явно заданы теги JSON для всех экспортируемых полей:
// 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"`
}Собственные типы Wails — Screen, Rect, Point, Size, EnvironmentInfo, OSInfo, Capabilities — уже содержат теги. Добавить теги нужно только к собственным типам.
Сборка с обфускацией
Создайте файл стабильных идентификаторов
Выполняйте эту команду каждый раз, когда добавляете, переименовываете или удаляете метод привязанного сервиса:
wails3 generate bindings -obfuscated
Команда создаёт wails_obfuscated.gen.go в каталоге вашего пакета main — добавьте этот файл в репозиторий.
Соберите с помощью Garble
wails3 build --obfuscated
Собирает приложение с использованием обфусцированных привязок.
Передача дополнительных флагов в Garble
Чтобы передать параметры непосредственно в garble, используйте --garbleargs:
# 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"
Полный список поддерживаемых флагов приведён в документации Garble.
Для опытных пользователей: запись файла идентификаторов в другой пакет
По умолчанию wails_obfuscated.gen.go записывается рядом с вашим пакетом main. Если в вашем проекте сервисы находятся в подпакете, который импортируется main, файл можно записать туда с помощью -obfuscated-output:
wails3 generate bindings -obfuscated -obfuscated-output ./internal/services
Устранение неполадок
garble: command not found
Garble не установлен или $(go env GOPATH)/bin отсутствует в переменной PATH.
go install mvdan.cc/garble@v0.16.0
export PATH="$PATH:$(go env GOPATH)/bin"
Фронтенд получает неверные или пустые значения полей
В типах, возвращаемых вашими сервисами, отсутствуют теги json:"...". Проверьте все структуры, возвращаемые привязанными методами, и явно добавьте теги к каждому экспортируемому полю.
Ошибка binding not found в консоли браузера
Файл стабильных идентификаторов отсутствует или не был включён в компиляцию. Проверьте следующее:
wails_obfuscated.gen.goсуществует в каталоге вашего пакета main (или в каталоге, переданном в-obfuscated-output)- Вы выполнили команду
wails3 build --obfuscated, которая добавляет тег сборкиwails_obfuscated - Если вы использовали
-obfuscated-output, пакет назначения импортируетсяmain
Windows Defender определяет сборку как вирус
Во время сборки Windows Defender эвристически определяет обфусцированные с помощью Garble исполняемые файлы Go как вредоносные, поскольку в них отсутствуют отладочные символы и они похожи на упакованные исполняемые файлы. Сборка завершается следующей ошибкой:
open C:\Users\...\AppData\Local\Temp\go-build...\a.out.exe: The file contains a virus or potentially unwanted software.Добавьте каталог временных файлов, в который Go записывает промежуточные артефакты сборки, и каталог проекта в список исключений Defender:
Add-MpPreference -ExclusionPath "$env:TEMP"
Add-MpPreference -ExclusionPath "C:\path\to\your\project"
Эти исключения действуют только для указанных путей и не отключают Defender во всей системе.
Сборка завершается ошибкой unsupported Go version
Для Garble v0.16.0 требуется Go 1.26.2 или более поздней версии. Обновите Go либо найдите на странице выпусков Garble версию, совместимую с вашей цепочкой инструментов.