V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhve2x4
V2EX  ›  问与答

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

  •  1
     
  •   zhve2x4 · 2019-12-27 15:26:46 +08:00 · 2882 次点击
    这是一个创建于 1798 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先说一下,我编译 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 二进制文件中的***全部源码***?

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

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

    目前我不知道怎么解决你的问题! 不过以后,如果你自己的代码,实在不想别人看见,可以在 github 建个私有的包.. 这种只保存在本地... 实在是太不保险了
    Immortal
        11
    Immortal  
       2019-12-27 16:06:57 +08:00
    用啥写的代码 goland 一类有本地 history
    ck65
        12
    ck65  
       2019-12-27 16:16:05 +08:00
    gitlab.com 无限免费私有仓库它不香吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1260 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.