简单地说,反编译与编译相反:将可执行文件翻译成更高级的语言。
假设您丢失了Delphi项目的源代码,并且只有可执行文件:如果原始源代码不可用,则反向工程(反编译)非常有用。
嗯,“资源不可用”,这是否意味着我们可以反编译其他人的Delphi项目?嗯,是和否。。。
不,当然不是。完全自动化的反编译是不可能的-没有反编译器能够准确地再现原始源代码。
当一个Delphi项目被编译和链接以生成一个独立的可执行文件时,程序中使用的大多数名称都会转换为地址。名称的丢失意味着反编译器必须为所有常量、变量、函数和过程创建唯一的名称。即使取得了一定程度的成功,生成的“源代码”也缺少有意义的变量和函数名。显然,源语言语法不再存在于可执行文件中。反编译器很难解释可执行文件中存在的一系列机器语言指令(ASM)并确定原始源指令是什么。
逆向工程的使用有以下几个原因:
尽管有时很难在这两者之间划清界限,但逆向工程并没有破裂。计算机程序受版权法和商标法的保护。不同的国家对版权所有人的权利有不同的例外情况。最常见的是,可以进行反编译:为了接口规范不可用时的可解释性,为了版权所有者无法进行更正时的错误更正,确定程序中不受版权保护的部分。当然,如果您怀疑是否允许反汇编某个程序的exe文件,您应该非常小心/联系您的律师。
注意:如果您正在查找Delphi裂纹、密钥生成器或仅仅是序列号:您在错误的站点上。请记住,您在这里找到的所有内容都是出于探索/教育目的而编写/呈现的。
目前,Borland不提供任何能够将可执行(.exe)文件或“Delphi编译单元”(.dcu)反编译回原始源代码(.pas)的产品。
当编译或运行Delphi项目时,将创建一个已编译的单元(.pas)文件。默认情况下,每个单元的编译版本存储在一个单独的二进制格式文件中,该文件与单元文件同名,但扩展名为.DCU。例如,unit1.dcu包含unit1.pas文件中声明的代码和数据。
这意味着,如果您有一些组件,例如,组件编译源代码,那么您所要做的就是将其反转并获取代码。错误的DCU文件格式未记录(专有格式),可能因版本而异。
如果您想尝试反编译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程序感兴趣,我建议您看看以下几个“反编译器”:
可执行文件(EXE)和动态库(DLL)的反编译器,用Delphi编写,在Windows32环境下执行。项目的最终目标是开发能够从编译文件中恢复大部分初始Delphi源代码的程序,但IDR以及其他Delphi反编译器还不能做到这一点。尽管如此,IDR在促进这一过程方面仍处于相当有利的地位。与其他著名的Delphi反编译器相比,IDR分析的结果具有最大的完整性和可靠性。
Revendepro在程序中找到几乎所有的结构(类、类型、过程等),并生成pascal表示,过程将用汇编语言编写。由于汇编程序中的某些限制,无法重新编译生成的输出。这个反编译器的源代码是免费提供的。不幸的是,这是唯一一个我不能使用的反编译器——当您尝试反编译一些Delphi可执行文件时,它会提示一个异常。
EMS Source Rescuer是一个易于使用的向导应用程序,可以帮助您恢复丢失的源代码。如果您丢失了Delphi或C++Builder项目源代码,但有一个可执行文件,那么此工具可以挽救部分丢失的源代码。Rescuer生成所有项目表单和数据模块以及所有指定的属性和事件。生成的事件过程没有主体(它不是反编译器),但在可执行文件中有一个代码地址。在大多数情况下,“救援者”可以为项目恢复节省50-90%的时间。
DeDe是一个非常快速的程序,可以分析用Delphi编译的可执行文件。反编译后,DeDe将提供以下信息:
...兴趣时,我们必须处理资源脚本文件(.rc)、Borland资源编译器工具和其他文件。 在可执行文件中包含多个二进制文件包括5个步骤: 创建和/或收集要放入exe的所有文件。 创建描述应用程序使用的资源的资源脚本文件(.rc)...
如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...
...你好,世界!” 通过创建一个简单的项目、编写代码、编译和运行项目,开始您对Delphi应用程序开发的概述。然后,通过创建第二个简单的Delphi应用程序来了解属性、事件和Delphi Pascal—使您能够学习如何在窗体上放置组件、设...
...程序图标和版本信息的Windows资源文件(RES),否则无法编译Delphi项目。它还可能包含其他资源,如图像、表格、光标等。RES文件由Delphi自动生成。 注意:以DPR文件扩展名结尾的文件也是Bentley Digital InterPlot程序使用的数字InterPl...
...。 正如您将看到的,单元必须采用预定义的格式,以便编译器能够读取它们并编译单元代码。 单元头以保留字unit开头,后跟单元名称。当我们在另一个单元的uses子句中引用该单元时,需要使用该单元的名称。 接口部分 ...
...看起来不同。双击图标,向导将设置一个Delphi项目,准备编译为控制台应用程序。 虽然您可以在所有32位版本的Delphi中创建控制台模式的应用程序,但这并不是一个显而易见的过程。让我们看看在Delphi版本中需要做什么&lt=4...
阅读全文,了解如何反编译Delphi应用程序。 相关的: 在Delphi程序的EXE中嵌入资源 动态链接库(DLL)和Delphi 免费源代码Delphi项目
...自动神奇地分配给您。当函数退出时(有时甚至由于Delphi编译器优化而提前退出),变量的内存将自动神奇地释放。 默认情况下,堆栈内存大小对于您的Delphi程序(尽管很复杂)来说是足够大的。项目链接器选项上的“最大堆...
Delphi编程语言提供了一种跨平台编写、编译、打包和部署应用程序的快速方法。尽管Delphi创建了一个图形用户界面,但您肯定会有很多次希望从Delphi代码中执行程序。假设您有一个使用外部备份实用程序的数据库应用程序。备...
...Borland菜单应用程序。 02 08年 如何安装Borland C++编译器5.5 您现在应该看到显示的菜单页面。点击第一个菜单安装Borland Turbo C++。安装完成后,您将返回此屏幕,如果愿意,可以安装Borland的数据库Interbase 7.5。 注意,由...