我用
Go
构建了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出的二进制文件并获取Go源代码。
这可能吗?
没有工具可以做到这一点,并且当 Go 程序被编译成机器代码时,它们不包含足够的信息来将它们翻译回 Go 代码。不过,标准拆卸技术仍然是可能的。
目前没有已知的工具可以反编译为 Go 源代码。
Go 是一种本机语言编译器,与依赖类加载器的 Java 和类似语言不同,Go 使用链接器来生成其可执行文件。 因此,与 C 和类似语言一样,仅仅重建调用树就困难得多。
诸如符号之类的调试信息通常会从 Go 可执行文件中删除。
即使在 Golang 代码的符号调试方面也很少。
例如,据我所知,GDB 目前的状态与 Go 架构不相符,并且在 Golang 符号调试方面实际上不起作用。正是出于这个原因,Go GDB 已从 IntelliJ ide 中删除。
一些用户尝试重新获得 GDB 功能,但这些需要使用特殊的非标准条款编译 Go 源代码才能支持调试。例如。: http://blog.securitymouse.com/2014/10/golang-debugging-turning-pennies-into-gs.html Go 的其他符号调试器也需要插入非标准代码以支持调试器,例如跳表
因此,如果您需要对 Go 程序进行逆向工程,最好使用传统的、较低级别的逆向工程工具,例如 IDA PRO。这绝对是可能的,但最多你会得到类似伪代码 C 或 ASM 的东西,而不是 Go 源代码。
该语言的某些功能在其他语言中是不存在的,例如渠道,而这些需要一些研究和不平凡的方法。例如:http://jolmos.blogspot.nl/2014/09/inbincible-writeup-golang-binary.html
现在有一种方法可以进行逆向工程, 但之后仍然需要付出很多努力。
参考:GoTools
这适用于 [Ghidra](https://github.com/NationalSecurityAgency/ghidra/releases),NSA 的逆向工程工具。
此 Python 脚本有助于某些反编译后任务重命名。
注意:在尝试任何此操作之前,请参阅当地法律,确保您不会弄乱任何专有软件。
有一个项目,您可以使用它来获取有关剥离的二进制文件的一些详细信息: https://github.com/goretk/redress