我用Go
构建了一个简单的可执行程序。
我已将代码编译成静态二进制程序。
我想反编译输出二进制文件并获取Go源代码。
这可能与否?
答案 0 :(得分:39)
没有工具可以做到这一点,并且当Go程序被编译成机器代码时,它们不包含足够的信息来将它们转换回Go代码。但是仍然可以使用标准的拆卸技术。
答案 1 :(得分:23)
目前没有已知的工具可以反编译为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的其他符号调试器还需要插入非标准代码以支持调试器,例如, Hopwatch
因此,如果您需要对Go程序进行逆向工程,那么您最好使用传统的低级逆向工程工具,例如IDA PRO。这绝对是可能的,但最多你会得到类似伪代码C或ASM的内容,而不是Go源代码。
该语言的某些功能在其他语言中不存在,例如渠道,这些需要一些研究和非平凡的方法。例如:http://jolmos.blogspot.nl/2014/09/inbincible-writeup-golang-binary.html