我用Go构建了一个简单的可执行程序。

我已经将代码编译成静态二进制程序。

我想反编译输出二进制文件并获取Go源代码。

这有可能吗?


没有工具可以执行此操作,并且由于Go程序已编译为机器代码,因此它们所包含的信息不足,无法将其转换回Go代码。但是,仍然可以使用标准拆卸??技术。


目前尚无已知工具可反编译为Go源码。

Go是一种本地语言编译器,与Java和类似语言不同,后者依赖于类加载器,它使用链接器来生成其可执行文件。
因此,像在C语言和类似语言中一样,仅重建调用树要困难得多。

调试信息(例如符号)通常会从Go可执行文件中删除。

即使在Golang代码的符号调试方面也很少。

例如,GDB在当前状态下是AFAIK,与Go架构不符,实际上在Golang符号调试方面不起作用。出于这个原因,Go GDB已从IntelliJide脱离。

有一些尝试性的尝试,试图让某些用户重新获得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