Simplemente hablando, la descompilación es lo contrario de la compilación: traducir un archivo ejecutable a un lenguaje de nivel superior.
Suponga que pierde la fuente de su proyecto Delphi y solo tiene el archivo ejecutable: la ingeniería inversa (descompilación) es útil si las fuentes originales no están disponibles.
Hm, "fuentes no disponibles", ¿significa esto que podemos descompilar los proyectos de Delphi de otras personas? Bueno, sí y no ...
No claro que no. No es posible la descompilación totalmente automatizada: ningún descompilador podría reproducir exactamente el código fuente original.
Cuando se compila un proyecto de Delphi y se vincula para producir un archivo ejecutable independiente, la mayoría de los nombres utilizados en el programa se convierten en direcciones. Esta pérdida de nombres significa que un descompilador tendría que crear nombres únicos para todas las constantes, variables, funciones y procedimientos. Incluso si se logra un cierto grado de éxito, el "código fuente" generado carece de nombres significativos de variables y funciones.
Obviamente, la sintaxis del lenguaje fuente ya no existe en el ejecutable. Sería muy difícil para un descompilador interpretar la serie de instrucciones de lenguaje de máquina (ASM) que existen en un archivo ejecutable y decidir cuál era la instrucción de origen original.
La ingeniería inversa se puede utilizar por varias razones, algunas de las cuales son:
La ingeniería inversa NO se está agrietando, aunque a veces es difícil trazar la línea fina entre esos dos. Los programas de computadora están protegidos por las leyes de derechos de autor y marcas registradas. Diferentes países tienen diferentes excepciones a los derechos del propietario de los derechos de autor. Los más comunes afirman que está bien descompilar: a los efectos de la interpretación donde la especificación de la interfaz no se ha puesto a disposición, a los efectos de la corrección de errores donde el propietario de los derechos de autor no está disponible para hacer la corrección, para determinar las partes del programa que no están protegidos por derechos de autor. Por supuesto, debe tener mucho cuidado / contactar a su abogado si tiene dudas sobre si puede desmontar el archivo exe de algún programa.
Nota: si está buscando grietas de Delphi, generadores de claves o simplemente números de serie: está en el sitio equivocado. Tenga en cuenta que todo lo que encuentre aquí está escrito / presentado solo para fines de exploración / educación.
Por el momento, Borland no ofrece ningún producto capaz de descompilar un archivo ejecutable (.exe) o la "unidad compilada Delphi" (.dcu) al código fuente original (.pas).
Cuando se compila o ejecuta un proyecto de Delphi, se crea un archivo de unidad compilada (.pas). Por defecto, la versión compilada de cada unidad se almacena en un archivo de formato binario separado con el mismo nombre que el archivo de la unidad, pero con la extensión .DCU. Por ejemplo, unit1.dcu contiene el código y los datos declarados en el archivo unit1.pas.
Esto significa que si tiene alguien, por ejemplo, fuente compilada por componentes, todo lo que tiene que hacer es invertirlo y obtener el código. Incorrecto. El formato de archivo DCU no está documentado (formato propietario) y puede cambiar de una versión a otra.
Si desea intentar descompilar un archivo ejecutable de Delphi, estas son algunas de las cosas que debe saber:
Los archivos fuente de los programas 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 los detalles (propiedades) de los objetos contenidos en un formulario. Al crear un archivo exe, Delphi copia información en archivos .dfm en el archivo de código .exe terminado. Los archivos de formulario describen cada componente de su formulario, incluidos los valores de todas las propiedades persistentes. Cada vez 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 escribe esas modificaciones en un archivo DFM (no el código del procedimiento de evento; esto se almacena en el archivo pas / dcu). Para obtener el "dfm" del archivo ejecutable necesitamos entender qué tipo de recursos están almacenados dentro de un ejecutable Win32.