最简单的方法是找出编写应用程序的编程语言? 我想从程序exe文件中知道它的vb或c ++或delphi或.net等。
答案 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 mangling。 CodeWarrior编译器使用不同的算法来破坏调用的成员变量和函数的名称,而不是Visual Studio。
我想你可以写一本关于准确确定任何可执行文件的血统的书。这个主题可能被称为“编程考古学”。
答案 3 :(得分:3)
您可以尝试使用Depends来查看它具有的运行时依赖性,这可能会提供一些线索。
答案 4 :(得分:2)
最简单的方法是询问程序开发人员。它不需要任何知识和实用程序。
答案 5 :(得分:1)
答案 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使用Reflector或ILDAsm工具
答案 11 :(得分:0)
我尝试通过“字符串”程序运行.exe来获取各种提示。
答案 12 :(得分:0)
答案 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代码,并且我们自动安装了业务应用程序的先决条件。 希望这有帮助!