Lewati ke konten

Build Ter-obfuscate

Garble adalah alat build Go yang menggantikan go build untuk mengganti nama simbol, obfuscate konstanta, dan menghapus informasi debug dari binary hasil. Wails v3 memiliki dukungan first-class untuk Garble melalui dua perintah baru.

  • Go 1.26.2 atau lebih baru — diperlukan oleh Garble v0.16.0
  • Garble v0.16.0
Terminal window
go install mvdan.cc/[email protected]

Wajib: tambahkan tag JSON ke tipe service Anda

Section titled “Wajib: tambahkan tag JSON ke tipe service Anda”

Struct apa pun yang dikembalikan atau diterima metode service terikat harus memiliki tag JSON eksplisit di setiap field exported:

// 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"`
}

Tipe Wails sendiri — Screen, Rect, Point, Size, EnvironmentInfo, OSInfo, Capabilities — sudah ditag. Anda hanya perlu men-tag tipe Anda sendiri.

  1. Hasilkan file ID stabil

    Jalankan ini setiap kali Anda menambah, mengganti nama, atau menghapus metode service terikat:

    Terminal window
    wails3 generate bindings -obfuscated

    Ini membuat wails_obfuscated.gen.go di direktori paket main Anda — commit file ini.

  2. Build dengan Garble

    Terminal window
    wails3 build --obfuscated

    Membangun aplikasi menggunakan bindings ter-obfuscate.

Gunakan --garbleargs untuk meneruskan opsi langsung ke garble:

Terminal window
# 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"

Lihat dokumentasi Garble untuk daftar lengkap flag yang didukung.

Lanjutan: menulis file ID ke paket berbeda

Section titled “Lanjutan: menulis file ID ke paket berbeda”

Secara default wails_obfuscated.gen.go ditulis di samping paket main Anda. Jika proyek Anda menyimpan service di sub-paket yang diimpor oleh main, Anda dapat menulis file di sana dengan -obfuscated-output:

Terminal window
wails3 generate bindings -obfuscated -obfuscated-output ./internal/services

Garble belum terinstal atau $(go env GOPATH)/bin tidak ada di PATH Anda.

Terminal window
go install mvdan.cc/[email protected]
export PATH="$PATH:$(go env GOPATH)/bin"

Frontend menerima nilai field salah atau kosong

Section titled “Frontend menerima nilai field salah atau kosong”

Tipe return service Anda tidak memiliki tag json:"...". Periksa setiap struct yang dikembalikan metode terikat dan tambahkan tag eksplisit ke setiap field exported.

File ID stabil hilang atau tidak dikompilasi. Periksa:

  • wails_obfuscated.gen.go ada di direktori paket main (atau direktori yang Anda teruskan ke -obfuscated-output)
  • Anda menjalankan wails3 build --obfuscated, yang menambahkan build tag wails_obfuscated
  • Jika Anda menggunakan -obfuscated-output, paket tujuan diimpor oleh main

Windows Defender menandai build sebagai virus

Section titled “Windows Defender menandai build sebagai virus”

Binary Go ter-obfuscate Garble ditandai secara heuristik oleh Windows Defender selama build karena tidak memiliki simbol debug dan menyerupai executable packed. Build gagal dengan:

open C:\Users\...\AppData\Local\Temp\go-build...\a.out.exe: The file contains a virus or potentially unwanted software.

Tambahkan direktori temp (tempat Go menulis artifact build intermediate) dan direktori proyek ke daftar exclusion Defender:

Terminal window
Add-MpPreference -ExclusionPath "$env:TEMP"
Add-MpPreference -ExclusionPath "C:\path\to\your\project"

Exclusion ini hanya berlaku untuk path yang ditentukan dan tidak menonaktifkan Defender secara global.

Garble v0.16.0 memerlukan Go 1.26.2 atau lebih baru. Upgrade Go, atau konsultasikan halaman rilis Garble untuk versi yang kompatibel dengan toolchain Anda.