難読化ビルド
Garble で Wails アプリケーションをビルドし、ソースコードをリバースエンジニアリングから保護します
Garble は、go build の代わりに使用し、シンボル名の変更、定数の難読化、生成されるバイナリからのデバッグ情報の削除を行う Go ビルドツールです。Wails v3 では、2 つの新しいコマンドによって 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)には、すでにタグが付いています。タグを付ける必要があるのは、独自に定義した型だけです。
難読化してビルドする
安定 ID ファイルを生成する
バインドされたサービスメソッドを追加、名前変更、または削除するたびに、次のコマンドを実行してください:
wails3 generate bindings -obfuscated
これにより、メインパッケージのディレクトリに wails_obfuscated.gen.go が作成されます。このファイルをコミットしてください。
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 のドキュメントを参照してください。
高度な設定:ID ファイルを別のパッケージに書き込む
デフォルトでは、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 エラーが表示される
安定 ID ファイルが存在しないか、コンパイルに含まれていません。以下を確認してください:
wails_obfuscated.gen.goがメインパッケージのディレクトリ(または-obfuscated-outputに渡したディレクトリ)に存在するwails_obfuscatedビルドタグを追加するwails3 build --obfuscatedを実行した-obfuscated-outputを使用した場合、出力先パッケージがmainからインポートされている
Windows Defender がビルドをウイルスとして検出する
Garble で難読化された Go バイナリは、デバッグシンボルがなく、パックされた実行可能ファイルに類似しているため、ビルド中に Windows Defender のヒューリスティック検出によって脅威と判定されます。ビルドは次のエラーで失敗します:
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 のリリースページで、お使いのツールチェーンと互換性のあるバージョンを確認してください。