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

lke*_*ler 14 windows delphi executable programming-languages reverse-engineering

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

是否有一些来自.exe文件的方法来告诉用什么编程语言来编写程序?

有没有工具可以帮助解决这个问题?

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


好的,这是我正在寻找的两种东西:

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

  2. 这种"IsDelphi"节目布鲁斯·麦基会发现德尔福,德尔福建成面向.NET或C++ Builder是你的硬盘上的所有应用程序.

pao*_*ssi 8

我使用WinDowse(一个用Delphi编写的小型免费软件实用程序)监视程序的窗口......例如,如果你看一下"Class"TabSheet你可以发现控件的"Class"名称.

例如:

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

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


Bru*_*Gee 4

我理解你的好奇心。

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

EXE 压缩器使事情变得有点复杂。他们可以隐藏或扰乱资源的内容。用UPX压缩的程序很容易用十六进制编辑器识别,因为 PE 头中的前 2 部分被命名为 UPX0 和 UPX1。您可以使用该应用程序来解压缩这些文件。

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

判断使用的是哪种 .Net 语言比较困难。默认情况下,VB.Net 包含对 Microsoft.VisualBasic 的引用,VCL.Net 应用程序包含 Borland 特定的引用。然而,VCL.Net 已不复存在,取而代之的是 Delphi Prism,您可以向任何托管语言添加对 VB 程序集的引用。

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

我希望这有帮助。