我用 Go
构建了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出的二进制文件并获取 Go 源代码。
这可能吗?
原文由 Temüjin 发布,翻译遵循 CC BY-SA 4.0 许可协议
我用 Go
构建了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出的二进制文件并获取 Go 源代码。
这可能吗?
原文由 Temüjin 发布,翻译遵循 CC BY-SA 4.0 许可协议
目前没有已知的工具可以反编译为 Go 源代码。
Go 是一种本地语言编译器,与依赖类加载器的 Java 和类似语言不同,它使用链接器来生成其可执行文件。因此,就像在 C 和类似语言中一样,仅仅重建调用树要困难得多。
诸如符号之类的调试信息通常会从 Go 可执行文件中剥离。
即使就 Golang 代码的符号调试而言,也很少见。
例如,GDB 在其当前状态下是 AFAIK,与 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
原文由 Michele Giuseppe Fadda 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
1 回答1.5k 阅读
没有工具可以做到这一点,并且由于 Go 程序被编译成机器代码,它们不包含足够的信息来将它们翻译回 Go 代码。尽管如此,标准的反汇编技术仍然是可能的。