查找使用的编程语言

什么是最简单的方法来找出编写应用程序的编程语言? 我想知道如果它的VB或C + +或DELPHI或。NET等程序EXE文件。

试试PEiD

当然,如果他们使用打包机,一些拆包将需要做的第一:)

启动它,并检查它与Process Explorer一起使用的运行时DLL。

如果这不能立即显而易见,请在网上搜索这些DLL的引用。

大多数反汇编(包括我认为的Olly)可以很容易地显示EXE或DLL中包含的文本,有时也可以提供线索。 Delphi类型通常以TMyClass中的T为前缀。

如果它是一个小的可执行文件,没有DLL引用,没有文本,你可能是SOL。 在这一点上,你需要寻找特定编译器的习惯用法,而这大部分是猜测。

有一种艺术来检测一个程序是用什么语言编写的。这是可能的,但没有硬性规定。 这需要很多的经验(这也导致了“你为什么要…”的问题,但是这里有一些关于如何去做的想法。

你要找的是一个“签名”。 签名可以是编译器包含的某个字符串,对正在使用的编程工具中相当常见的API的引用,甚至可以是所使用工具通用的编程风格,在包含的字符串中可见在应用程序中。

此外,部署应用程序的样式也很多:部署目录中的各种配置文件,dll和程序集,甚至图像,目录或图标。

封装在自启动可执行文件中的Java应用程序将包含对java库的引用,并且可能在同一个目录中包含某些指定它为java的库或文件。

正如其他答案中所指出的,一个托管程序集也会显示一些标志:你可以在Reflector等中打开它。虽然编译后c#和VB是“可互换的”是正确的,但它们是相同的。 如果您使用Reflector反汇编VB代码,您将经常看到程序集引用了Microsoft.VisualBasic.dll程序集。 您将能够区分Mono应用程序,因为它们很可能包含对单声道程序集的引用。

许多编译器以某种方式组装和链接代码,并留下足迹。 例如,使用Process Explorer中的 “strings:”选项卡检查一个窗口的可执行文件,会看到很多字符串,使用这些可以在exe文件中确定编程风格,调用方法,错误或跟踪方法。

一个示例是编译器使用不同的本地化机制:Microsoft将本地化的字符串存储在XML文件或资源文件中。 其他编译器将使用不同的策略。

另一个例子是c + + 名称mangling 。 CodeWarrior编译器使用不同的算法来压缩调用的成员变量和函数的名称,而不是Visual Studio。

我想你可以写一本关于准确确定任何可执行文件的血统的书。 这个主题可能会被称为“编程考古学”。

你可以尝试使用Depends来查看它有哪些运行时依赖,这可能会提供一些线索。

最简单的方法是询问程序的开发者。 它不需要任何知识和实用程序。

  • 确定Delphi应用程序
  • 使用eda_preview270.exe(从这里 )或其他间谍工具,并检查窗口类名称。 如果他们阅读像TButton或TfrmBlubb,这是一个VCL应用程序。 如果他们有一个“Afx”,它可能是MFC。

编译语言(我的意思是没有脚本语言,或Java,.NET等)编译成CPU汇编指令,这本质上是一个单向转换。 通常不可能确定程序是用哪种语言编写的。但是,使用依赖关系walker,可以确定程序正在加载哪个运行时库(如果有的话),从而确定使用哪种语言(例如MS Visual C ++ 9使用msvcr90.dll)。

你可以检查是.net程序集是否通过尝试用ildasm.exe工具打开

一般来说,你不能。

如果你可以加载到反射器 ,你知道它是一个托管程序集。

这是个好问题。 没有什么通用的方法可以告诉,但我敢打赌,大多数编译器和库在生成的EXE文件中留下了痕迹。 如果你想花很多时间,你可以收集一堆用已知语言编写的EXE,并扫描共同的字符串。 我想你会找到一些。

Walker的依赖 ,其他人提到的将是一个很好的方式来寻找信息的依赖,如版本的MSVCRT等

我会尝试运行.exe通过一个“字符串”程序得到各种提示。

如果我没记错的话PE Explorer反汇编器提供了一些有关.net和java二进制文件的编译器的信息,对.net使用Reflector或者ILDAsm工具

这是一个很好的视频,解释如何打开.exe文件,如果它与UPX打包。 您需要的软件: PEiD , OllyDbg , ImpREC

在解压二进制文件之后,你可以用PEiD检查二进制文件的编程语言。

我发现的最简单的方法(至少在电脑游戏中)是查看嵌套在游戏主文件夹中的“redist”文件夹。 对你们中的一些人来说,你可能会觉得自己编程经验更丰富,但MSI在这个文件夹中的具体目的是允许setup.exe文件自动安装游戏本身的先决条件。 例如:在帝国全面战争中,有一个名为“vcredist_x86-sp1.exe”的MSI。 这表明游戏/程序是在Microsoft .NET Framework(通常)中的“Visual C 2005”中编写的。 实际上,如果你打开MSI / EXE,安装程序应该立即指出它写入的语言和哪个版本。 我熟悉的原因是因为我在.NET Framework中用C#和VB编写代码,并自动安装商业应用程序的先决条件。 希望这可以帮助!