用Go编译编译的程序



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

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

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

这是否可能?

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

目前没有已知的工具可以反编译成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

现在有一种逆向工程的方法,但在那之后还有很多工作要做。

参考:GoTools

这适用于[Ghidra], (https://github.com/NationalSecurityAgency/ghidra/releases),一个NSA逆向工程工具。

GoLang重命名

这个Python脚本帮助在一些反编译后的任务中重命名。

注意:在尝试任何这些之前,请参考当地法律,以确保您没有混淆任何专有软件。

最新更新