查找使用的编程语言

时间:2008-12-16 14:26:19

标签: windows computer-forensics

最简单的方法是找出编写应用程序的编程语言? 我想从程序exe文件中知道它的vb或c ++或delphi或.net等。

14 个答案:

答案 0 :(得分:27)

尝试PEiD

当然,如果他们使用包装工,首先需要进行一些拆包:)

答案 1 :(得分:11)

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

如果这不能立即显现,请在Web上搜索对这些DLL的引用。

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

如果它是一个没有DLL引用且没有文本的小型可执行文件,那么您可能是SOL。那时你需要寻找特定编译器的习语,而且主要是猜测。

答案 2 :(得分:8)

有一种艺术可以检测程序的编写语言。有可能但没有严格的规则。它需要很多经验(而且它还会引出一个问题“你为什么要...”,但这里有一些关于如何去做的想法。

您正在寻找的是“签名”。签名可以是编译器包含的某个字符串,对正在使用的编程工具中非常常见的API的引用,或者甚至是正在使用的工具所共有的编程风格,在包含的字符串中可见在申请中。

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

包含在自启动可执行文件中的Java应用程序将包含对java libs的引用,并且可能在同一目录中包含某些库或文件,表明它是java。

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

许多编译器以某种方式汇编和链接代码,并留下足迹。例如,使用Process Explorer中的“strings:tab”检查窗口可执行文件,你会看到很多字符串。使用这些字符串你可能能够确定编程样式,调用方法,错误或跟踪方法。

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

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

  • Determine Delphi Application
  • 使用eda_preview270.exe(来自here)或其他一些间谍工具并检查窗口类名称。如果他们读取像TButton或TfrmBlubb,它是一个VCL应用程序。如果其中有“Afx”,则可能是MFC。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

您可以通过尝试使用ildasm.exe工具

来检查是否是.net程序集

答案 8 :(得分:0)

一般情况下,你不能。

如果您可以将其加载到Reflector,则表示它是托管程序集。

答案 9 :(得分:0)

这是一个很好的问题。没有任何通用的方法可以告诉,但我敢打赌,大多数编译器和库在生成的EXE文件中都留下了标记。如果你想花很多时间在它上面,你可以收集一堆用已知语言编写的EXE并扫描常见的字符串。我想你会发现一些。

Dependancy Walker,其他人提到的是寻找明确的依赖关系的好方法,比如MSVCRT的版本等等

答案 10 :(得分:0)

如果我没记错的话PE Explorer Disassembler提供了一些关于编译器的信息,这些信息创建时不是.net和java二进制文件,对于.net使用ReflectorILDAsm工具

答案 11 :(得分:0)

我尝试通过“字符串”程序运行.exe来获取各种提示。

答案 12 :(得分:0)

这是一个很棒的video,解释了如何解压缩.exe文件,如果它是用UPX打包的。您需要的软件:PEiDOllyDbgImpREC

解压缩二进制文件后,您可以使用PEiD检查二进制文件的编程语言。

答案 13 :(得分:0)

我找到的最简单的方法(至少在电脑游戏中)是查看嵌套在游戏主文件夹中的“redist”文件夹。对于你自己编程经验丰富的一些人来说可能是显而易见的,但是这个文件夹中MSI的特定目的是允许setup.exe文件自动安装游戏本身的先决条件。 例如: 在Empire Total War中,有一个名为“vcredist_x86-sp1.exe”的MSI。这表明游戏/程序是用.NET Framework(通常)中的Microsoft“Visual C 2005”编写的。 实际上,如果您打开MSI / EXE,安装程序应立即指出其编写的语言和版本。 我熟悉的原因是因为我在.NET Framework中编写了C#和VB代码,并且我们自动安装了业务应用程序的先决条件。 希望这有帮助!