有没有办法告诉程序使用什么语言?

时间:2009-12-30 03:08:16

标签: windows delphi programming-languages executable reverse-engineering

我有一个下载并安装的桌面程序。它从.exe文件运行。

.exe文件中是否有某种方法可以告诉用什么编程语言来编写程序?

是否有任何工具可以帮助解决这个问题?

可以确定哪些语言,哪些语言不能?


好的,这里有两件我正在寻找的东西:

  1. Tips to Determine Whether an App is Written in Delphi or Not

  2. "IsDelphi" program Bruce McGee将找到所有使用Delphi,Delphi for .Net或C ++ Builder构建的应用程序。

11 个答案:

答案 0 :(得分:8)

我使用WinDowse(一个用Delphi编写的小型免费软件实用程序)来监视程序的窗口..例如,如果你查看“类”选项卡,你可以发现控件的“类”名称..

例如:

  • TFormXX,TEditYY,TPanelZZZ for delphi apps
  • WindowsForms10.XXXX.yyy,适用于.NET应用
  • wxWindowsXXX for wxWindows apps
  • AfxWndXX for MFC / VC ++应用程序(我认为)

我认为这是找到应用信息的最快方式(尽管不是最准确的)..

答案 1 :(得分:4)

首先,查看它加载的运行时库。 C程序通常不会加载Visual Basic的库。

另外,检查可执行文件的指示符字符串。在大多数可执行文件中,这已接近尾声。如果程序使用字符串常量,则可能存在如何存储它们的线索。

答案 2 :(得分:4)

我理解你的好奇心。

您可以通过查找链接器添加的几个特定资源来识别Delphi和C ++ Builder应用程序及其SKU。特别是RC Data \ DVCLAL和RC DATA \ PACKAGEINFO。 XN Resource Editor使这更容易,但它可能会阻塞压缩的EXE。

EXE压缩机使事情变得复杂。他们可以隐藏或扰乱资源的内容。使用UPX压缩的程序很容易用HEX editor识别,因为PE头中的前两个部分名为UPX0和UPX1。您可以使用该应用程序解压缩这些。

使用.Net编译的应用程序不难检测。最新版本的Delphi甚至包括一个IsAssembly函数,或者您可以在PE头中进行一些探索。查看IsDelphi中的IsManaged函数。

告诉使用哪种.Net语言比较棘手。默认情况下,VB.Net包含对Microsoft.VisualBasic的引用,而VCL.Net应用程序包含Borland特定引用。但是,VCL.Net已经不再支持Delphi Prism,您可以将VB程序集的引用添加到任何托管语言中。

我没有看过一些使用签名来识别编译器的应用程序,因此我不知道它们的工作情况。

我希望这会有所帮助。

答案 3 :(得分:3)

好的disassembler,当然还有对底层CPU架构的深刻理解,通常可以帮助您识别正在运行的运行时库。除非exe被小心地“剥离”符号和/或以其他方式被屏蔽,否则运行时库中看到的符号名称通常会为您提供编程语言提示,因为不同语言的标准指定了不同的名称,以及编译器和附带的供应商运行时库通常非常接近这些标准。

当然,如果不了解各种可能的语言及其库标准,你就无法到达那里 - 如果代码的作者想要掩盖信息,那么他们也不会这么做。

答案 4 :(得分:3)

如果您有来自已知编译器的大量样本,我认为这将是机器学习的绝佳应用。我相信所谓的“监督学习”在这里是相关的。不幸的是,我对这个话题几乎一无所知 - 只是我在会议上听到了一些令人印象深刻的结果。

您可以深入了解逆向工程工作会议的会议记录,看看是否有其他人对此问题感兴趣。

答案 5 :(得分:2)

假设这是Windows的应用程序......

Reflector是否将其识别为.NET程序集?那么它是MSIL,99%是VB或C#,但你可能永远不知道哪个,也不重要。

它是否需要一个intrepreter(如Java?)?然后它是Java(或任何解释器。)

检查它需要的运行时DLL。

是否需要VB运行时dll?恭喜,VisualStudio 6.0或更早版本的VB。

它需要Delphi dll吗?恭喜,德尔福。

你做到这一点吗? C / C ++。假设C ++除非它需要msys或cygwin dll,在这种情况下C可能有25%的几率。

恭喜,对于绝大多数Windows软件来说,这应该是正确的。这可能实际上并没有帮助你,因为在所有这些语言中可以做很多相同的事情。

答案 6 :(得分:2)

IDA Pro Free(http://www.hex-rays.com/idapro/idadownfreeware.htm)可能会有所帮助。即使您不理解汇编语言,如果您将EXE加载到IDA Pro中,那么它的初始进度输出可能(如果有任何迹象)包含其对使用哪个编译器的最佳猜测。

答案 7 :(得分:1)

从dumpbin的各种选项开始。如果不仔细擦除,符号名称将为您提供有关C,C ++,CLR或其他内容的各种提示。

答案 8 :(得分:1)

其他工具使用签名来识别用于创建可执行文件的编译器,如PEiD,CFF Explorer等。

它们通常扫描可执行文件的入口点与签名。

来自CFF Explorer

签名资源管理器可以让您了解如何构建一个签名。

答案 9 :(得分:0)

看起来VC6链接器从V6上升adds a signature到您可以解析的PE头。

答案 10 :(得分:0)

我建议PEiD(免费软件,封闭源代码)。有所有Delphi for Win32签名,也可以告诉你使用的打包器(如果有的话)。