使用Go反编译已编译的程序

Cha*_*kka 26 compiler-construction decompiling go

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

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

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

这可能吗?

fuz*_*fuz 44

没有工具可以做到这一点,并且当Go程序被编译成机器代码时,它们不包含足够的信息来将它们转换回Go代码.但是仍然可以使用标准的拆卸技术.

  • JEB 反汇编器网站上有一篇关于如何将 golang 提取为伪 C 的博客文章。它并不完全是编写 Golang 代码,但它可以让您弄清楚应用程序内部发生了什么。 (3认同)
  • 仅仅因为没有足够的信息被编译到机器代码中并不意味着不能从中生成等效的 golang 程序 (2认同)

Mic*_*dda 25

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

  • 这些东西到了2022年还有效吗?IE。没有已知的工具可以反编译已编译的 go 二进制文件? (5认同)

Mar*_*miK 5

现在已经有了逆向工程的方法,但之后仍然需要付出很多努力。

参考:GoTools

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

Go 语言重命名器

此 Python 脚本有助于某些反编译后任务的重命名。

注意:在尝试任何此操作之前,请参阅当地法律,确保您不会弄乱任何专有软件。