反编译delphi(1/3)

简单地说,反编译与编译相反:将可执行文件翻译成更高级的语言。...

简单地说,反编译与编译相反:将可执行文件翻译成更高级的语言。

Business people using computer in office Business people using computer in office

假设您丢失了Delphi项目的源代码,并且只有可执行文件:如果原始源代码不可用,则反向工程(反编译)非常有用。

嗯,“资源不可用”,这是否意味着我们可以反编译其他人的Delphi项目?嗯,是和否。。。

真正的反编译可能吗?

不,当然不是。完全自动化的反编译是不可能的-没有反编译器能够准确地再现原始源代码。

当一个Delphi项目被编译和链接以生成一个独立的可执行文件时,程序中使用的大多数名称都会转换为地址。名称的丢失意味着反编译器必须为所有常量、变量、函数和过程创建唯一的名称。即使取得了一定程度的成功,生成的“源代码”也缺少有意义的变量和函数名。显然,源语言语法不再存在于可执行文件中。反编译器很难解释可执行文件中存在的一系列机器语言指令(ASM)并确定原始源指令是什么。

为什么以及何时使用反编译

逆向工程的使用有以下几个原因:

  • 恢复丢失的源代码
  • 将应用程序迁移到新的硬件平台
  • 确定程序中是否存在病毒或恶意代码
  • 当应用程序的所有者无法进行更正时的错误更正。
  • 恢复其他人的源代码(例如,确定算法)。

这合法吗?

尽管有时很难在这两者之间划清界限,但逆向工程并没有破裂。计算机程序受版权法和商标法的保护。不同的国家对版权所有人的权利有不同的例外情况。最常见的是,可以进行反编译:为了接口规范不可用时的可解释性,为了版权所有者无法进行更正时的错误更正,确定程序中不受版权保护的部分。当然,如果您怀疑是否允许反汇编某个程序的exe文件,您应该非常小心/联系您的律师。

注意:如果您正在查找Delphi裂纹、密钥生成器或仅仅是序列号:您在错误的站点上。请记住,您在这里找到的所有内容都是出于探索/教育目的而编写/呈现的。

目前,Borland不提供任何能够将可执行(.exe)文件或“Delphi编译单元”(.dcu)反编译回原始源代码(.pas)的产品。

delphi编译单元(dcu)

当编译或运行Delphi项目时,将创建一个已编译的单元(.pas)文件。默认情况下,每个单元的编译版本存储在一个单独的二进制格式文件中,该文件与单元文件同名,但扩展名为.DCU。例如,unit1.dcu包含unit1.pas文件中声明的代码和数据。

这意味着,如果您有一些组件,例如,组件编译源代码,那么您所要做的就是将其反转并获取代码。错误的DCU文件格式未记录(专有格式),可能因版本而异。

编译后:delphi逆向工程

如果您想尝试反编译Delphi可执行文件,您应该了解以下几点:

Delphi程序源文件通常存储在两种文件类型中:ASCII代码文件(.pas、.dpr)和资源文件(.res、.rc、.dfm、.dcr)。Dfm文件包含表单中包含的对象的详细信息(属性)。创建exe时,Delphi将.dfm文件中的信息复制到完成的.exe代码文件中。表单文件描述表单中的每个组件,包括所有持久属性的值。每当我们更改窗体的位置、按钮的标题或将事件过程分配给组件时,Delphi都会将这些修改写入DFM文件(而不是事件过程的代码-存储在pas/dcu文件中)。为了从可执行文件中获取“dfm”,我们需要了解Win32可执行文件中存储的资源类型。

由Delphi编译的所有程序都有以下部分:代码、数据、BSS、.idata、tls、.rdata、.rsrc。从反编译的角度来看,最重要的是代码和.rsrc部分。在“向Delphi程序添加功能”一文中,介绍了有关Delphi可执行文件格式、类信息和DFM资源的一些有趣的事实:如何重新分配事件,以便由以相同形式定义的其他事件处理程序处理。更重要的是:如何添加您自己的事件处理程序,将代码添加到可执行文件中,这将更改按钮的标题。

在exe文件中存储的许多类型的资源中,RT_RCDATA或应用程序定义的资源(原始数据)保存编译前DFM文件中的信息。为了从exe文件中提取DFM数据,我们可以调用EnumResourceNames API函数。。。有关从可执行文件中提取DFM的更多信息,请参见:编写Delphi DFM explorer文章。

逆向工程的艺术传统上是技术奇才的领地,他们熟悉汇编语言和调试器。一些Delphi反编译器已经出现,允许任何人,即使技术知识有限,对大多数Delphi可执行文件进行反向工程。

如果您对逆向工程Delphi程序感兴趣,我建议您看看以下几个“反编译器”:

idr(交互式delphi重建器)

可执行文件(EXE)和动态库(DLL)的反编译器,用Delphi编写,在Windows32环境下执行。项目的最终目标是开发能够从编译文件中恢复大部分初始Delphi源代码的程序,但IDR以及其他Delphi反编译器还不能做到这一点。尽管如此,IDR在促进这一过程方面仍处于相当有利的地位。与其他著名的Delphi反编译器相比,IDR分析的结果具有最大的完整性和可靠性。

雷文德普

Revendepro在程序中找到几乎所有的结构(类、类型、过程等),并生成pascal表示,过程将用汇编语言编写。由于汇编程序中的某些限制,无法重新编译生成的输出。这个反编译器的源代码是免费提供的。不幸的是,这是唯一一个我不能使用的反编译器——当您尝试反编译一些Delphi可执行文件时,它会提示一个异常。

