Portable ejecutable Resumen
Resumen: Mirando el interior de un PE
Seguridad de Aplicaciones
Contenido
Introducción
Conceptos básicos
Un PE (Portable Ejecutable) es como un prefabricado de un ejecutable, al cargar un PE en memoria este tiene similitudes con el mismo ejecutable en el disco de donde se cargo, es tratado comocualquier otro archivo almacenado en memoria. Toda la memoria utilizada por el código del modulo, recursos, tablas import y export y otros recursos utilizados están contiguos en el mismo bloque de memoria.
La memoria virtual relativa o RVA por sus siglas en ingles se refiere a la dirección de algún otro objeto relativo a donde se encuentra alojado en la memoria, para hacer uso de una RVA esta seagrega a la dirección base del modulo. La dirección base se encuentra al inicio del bloque de memoria del EXE o DLL.
Ejemplo de RVA (Pietrek, 1994):
(Virtual address 0x10464)-(base address 0x10000) = RVA 0x00464
Una sección en un PE se refiere a un segmento de código o información, a diferencia de los segmentos, una sección es un bloque de código anidado sin restricciones de tamaño. Algunassecciones contienen código que es declarado se usa de manera directa, mientras que otras secciones de datos son creados para demás librerías y contiene información vital del sistema operativo, en el formato PE las secciones son referidas como objetos.
El archivo PE
Similar a otros formatos ejecutables, el PE contiene campos de datos que definen la ubicación y el tamaño de las aéreas del código,el tamaño inicial de la pila y demás piezas de información valiosas para el ejecutable. Los primeros bytes corresponden a cabeceras de modo de ejecución MS-DOS, esto es como una pequeña validación si se requiere acceder desde un sistema que no es compatible con WIN32, el típico mensaje es “This program cannot be run in MS-DOS mode” (Microsoft).
Fig. 1 Ejemplo de formato de archivo PE
Deabajo hacia arriba:
MS-DOS Header: Cabecera MS-DOS
PE Signature: Firma de que se trata de un PE
Formato de IMAGE_FILE_HEADER
Podemos ver al precio que se define el tipo de maquina con que se va a trabajar:
WORD Machine
0x14d Intel i860
0x14c Intel I386 (same ID used for 486 and 586)
0x162 MIPS R3000
0x166 MIPS R4000
0x183 DEC Alpha AXP
IMAGE_OPTIONAL_HEADERS: Incluye información delPE, se encuentra relevantes por mencionar algunas:
DWORD SizeOfCode
Tamaño total de todas la secciones del código
DWORD SizeOfInitializedData
Total del tamaño de las secciones de datos inicializadas, sin incluir códigos del segmento.
DWORD AddressOfEntryPoint
La dirección en donde el loader (cargador) iniciara su ejecución, es una RVA y puede encontrarse usualmente en la sección .text.
DWORD BaseOfCode
La dirección RVA donde el código del archivo inicia, usualmente la dirección 0x1000 en EXEs.
DWORD BaseOfData
La dirección RVA donde la sección de datos inicia, se encuentra al final de la memoria y después de la sección del header PE.
DWORD ImageBase
Dirección en donde el ligador crea un ejecutable, asume que el archivo estará en un lugar específico de la memoria.DWORD SectionAlignment
Cuando se mapea en la memora, garantiza que se inicializara en una dirección virtual que es el múltiplo de este valor, el default es 0x1000
IMAGE_SECTION_HEADERs: Esta sección es similar a la de un directorio telefónico, contiene información de cada sección en la imagen, se secciona en direcciones inicio como RVAs en vez de manera alfabética.
Parte de losejecutables en el cabecero se asemeja a un arreglo de estructuras, una por cada segmento del programa, para el caso de los PE estos segmentos son rangos de direcciones virtuales.
Los PE son diferentes también ya que cualquier cosa que sea considerada código vital esta es reservada en una sección propia, la información acerca de las funciones importadas se almacena por igual en su propia sección,...
Regístrate para leer el documento completo.