Está en la página 1de 4

Archivos exe

Los programas .EXE es una extensin que se refiere a un archivo ejecutable de cdigo
reubicable y los programas.COM son es un tipo simple de fichero ejecutable
EXE es la extensin de archivos que denota un archivo ejecutable (un programa) en los
sistemas operativos MSDOS y Microsoft Windows. Una de las ventajas que tiene .EXE
son dobles, nos permiten tener archivos reubicable y el uso de hasta cuatro segmentos
(STACK, DATA, EXTRA y CODE) de hasta 64KBcada uno.
Existen dos formas de crear un archivo de tipo EXE.

Una es usando un compilador que pueda crear este tipo de archivos.


La otra forma es ensamblando un cdigo fuente del lenguaje Assembler y luego
enlazando el cdigo objeto

Hay cuatro formatos de archivo tipo EXE principales:

Ejecutables en DOS: son los menos complejos y pueden funcionar en todos los
sistemas operativos DOS y Windows.
Ejecutables de 16-bits: no pueden funcionar en DOS pero pueden funcionar en
todos los sistemas operativos de Windows.
Ejecutables de 32-bits: pueden funcionar solamente en Windows 95 y superior.
Ejecutables de 64-bits: pueden funcionar solamente en la sediciones de 64-bits de
Microsoft Windows, tales como la edicin 64-Bit de Windows XP o la edicin 64-
Bits de Windows Server 2003.

Estructura de archivos exe


Los ficheros EXE constan de una cabecera seguida de los segmentos definidos en el
cdigo fuente. Los datos de la cabecera son utilizados por el sistema operativo para
realizar las inicializaciones necesarias para el correcto funcionamiento del programa,
aunque dicha estructura no forma parte de la imagen final del programa en memoria.
1. Cabecera
El contenido de la cabecera de un fichero EXE es el siguiente:
Posicin 0 (2 bytes): caracteres MZ o ZM identificativos del formato EXE.
Posicin 2 (2 palabras): tamao del fichero. La primera palabra es el nmero de
bytes del ltimo sector. La segunda palabra es el nmero de sectores que ocupa el
fichero (cada sector ocupa 512 bytes). De esta forma, el tamao del fichero en
bytes se calcula como (nsectores-1)*512+nbytes.
Posicin 6 (1 palabra): nmero de reubicaciones a realizar. Esto es, nmero de
referencias a segmentos reales que hay que modificar cuando el programa se
cargue en memoria. ste es el caso del segundo operando de la instruccin MOV
AX, DATOS. Las direcciones de dichas referencias se encuentran disponibles en
la denominada tabla de reubicaciones, incluida en la cabecera de un fichero EXE.
Posicin 8 (1 palabra): tamao de la cabecera en prrafos (1 prrafo = 16 bytes).
Posicin 10 (1 palabra): mnima cantidad de memoria en prrafos requerida por el
programa en adicin a lo que ocupa en disco.
Posicin 12 (1 palabra): mxima cantidad de memoria requerida en prrafos.
Posicin 14 (2 palabras): valores iniciales de SS (primera palabra) y SP (segunda
palabra).
Posicin 18 (1 palabra): palabra de comprobacin. El DOS no suele utilizarla, de
hecho la herramienta TLINK no la genera.
Posicin 20 (2 palabras): valores iniciales de CS (segunda palabra) e IP (primera
palabra).
Posicin 24 (1 palabra): posicin donde comienza la tabla de reubicacin. Cada
entrada de la tabla ocupa 4 bytes (desplazamiento y segmento) y contiene la
direccin de las palabras a reubicar (a cada una hay que sumarle el valor de
segmento en el que se cargue el programa).
Posicin 26 (1 palabra): nmero de overlay. Es 0 cuando se trata de un programa
principal.
Posicin 28-61: valores desconocidos (dependientes del compilador).
2. Cuerpo
1. rea de instrucciones Ejecutable
En Windows, todos los segmentos de cdigo residen en una sola seccin llamada
.text o .txt o el cdigo. Dado que Windows utiliza un sistema de gestin de
memoria virtual basada en pginas, teniendo una seccin de cdigo grandes es
ms fcil de manejar, tanto para el sistema operativo y el desarrollador de
aplicaciones. Esta seccin tambin contiene el punto de entrada (PE) y la tabla de
saltos de procesador (si est presente), que apunta a la IAT.
Nota:
EP es el punto de entrada desde donde empieza la seccin de cdigo en el
archivo exe ofuscado.
IAT: Representa la tabla de direcciones de importacin, esto es una tabla de
punteros de funcin rellenados por el gestor de ventanas como los archivos DLL
se cargan.
2. Seccin de Datos
La seccin .bss representa datos sin inicializar para la aplicacin, incluyendo todas las
variables declaradas como static dentro de un mdulo de funcin y la fuente.
La seccin .rdata representa slo lectura de datos, tales como cadenas literales,
constantes y la informacin del directorio de depuracin.
Todas las dems variables (excepto variables automticas, que aparecen en la pila) se
almacenan en la seccin .data. Estos son de aplicacin o mdulo de variables globales.

