関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
garbleというGo向けの難読化ツールがあるのを知りました。
面白そうなので、ちょっと使ってみたメモを残しておきます。
試してみた
インストール
$ go install mvdan.cc/garble@latest go: downloading mvdan.cc/garble v0.12.0 go: downloading github.com/rogpeppe/go-internal v1.12.0 go: downloading golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 go: downloading github.com/bluekeyes/go-gitdiff v0.7.1
バージョン確認
$ garble version mvdan.cc/garble v0.12.0 Build settings: -buildmode exe -compiler gc DefaultGODEBUG httplaxcontentlength=1,httpmuxgo121=1,tls10server=1,tlsrsakex=1,tlsunsafeekm=1 CGO_ENABLED 1 GOARCH amd64 GOOS linux GOAMD64 v1
試すソースコードを用意
package main import ( "log" "sync" ) func init() { log.SetFlags(0) } func main() { const ( WORKERS = 5 ) var ( ch = make(chan int) wg sync.WaitGroup ) wg.Add(WORKERS) for i := range WORKERS { go func(i int) { defer wg.Done() ch <- i }(i) } go func() { defer close(ch) wg.Wait() }() for v := range ch { log.Println(v) } }
ビルド
通常のビルドとgarbleでビルドしたものを用意
$ go build -o app-normal $ garble build -o app-garble
$ ls -lh app-* -rwxr-xr-x 1 gitpod gitpod 1.3M Feb 14 09:03 app-garble -rwxr-xr-x 1 gitpod gitpod 2.0M Feb 14 09:02 app-normal
ファイルサイズが少し小さくなっている。
go versionで見てみる
$ go version ./app-normal ./app-normal: go1.22.0 $ go version ./app-garble ./app-garble: unknown
garbleでビルドした方は unknown になっていますね。
実行
$ ./app-normal 0 2 1 3 4 $ ./app-garble 2 1 0 3 4
実行は普通に出来ます。
バイナリをちょっと確認
全部見るのは大きいので、末尾の方だけ。
$ hexdump -C ./app-normal | tail -n 30 001e8200 78 63 65 65 64 65 64 45 72 72 6f 72 2c 65 72 72 |xceededError,err| 001e8210 6f 72 00 67 6f 3a 6d 61 69 6e 2e 69 6e 69 74 74 |or.go:main.initt| 001e8220 61 73 6b 73 00 67 6f 3a 72 75 6e 74 69 6d 65 2e |asks.go:runtime.| 001e8230 69 6e 69 74 74 61 73 6b 73 00 72 75 6e 74 69 6d |inittasks.runtim| 001e8240 65 2e 64 65 66 61 75 6c 74 47 4f 52 4f 4f 54 2e |e.defaultGOROOT.| 001e8250 73 74 72 00 72 75 6e 74 69 6d 65 2e 62 75 69 6c |str.runtime.buil| 001e8260 64 56 65 72 73 69 6f 6e 2e 73 74 72 00 72 75 6e |dVersion.str.run| 001e8270 74 69 6d 65 2e 6d 6f 64 69 6e 66 6f 2e 73 74 72 |time.modinfo.str| 001e8280 00 67 6f 3a 62 75 69 6c 64 69 6e 66 6f 00 67 6f |.go:buildinfo.go| 001e8290 3a 62 75 69 6c 64 69 6e 66 6f 2e 72 65 66 00 74 |:buildinfo.ref.t| 001e82a0 79 70 65 3a 2a 00 72 75 6e 74 69 6d 65 2e 74 65 |ype:*.runtime.te| 001e82b0 78 74 73 65 63 74 69 6f 6e 6d 61 70 00 00 2e 74 |xtsectionmap...t| 001e82c0 65 78 74 00 2e 6e 6f 70 74 72 64 61 74 61 00 2e |ext..noptrdata..| 001e82d0 64 61 74 61 00 2e 62 73 73 00 2e 6e 6f 70 74 72 |data..bss..noptr| 001e82e0 62 73 73 00 2e 67 6f 2e 66 75 7a 7a 63 6e 74 72 |bss..go.fuzzcntr| 001e82f0 73 00 2e 67 6f 2e 62 75 69 6c 64 69 6e 66 6f 00 |s..go.buildinfo.| 001e8300 2e 6e 6f 74 65 2e 67 6f 2e 62 75 69 6c 64 69 64 |.note.go.buildid| 001e8310 00 2e 65 6c 66 64 61 74 61 00 2e 72 6f 64 61 74 |..elfdata..rodat| 001e8320 61 00 2e 74 79 70 65 6c 69 6e 6b 00 2e 69 74 61 |a..typelink..ita| 001e8330 62 6c 69 6e 6b 00 2e 67 6f 73 79 6d 74 61 62 00 |blink..gosymtab.| 001e8340 2e 67 6f 70 63 6c 6e 74 61 62 00 2e 73 79 6d 74 |.gopclntab..symt| 001e8350 61 62 00 2e 73 74 72 74 61 62 00 2e 64 65 62 75 |ab..strtab..debu| 001e8360 67 5f 61 62 62 72 65 76 00 2e 64 65 62 75 67 5f |g_abbrev..debug_| 001e8370 66 72 61 6d 65 00 2e 64 65 62 75 67 5f 69 6e 66 |frame..debug_inf| 001e8380 6f 00 2e 64 65 62 75 67 5f 6c 6f 63 00 2e 64 65 |o..debug_loc..de| 001e8390 62 75 67 5f 6c 69 6e 65 00 2e 64 65 62 75 67 5f |bug_line..debug_| 001e83a0 67 64 62 5f 73 63 72 69 70 74 73 00 2e 64 65 62 |gdb_scripts..deb| 001e83b0 75 67 5f 72 61 6e 67 65 73 00 2e 73 68 73 74 72 |ug_ranges..shstr| 001e83c0 74 61 62 00 |tab.| $ hexdump -C ./app-garble | tail -n 30 00148810 3a 8c 4a 00 00 00 00 00 18 00 00 00 00 00 00 00 |:.J.............| 00148820 2f 96 4a 00 00 00 00 00 1b 00 00 00 00 00 00 00 |/.J.............| 00148830 d6 9c 4a 00 00 00 00 00 1d 00 00 00 00 00 00 00 |..J.............| 00148840 8e 7f 4a 00 00 00 00 00 14 00 00 00 00 00 00 00 |..J.............| 00148850 79 72 4a 00 00 00 00 00 10 00 00 00 00 00 00 00 |yrJ.............| 00148860 72 7c 4a 00 00 00 00 00 13 00 00 00 00 00 00 00 |r|J.............| 00148870 ab 6f 4a 00 00 00 00 00 0f 00 00 00 00 00 00 00 |.oJ.............| 00148880 c9 75 4a 00 00 00 00 00 11 00 00 00 00 00 00 00 |.uJ.............| 00148890 98 78 4a 00 00 00 00 00 12 00 00 00 00 00 00 00 |.xJ.............| 001488a0 49 92 4a 00 00 00 00 00 1a 00 00 00 00 00 00 00 |I.J.............| 001488b0 ba 6f 4a 00 00 00 00 00 0f 00 00 00 00 00 00 00 |.oJ.............| 001488c0 a2 7f 4a 00 00 00 00 00 14 00 00 00 00 00 00 00 |..J.............| 001488d0 4a 96 4a 00 00 00 00 00 1b 00 00 00 00 00 00 00 |J.J.............| 001488e0 0b 63 4a 00 00 00 00 00 0a 00 00 00 00 00 00 00 |.cJ.............| 001488f0 80 82 4a 00 00 00 00 00 15 00 00 00 00 00 00 00 |..J.............| 00148900 7d b5 4a 00 00 00 00 00 25 00 00 00 00 00 00 00 |}.J.....%.......| 00148910 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00148920 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00148930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 0014a000 00 2e 74 65 78 74 00 2e 6e 6f 70 74 72 64 61 74 |..text..noptrdat| 0014a010 61 00 2e 64 61 74 61 00 2e 62 73 73 00 2e 6e 6f |a..data..bss..no| 0014a020 70 74 72 62 73 73 00 2e 67 6f 2e 66 75 7a 7a 63 |ptrbss..go.fuzzc| 0014a030 6e 74 72 73 00 2e 67 6f 2e 62 75 69 6c 64 69 6e |ntrs..go.buildin| 0014a040 66 6f 00 2e 65 6c 66 64 61 74 61 00 2e 72 6f 64 |fo..elfdata..rod| 0014a050 61 74 61 00 2e 74 79 70 65 6c 69 6e 6b 00 2e 69 |ata..typelink..i| 0014a060 74 61 62 6c 69 6e 6b 00 2e 67 6f 73 79 6d 74 61 |tablink..gosymta| 0014a070 62 00 2e 67 6f 70 63 6c 6e 74 61 62 00 2e 73 68 |b..gopclntab..sh| 0014a080 73 74 72 74 61 62 00 |strtab.|
変わってますね。
参考情報
Goのおすすめ書籍
上の書籍の日本語版が下です。
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。