有什么方法可以告诉程序使用什么语言?

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

是否有一些方法可以从.exe文件中知道用什么编程语言编写程序?

有什么工具可以帮助吗?

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


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

  1. 确定应用程序是否用Delphi编写的提示

  2. 这个由Bruce McGee 编写的“IsDelphi”程序将查找所有使用Delphi,Delphi for .Net或C ++ Builder构build的应用程序,这些应用程序位于您的硬盘驱动器上。

我明白你的好奇心

您可以通过查找链接器添加的一些特定资源来识别Delphi和C ++ Builder应用程序及其SKU。 具体为RC Data \ DVCLAL和RC DATA \ PACKAGEINFO。 XN资源编辑器使这更容易,但它可能会压缩压缩的EXE。

EXE压缩机使事情变得复杂一点。 他们可以隐藏或争夺资源的内容。 使用UPX压缩的程序很容易用HEX编辑器识别,因为PE头中的前两个部分被命名为UPX0和UPX1。 你可以使用应用程序来解压缩这些。

使用.Net编译的应用程序不难察觉。 Delphi的最新版本甚至包含了一个IsAssembly函数,或者你可以在PE头中做一些小小的探索。 检查IsDelphi中的IsManaged函数。

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

我没有看过一些使用签名来识别编译器的应用程序,所以我不知道它们的工作效果如何。

我希望这有帮助。

我使用WinDowse (一个用Delphi编写的小型免费软件实用程序)来窥探程序的窗口。例如,如果您查看“Class”TabSheet,您可以发现控件的“Class”名称。

例如:

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

我认为这是找到关于应用程序的信息的最快方法(虽然不是最准确的 )。

首先,看看它加载了什么运行时间库。 AC程序通常不会加载Visual Basic的库。

另外,检查指示字符串的可执行文件。 在大多数可执行文件中,这是接近尾声。 如果程序使用字符串常量,那么它们的存储方式可能会有一些线索。

一个好的反汇编程序 ,当然还有对底层CPU体系结构的很好的理解,通常可以帮助您识别正在运行的运行时库。 除非已仔细“去除”符号和/或以其他方式屏蔽了exe,否则在运行时库中看到的符号的名称通常会提供编程语言提示,因为不同的语言标准指定了不同的名称,编译器和伴随运行时库通常非常尊重这些标准。

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

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

你可以通过反向工程工作会议的程序来看看是否有其他人对这个问题感兴趣。

假设这是Windows的应用程序…

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

它需要一个解释器(如Java?)? 那么它是Java(或任何解释器)。

检查它需要什么运行时DLL。

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

它需要德尔福的DLL? 恭喜,德尔福。

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

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

IDA Pro Free( http://www.hex-rays.com/idapro/idadownfreeware.htm )可能会有帮助。 即使你不懂汇编语言,如果你将EXE加载到IDA Pro中,那么它的初始进度输出可能(如果有任何指示符号的话)包括对使用哪个编译器的最佳猜测。

从各种选项开始到dumpbin。 符号名称,如果不仔细擦除,会给你提示是否是C,C ++,CLR或其他什么。

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

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

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

它看起来像从V6的VC ++链接器向您可以解析的PE标头添加一个签名 。

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