我希望销售Go应用程序。我会提供序列号给我的客户。有没有办法让破解应用变得更复杂一点?
我说破解C应用程序很复杂,而破解Java应用程序很容易。有没有工具可以让Go应用破解工作像破解C应用一样难?或者是一些教程?至少我可以做点什么来保护我的项目。我不会问超重保护的问题。
发布于 2014-01-05 07:29:31
一旦你有了二进制文件本身,混淆就变得相当困难。人们以前也尝试过将符号从Go二进制文件中剥离出来,但这通常会导致不稳定和不可预测的行为,因为某些反射操作需要符号。
虽然不一定要混淆静态链接的库,但可以通过在编译前将变量、类型和函数名称更改为无意义的名称来混淆/own/代码。如果你想更进一步,你可以尝试获取你正在使用的库的源代码(标准库的源代码是可用的,并且包含在大多数go安装中),并将这种混淆应用于库源代码。
至于编译后的二进制修改,正如我之前提到的,最好是远离它。
发布于 2014-01-05 18:59:51
补充一下joshlf13的答案:虽然不建议剥离Go二进制文件,但有一个标记可以传递给链接器,以始终忽略调试符号:
将'-s‘标志传递给链接器以忽略调试信息(例如,go build -ldflags "-s“prog.go)。
(Debugging Go Code with GDB)
这至少应该是一种更好的方式,因为我还没有看到任何类似于编译后剥离符号的警告。
发布于 2021-05-31 20:24:29
另一种选择,使用Go 1.16+ (Feb. 2021
burrowers/garble生成的二进制代码与常规构建一样有效,但它包含的关于原始源代码的信息尽可能少。
该工具设计为:
在给定相同的初始源code
cmd/go结合使用,以支持模块并构建可重现的,从而消除对死机堆栈跟踪的混淆
这可能不足以满足您的需求,但这是一个很好的开始。
https://stackoverflow.com/questions/20927250
复制相似问题