ems源营救器

EMS Source Rescuer是一个易于使用的向导应用程序,可以帮助您恢复丢失的源代码。如果您丢失了Delphi或C++Builder项目源代码,但有一个可执行文件,那么此工具可以挽救部分丢失的源代码。Rescuer生成所有项目表单和数据模块以及所有指定的属性和事件。生成的事件过程没有主体(它不是反编译器),但在可执行文件中有一个代码地址。在大多数情况下,“救援者”可以为项目恢复节省50-90%的时间。

戴德

DeDe是一个非常快速的程序,可以分析用Delphi编译的可执行文件。反编译后,DeDe将提供以下信息:

  • 目标的所有dfm文件。您将能够使用Delphi打开和编辑它们。
  • 所有在注释良好的ASM代码中发布的方法,都引用字符串、导入的函数调用、类方法调用、单元中的组件、Try Except和Try Finally块。默认情况下,DeDe仅检索已发布的方法源,但如果您知道RVA偏移量,则还可以使用“工具”的“反汇编程序”菜单在可执行文件中处理另一个过程。
  • 很多额外的信息。
  • 您可以创建包含所有dfm、pas、dpr文件的Delphi项目文件夹。注意:pas文件包含上述注释良好的ASM代码。它们无法重新编译!

  • 发表于 2021-10-13 10:27
  • 阅读 ( 131 )
  • 分类:数学

你可能感兴趣的文章

如何将媒体文件嵌入delphi可执行文件(rc/.res)(embed media files into a delphi executable (rc/.res))

...兴趣时,我们必须处理资源脚本文件(.rc)、Borland资源编译器工具和其他文件。 在可执行文件中包含多个二进制文件包括5个步骤: 创建和/或收集要放入exe的所有文件。 创建描述应用程序使用的资源的资源脚本文件(.rc)...

  • 发布于 2021-09-06 15:08
  • 阅读 ( 198 )

delphi编译器版本指令

如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...

  • 发布于 2021-09-06 15:09
  • 阅读 ( 166 )

了解delphi编程的基础知识

...你好,世界!” 通过创建一个简单的项目、编写代码、编译和运行项目,开始您对Delphi应用程序开发的概述。然后,通过创建第二个简单的Delphi应用程序来了解属性、事件和Delphi Pascal—使您能够学习如何在窗体上放置组件、设...

  • 发布于 2021-09-06 15:13
  • 阅读 ( 190 )

理解delphi项目和单元源文件

...程序图标和版本信息的Windows资源文件(RES),否则无法编译Delphi项目。它还可能包含其他资源,如图像、表格、光标等。RES文件由Delphi自动生成。 注意:以DPR文件扩展名结尾的文件也是Bentley Digital InterPlot程序使用的数字InterPl...

  • 发布于 2021-09-06 15:15
  • 阅读 ( 181 )

德尔福单元剖析(德尔福初学者版)

...。 正如您将看到的,单元必须采用预定义的格式,以便编译器能够读取它们并编译单元代码。 单元头以保留字unit开头,后跟单元名称。当我们在另一个单元的uses子句中引用该单元时,需要使用该单元的名称。 接口部分 ...

  • 发布于 2021-09-10 20:53
  • 阅读 ( 186 )

如何构建没有gui的控制台应用程序(build console applications with no gui)

...看起来不同。双击图标,向导将设置一个Delphi项目,准备编译为控制台应用程序。 虽然您可以在所有32位版本的Delphi中创建控制台模式的应用程序,但这并不是一个显而易见的过程。让我们看看在Delphi版本中需要做什么&lt=4...

  • 发布于 2021-09-10 22:34
  • 阅读 ( 254 )

逆向工程(反编译)delphi应用程序

阅读全文,了解如何反编译Delphi应用程序。 相关的: 在Delphi程序的EXE中嵌入资源 动态链接库(DLL)和Delphi 免费源代码Delphi项目

  • 发布于 2021-09-11 18:00
  • 阅读 ( 184 )

理解delphi中的内存分配

...自动神奇地分配给您。当函数退出时(有时甚至由于Delphi编译器优化而提前退出),变量的内存将自动神奇地释放。 默认情况下,堆栈内存大小对于您的Delphi程序(尽管很复杂)来说是足够大的。项目链接器选项上的“最大堆...

  • 发布于 2021-09-15 03:47
  • 阅读 ( 197 )

从delphi代码执行并运行应用程序和文件

Delphi编程语言提供了一种跨平台编写、编译、打包和部署应用程序的快速方法。尽管Delphi创建了一个图形用户界面,但您肯定会有很多次希望从Delphi代码中执行程序。假设您有一个使用外部备份实用程序的数据库应用程序。备...

  • 发布于 2021-09-15 03:48
  • 阅读 ( 146 )

下载和安装Borland C++编译器5.5

...Borland菜单应用程序。 02 08年 如何安装Borland C++编译器5.5 您现在应该看到显示的菜单页面。点击第一个菜单安装Borland Turbo C++。安装完成后,您将返回此屏幕,如果愿意,可以安装Borland的数据库Interbase 7.5。 注意,由...

  • 发布于 2021-09-15 04:55
  • 阅读 ( 161 )
qpe9898
qpe9898

0 篇文章

相关推荐