我有一个可执行文件,我想弄清楚哪种编程语言是编写的源代码。第一步是使用反汇编程序。

那之后应该怎么做?我应该如何确定使用哪些库?

评论

可能相关:机器代码中的哪些提示可以将我指向用于生成该代码的编译器?和什么是FLIRT签名?

目标是什么?事情可能会从一个操作系统急剧变化到另一个操作系统(以及工具)。

@Emmanuel Ubuntu

您可以使用其他一些编译器标识符工具:类别:编译器标识符-协作RCE工具库woodmann.com/collaborative/tools/index.php/…

#1 楼

实际上,我建议您使用十六进制查看器/编辑器查看可执行文件。这样一来,您就可以立即看到编译器是否嵌入了任何字符串作为提示。您还应该考虑到某些语言使用C作为中间语言。例如,将Fortran 77转换为C编译器。看来f2c还链接了一个支持库,所以您会寻找它。

要确定在Linux上使用的是哪个库,可以将ldd命令用于动态二进制文件,将nm用于静态二进制文件进行转储。符号。 SO上也有一个相关问题。

评论


好的答案,您会惊讶于这种低技术含量的方法多久有效!除此之外,即使在f2c情况下,您也可能会看到转换器使用的点模式来表示Fortran概念或从Fortran转换为C约定。

–伊戈尔·斯科钦斯基♦
13年3月25日在16:25

#2 楼

我使用了几种工具:



PEiD(PE iDentifier)
我还遵循了本指南,将PEiD签名转换为YARA签名,并且很简单二手的YARA


TRiD还可以提供另一种方法来识别二手的编译器。

还值得一提的是,如果将文件提交给Virus Total,它们将运行针对您的二进制文件的TRiD。

这些工具并不总是确定的,但它们通常可以为您提供所使用的正确编译器(以及相应的语言)。