天呀, go 可执行文件泄露源码

2019-12-27 15:26:46 +08:00
 zhve2x4

首先说一下,我编译 go 源码的时候,只是简单的 go build,没有带额外参数 然后我放到 linux 服务器上,使用 gdb list,然后就看到源码了。 类似如下:

(gdb) list 1
1	package main
2	
3	import (
4		"uvs/config"
5		"uvs/db"
6		"uvs/httpserver"
7		"uvs/log"
8		"uvs/model"
9		"fmt"
10		"github.com/sirupsen/logrus"

现在问题来了,是不是说,我完全可以通过 gdb 或类似的工具获取常规方法编译的 go 二进制文件中的***全部源码***?

2878 次点击
所在节点    问与答
12 条回复
manami
2019-12-27 15:35:07 +08:00
在 linux 服务器端看到源码正常,别人又不能看到。如果是客户端看到源码(反编译)也正常,把核心逻辑代码放在服务器端就行。
sabermiao
2019-12-27 15:37:28 +08:00
By default, go build combines symbol and debug info with binary files. However, you can remove the symbol and debug info with go build -ldflags "-s -w".
编译的时候去掉符号和调试信息就行了
lishunan246
2019-12-27 15:38:33 +08:00
默认编译的是 release with debug info。
不想要的话 go build -ldflags "-s"
zhve2x4
2019-12-27 15:40:29 +08:00
为什么今天我发这个主题,因为有个悲催的事情,我的源码被删了,但是二进制还在,我想从二进制获取 go 的源码。
cmdOptionKana
2019-12-27 15:43:38 +08:00
这年头写程序不用 git 之类的,会有如履薄冰的危险感……
fuxiaohei
2019-12-27 15:45:18 +08:00
各种常量、文本等很容易找到。但是你要从二进制还原到代码,非常困难啊
zhve2x4
2019-12-27 15:47:11 +08:00
@cmdOptionKana 已经用了 git,但是没有 push 到服务器,服务器上的代码比较旧,参考价值不大。然后我不知道脑子哪根筋不对,直接 rm -rf 删了本地代码( linux 桌面的)。
learnshare
2019-12-27 15:49:30 +08:00
@zhve2x4 用 Git 不同步到远端,哪来安全性可言
tiedan
2019-12-27 15:50:19 +08:00
清除符号表和调试信息
ylsc633
2019-12-27 16:01:15 +08:00
"为什么今天我发这个主题,因为有个悲催的事情,我的源码被删了,但是二进制还在,我想从二进制获取 go 的源码。"

对不起, 我还是笑出了声...

目前我不知道怎么解决你的问题! 不过以后,如果你自己的代码,实在不想别人看见,可以在 github 建个私有的包.. 这种只保存在本地... 实在是太不保险了
Immortal
2019-12-27 16:06:57 +08:00
用啥写的代码 goland 一类有本地 history
ck65
2019-12-27 16:16:05 +08:00
gitlab.com 无限免费私有仓库它不香吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX