用Go语言反编译一个已编译的程序

nszi6y05  于 2022-12-07  发布在  Go
关注(0)|答案(3)|浏览(650)

我用Go构建了一个简单的可执行程序。
我已经把代码编译成了一个静态二进制程序。
我想反编译输出的二进制文件,得到Go语言的源代码。
这可能吗?

dkqlctbz

dkqlctbz1#

没有工具可以做到这一点,而且由于Go语言的程序被编译成机器码,它们没有足够的信息来将它们转换回Go语言代码,尽管标准的反汇编技术仍然是可行的。

hmae6n7t

hmae6n7t2#

目前还没有已知的工具可以反编译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语言的其他符号调试器也需要插入非标准代码来支持调试器,例如Hopwatch
因此,如果你需要对一个Go语言程序进行逆向工程,最好使用传统的、低级的逆向工程工具,比如IDA PRO,这是完全可能的,但最多只能得到类似伪代码C或ASM的东西,而不是Go语言的源代码。
该语言的某些特征在其他语言中是不存在的,例如通道,这些特征需要一些研究和非平凡的方法。例如:http://jolmos.blogspot.nl/2014/09/inbincible-writeup-golang-binary.html

r6vfmomb

r6vfmomb3#

现在一天的有一种方法来逆向工程,但仍然有很多努力涉及之后.
参考:GoTools
这与[Ghidra],(https://github.com/NationalSecurityAgency/ghidra/releases),一个NSA逆向工程工具一起工作。
GoLang Renamer
注意:在尝试任何这些之前,请参考当地的法律,你没有搞砸任何专有软件。这个Python脚本在一些后期任务中有帮助。

相关问题