golang 如何保护源码

 2022-12-12

DWARF信息对于小黑客们可是如获至宝,这些关键信息不能留下。而且去掉这些东西也非常简单:

go build -ldflags "-s -w” [<your/package]
(需要Go版本大于1.7)

这里的 -ldflags 参数最终会在 go tool link 的时候传给它, go tool link -h解释如下

...
  -s    disable symbol table
  -w    disable DWARF generation

删除掉调试符号的另一个好处就是,显著减小了文件大小(平均20%)

-rwxr-xr-x 1 tim staff 1636736 May 5 11:59 bin/hello  <- 标准编译
-rwxr-xr-x 1 tim staff 1190272 May 5 11:59 hello      <- stripped

再加一个UPX壳,还可以压缩到原文件大小的五分之一!不知道为啥,go语言的二进制特别好压!



go编译的时候默认会将代码和行号包含到gdb调试信息里,使用gdb还是可以看见源码,编译的时候加-ldflags "-s -w"可以去掉调试信息。