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

时间:2016-05-08 15:00:56

标签: security go binary obfuscation

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

2 个答案:

答案 0 :(得分:0)

我认为这个问题的最佳答案是How do I protect Python code?,特别是answer

虽然这个问题与Python有关,但它适用于所有代码。

我将这个问题标记为重复,但也许有人会提供更多的洞察力。

答案 1 :(得分:0)

<块引用>

混淆不能阻止逆向工程,但可以防止信息泄漏

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

<块引用>

文字混淆

使用 -literals 标志会导致文字表达式(例如字符串)被更复杂的变体替换,从而在运行时解析为相同的值。
此功能是可选的,因为它可能会导致速度变慢,具体取决于输入代码。

<块引用>

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

微型模式

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

有了这个标志,就不会打印任何恐慌或致命的运行时错误,但它们仍然可以在内部正常处理,恢复正常。
此外,GODEBUG 环境变量将被忽略。

但是:

<块引用>

导出的方法目前不会被混淆,因为接口和反射可能需要它们。该领域正在进行中。