用Delphi编译的可执行文件的内部结构

时间:2011-03-11 20:14:51

标签: delphi reverse-engineering

我们正在逆转Delphi的内部结构,有没有人知道任何有关Delphi可执行文件如何编译和链接在一起的好资源或其他细节以及最终exe内部各部分的布局。

我不是在寻找高级细节,例如它有n个部分。

我正在寻找一些东西(以下是'组成'),例如'.text'部分有3个部分:

  1. 数据(a)
  2. 指针表(b)
  3. 与可以使用机制(c)
  4. 识别的数据交织的代码

    等,等。


    好的,我正在寻找有关结构的参考或知识。我已经拥有了下面提到的工具,还有更多工具可以帮助从头开始进行逆向工程。

    我应该提到我知道资源布局,因为这有很好的记录。这是我所追求的代码和数据部分中嵌入的内部编译结构。 (例如,如何编译RTTI信息,事件处理程序和表单资源之间的映射等)。

4 个答案:

答案 0 :(得分:7)

首先使用现有工具,如IDR(Interactive Delphi Reconstructor)和IDA(交互式反汇编程序)和已提及的PE Explorer

我还建议编译一些简单的可执行文件并研究它的反汇编。

答案 1 :(得分:5)

Delphi或C ++ Builder可执行文件中最易识别的部分是资源。

它们将包含名为RCDATA的资源部分。本节包含以下内容:

  • 名为DVCLAL的部分,用于标识编译器的SKU,例如Personal,Professional或Enterprise。
  • 名为PACKAGEINFO的部分,其中包含已包含单元的列表以及Delphi或C ++ Builder的标志
  • 每个DFM的个人资源。

在某些设置上,像UPX这样的压缩器可能会隐藏这些资源,因此除非您解压缩可执行文件,否则您将无法看到它们。

答案 2 :(得分:4)

看看Jedi JCL是值得的。 IIRC他们的追溯工具(jcldebug单元?)打开二进制文件来恢复调试信息。它至少会教会文件的全局结构。

某些位可能是特定于delphi版本的btw。

下载评估版的PE-Explorer也可能是一个好的开始。

答案 3 :(得分:0)

您可以在Delphi模块(exe或dll)中找到所有类型,因为它们总是带有指向结构本身的指针。您可以创建一个小应用程序并扫描exe以自己查看如何获取该信息。使用类型信息可获得良好的信息,其中单位是/方法等等。

将该信息与可用资源相结合(一个好的资源查看器可以解码所有表单/框架/数据模块的文本中的二进制资源)。

现在,如果你反汇编应用程序,你可以使用resources / typeinfo中的信息来理解找到的汇编代码。