Sección 2 Ingeniería inversa de Delphi
Actualmente, Borland no proporciona ningún producto para descompilar archivos ejecutables (.exe) o "archivos compilados de Delphi" (.dcu) en código de programa sin formato (.pas).
Unidad compilada de Delphi: DCU ( Unidad compilada de Delphi: DCU )
Cuando se compila o ejecuta un proyecto Delphi, se genera un archivo de unidad de compilación (.dcu). De forma predeterminada, la versión compilada de cada unidad se almacena en un archivo binario separado. El nombre del archivo es el mismo que el del archivo de la unidad y su extensión es .DCU. Por ejemplo: el archivo unit1.dcu contiene el código y los datos declarados en el archivo unit1.pas.
Esto significa que si tienes algún recurso, como un componente compilado, todo lo que tienes que hacer es descompilarlo y obtener el código fuente. Incorrecto, el formato del archivo DCU no está documentado (formato del propietario) y puede cambiar de una versión a otra.
Después del compilador: Ingeniería inversa de Delphi
Si estás intentando descompilar un ejecutable de Delphi, hay algunas cosas que debes saber:
Los archivos del programa fuente de Delphi generalmente se almacenan en dos tipos de archivos: archivos de código ASCII (.pas, .dPR) y archivos de recursos (.res, .rc, .dfm, .dcr). Los archivos Dfm contienen detalles (propiedades) de los objetos contenidos en el formulario. Al crear un archivo ejecutable, Delphi copia la información del archivo .dfm al archivo de código .exe completo. El archivo de formulario describe cada componente del formulario, incluidos todos los valores de propiedad estables. Siempre que cambiamos la posición de un formulario, el título de un botón o asignamos un procedimiento de evento a un componente, Delphi registra estos cambios en el archivo DFM (no el código del procedimiento de evento, se almacena en el archivo pas/dcu). . Para obtener 'dfm' de un ejecutable, debemos comprender qué tipo de recursos se almacenan en el ejecutable Win32.
Todos los programas compilados por Delphi tienen las siguientes partes: CÓDIGO, DATOS, BSS, .idata, tls, .rdata, .rsrc. Desde la perspectiva de la descompilación, las partes más importantes son: CÓDIGO, .rsrc. En el artículo "Agregar funcionalidad a un programa Delphi" ("Agregar funcionalidad a un programa Delphi") (adición del traductor: uno tras otro), se analizan algunas cosas interesantes sobre el formato ejecutable de Delphi, la información de clase y los recursos DFM: Cómo asignar eventos a otros controladores de eventos definidos en el mismo formulario. Cómo agregar su propio controlador de eventos para agregar código al archivo ejecutable para cambiar el título del botón.
Entre los diversos tipos de recursos almacenados en el archivo .exe, RT_RCDATA o recursos definidos por la aplicación (datos sin procesar) tienen la información contenida en el archivo DFM antes de la compilación. Para seleccionar datos DFM de un archivo .exe, podemos llamar a la función API EnumResourceNames... Para obtener más información sobre cómo seleccionar datos DFM de un archivo .exe, consulte: "Codificación de un explorador Delphi DFM" ("Escribir un Detector Delphi DFM"). (Traductor añadido: Traducido uno tras otro)