首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何保护Go二进制文件不被破解

如何保护Go二进制文件不被破解
EN

Stack Overflow用户
提问于 2014-01-05 05:58:20
回答 3查看 6.4K关注 0票数 14

我希望销售Go应用程序。我会提供序列号给我的客户。有没有办法让破解应用变得更复杂一点?

我说破解C应用程序很复杂,而破解Java应用程序很容易。有没有工具可以让Go应用破解工作像破解C应用一样难?或者是一些教程?至少我可以做点什么来保护我的项目。我不会问超重保护的问题。

EN

回答 3

Stack Overflow用户

发布于 2014-01-05 07:29:31

一旦你有了二进制文件本身,混淆就变得相当困难。人们以前也尝试过将符号从Go二进制文件中剥离出来,但这通常会导致不稳定和不可预测的行为,因为某些反射操作需要符号。

虽然不一定要混淆静态链接的库,但可以通过在编译前将变量、类型和函数名称更改为无意义的名称来混淆/own/代码。如果你想更进一步,你可以尝试获取你正在使用的库的源代码(标准库的源代码是可用的,并且包含在大多数go安装中),并将这种混淆应用于库源代码。

至于编译后的二进制修改,正如我之前提到的,最好是远离它。

票数 9
EN

Stack Overflow用户

发布于 2014-01-05 18:59:51

补充一下joshlf13的答案:虽然不建议剥离Go二进制文件,但有一个标记可以传递给链接器,以始终忽略调试符号:

将'-s‘标志传递给链接器以忽略调试信息(例如,go build -ldflags "-s“prog.go)。

(Debugging Go Code with GDB)

这至少应该是一种更好的方式,因为我还没有看到任何类似于编译后剥离符号的警告。

票数 7
EN

Stack Overflow用户

发布于 2021-05-31 20:24:29

另一种选择,使用Go 1.16+ (Feb. 2021

burrowers/garble生成的二进制代码与常规构建一样有效,但它包含的关于原始源代码的信息尽可能少。

该工具设计为:

在给定相同的初始源code

  • Reversible的情况下,
  • cmd/go结合使用,以支持模块并构建可重现的

,从而消除对死机堆栈跟踪的混淆

这可能不足以满足您的需求,但这是一个很好的开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20927250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档