Security 如何在Golang二进制文件中混淆变量、函数和包名的字符串?

Security 如何在Golang二进制文件中混淆变量、函数和包名的字符串?,security,go,binary,obfuscation,Security,Go,Binary,Obfuscation,当使用命令“nm go_binary”时,我发现变量、函数和包的名称,甚至我的代码所在的目录都会显示出来,有没有办法混淆命令“go build”生成的二进制文件并防止go binary被黑客利用?我认为这个问题的最佳答案在这里,特别是这个 虽然这个问题是关于Python的,但它通常适用于所有代码 我本想把这个问题标记为一个重复的问题,但也许有人会提供更多的见解 模糊处理不能阻止逆向工程,但在某种程度上可以防止信息泄漏 这就是(Go 1.16+,2021年2月): 文字混淆 使用-literals

当使用命令“nm go_binary”时,我发现变量、函数和包的名称,甚至我的代码所在的目录都会显示出来,有没有办法混淆命令“go build”生成的二进制文件并防止go binary被黑客利用?

我认为这个问题的最佳答案在这里,特别是这个

虽然这个问题是关于Python的,但它通常适用于所有代码

我本想把这个问题标记为一个重复的问题,但也许有人会提供更多的见解

模糊处理不能阻止逆向工程,但在某种程度上可以防止信息泄漏

这就是(Go 1.16+,2021年2月):

文字混淆 使用
-literals
标志会将字符串等文字表达式替换为更复杂的变体,在运行时解析为相同的值。
此功能是可选的,因为它可能会根据输入代码导致减速

用作常量的文字表达式不能混淆,因为它们是在编译时解析的。这包括
const
声明的任何表达式部分

微小模式 传递
-tiny
标志时,将从生成的Go二进制文件中删除额外信息。
这包括行号、文件名和运行时中打印错误、致命错误和跟踪/调试信息的代码。
总而言之,在我们的测试中,这可以使二进制文件小2-5%,并防止提取更多信息

使用此标志,将不会打印任何紧急或致命的运行时错误,但它们仍然可以通过恢复在内部正常处理。
此外,
GODEBUG
环境变量将被忽略

但是:

导出的方法目前永远不会混淆,因为接口和反射可能需要它们。这方面的工作正在进行中


混淆名称并不能阻止任何逆向工程,它几乎不会减慢过程。?看起来不错;)@JimB感谢您的快速回复。模糊处理不能阻止逆向工程,但在某种程度上可以防止信息泄漏。