3. Seccin de Recursos
La seccin .rsrc contiene informacin de recursos para un mdulo. Hay muchos
editores de recursos disponibles en la actualidad que permite editar, aadir, eliminar,
sustituir y recursos de la copia.

4. Exportacin Seccin de Datos


La seccin .edata contiene el directorio de exportacin para una aplicacin o DLL.
Cuando est presente, esta seccin contiene informacin sobre los nombres y direcciones
de las funciones exportadas.
5. Seccin de datos de importacin
La seccin .idata contiene diversa informacin sobre las funciones importadas
incluyendo la tabla de direcciones importacin de directorios y de importacin. La seccin
de importacin contiene informacin acerca de todas las funciones importadas por el
ejecutable a partir de DLL. Esta informacin se almacena en varias estructuras de datos.
El ms importante de estos son la importacin de directorios y la importacin de
direcciones
Tabla del que hablaremos a continuacin. El cargador de Windows es responsable de
cargar todos los archivos DLL que utiliza la aplicacin y el mapeo de ellas en el espacio
de direcciones del proceso. Se tiene que encontrar las direcciones de todas las funciones
importadas en sus diversas DLL y ponerlos a disposicin para que se carga el ejecutable.
6. Depurar Seccin de Informacin
La informacin de depuracin se coloca inicialmente en la seccin .debug. El formato de
archivo PE
tambin es compatible con archivos de depuracin separados (normalmente identificados
con una extensin .DBG) como un medio de recopilar informacin de depuracin en una
ubicacin central. La seccin de depuracin contiene la informacin de depuracin, pero
los directorios de depuracin viven en la seccin .rdata se mencion anteriormente. Cada
uno de esos directorios referencias depurar la informacin en la seccin .debug.

7. Seccin de Base de Reubicacin


Por ltimo, pero no menos la seccin y lo ms importante tambin para los hackers
perspectiva. Cuando el enlazador crea un archivo EXE, se hace una suposicin acerca de
dnde la
archivo ser mapeado en memoria. En base a esto, el enlazador pone las direcciones
reales de los elementos de cdigo y datos en el archivo ejecutable. Si por cualquier razn
el ejecutable termina siendo cargado en otra parte del espacio de direcciones virtuales,
las direcciones del enlazador enchufado en la imagen estn equivocados. La informacin
almacenada en la seccin .reloc permite al gestor de PE para fijar estas direcciones en la
imagen cargada para que sean correctos de nuevo. Por otro lado, si el cargador fue capaz
de cargar el archivo en la direccin base asumido por el enlazador, los datos de la seccin
.reloc no es necesario y se ignora.

https://www.hackingloops.com/reverse-engineering-tutorial-3-exe-file-structure/
http://www.idea2ic.com/File_Formats/DOS EXE File Structure.pdf