如何保护(obsfucate)二进制文件破解

Shu*_*ken 11 go source-code-protection

我想卖Go应用程序.我会为我的客户提供序列号.有没有办法让它破解应用程序有点复杂?

我说破解C应用程序很复杂,很容易破解Java应用程序.有没有工具可以让Go app破解工作和破解C app一样难?还是一些教程?至少我能做些什么来保护我的项目.我不问超重保护.

jos*_*hlf 9

一旦你拥有二进制文件,混淆是非常困难的.人们之前尝试从Go二进制文件中剥离符号,但它通常会导致不稳定和不可预测的行为,因为某些反射操作需要符号.

虽然您不一定会混淆静态链接的库,但您可以通过在编译之前将变量,类型和函数名称更改为无意义的名称来模糊您自己的/代码.如果您想更进一步,可以尝试获取您正在使用的库的源代码(标准库的源代码可用并包含在大多数Go安装中),并将此混淆应用于库源代码也是如此.

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


jus*_*nas 6

要添加joshlf13的答案:虽然不建议剥离Go二进制文件,但是有一个标志可以传递给链接器以便一直省略调试符号:

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

(使用GDB调试Go代码)

这至少应该是一种更好的方法,因为我没有看到任何关于这一点的警告,比如关于在编译后剥离符号的警告.

  • 我不知道究竟是如何实现反射的,但它似乎是在Go运行时本身完成的,而不是依赖于调试符号.[此程序](http://play.golang.org/p/GYc-NWb_FZ)即使没有调试符号也运行良好. (2认同)
  • 妈的.即使它破坏了运行时反射,它看起来也是有侵略性的.看看这个[代码片段](https://gist.github.com/joshlf13/8273261)(它获取main的地址,然后使用反射来查找函数的名称). (2认同)
  • 似乎在以后的版本中修复:在Go 1.2和[它的工作]下编译它(http://pastebin.com/raw.php?i=83e0brfp). (2认同)