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"可以去掉调试信息。