thinkhy
thinkhy

Reputation: 933

How to obfuscate string of variable, function and package names in Golang binary?

When use command "nm go_binary", I find the names of variables, functions and packages and even the directory where my code is located are all displayed, is there any way to obfuscate the binary generated by the command "go build" and prevent go binary from being exploited by hackers?

Upvotes: 0

Views: 4198

Answers (2)

VonC
VonC

Reputation: 1323025

Obfuscating can't stop reverse engineering but in a way prevent info leakage

That is what burrowers/garble (Go 1.16+, Feb. 2021):

Literal obfuscation

Using the -literals flag causes literal expressions such as strings to be replaced with more complex variants, resolving to the same value at run-time.
This feature is opt-in, as it can cause slow-downs depending on the input code.

Literal expressions used as constants cannot be obfuscated, since they are resolved at compile time. This includes any expressions part of a const declaration.

Tiny mode

When the -tiny flag is passed, extra information is stripped from the resulting Go binary.
This includes line numbers, filenames, and code in the runtime that prints panics, fatal errors, and trace/debug info.
All in all this can make binaries 2-5% smaller in our testing, as well as prevent extracting some more information.

With this flag, no panics or fatal runtime errors will ever be printed, but they can still be handled internally with recover as normal.
In addition, the GODEBUG environmental variable will be ignored.

But:

Exported methods are never obfuscated at the moment, since they could be required by interfaces and reflection. This area is a work in progress.

Upvotes: 2

OneOfOne
OneOfOne

Reputation: 99195

I think the best answer to this question is here How do I protect Python code?, specifically this answer.

While that question is about Python, it applies to all code in general.

I was gonna mark this question as a duplicate, but maybe someone will provide more insight into it.

Upvotes: 0

Related Questions