Análisis Técnico de un Sistema de Protección basado en KEYFILE - PARTE 2
1001 Ways to Crack Software
Centro de Investigaciones en Alta Tecnología
Rodolfo Hernández Baz
WWW.CCAT.EDU.MX
Análisis de Archivos Portables Ejecutables PE Files
Que es el Formato Portable Ejecutable?
Que es el Formato Portable Ejecutable?
Desde la versión 3.1 de Windows introdujeron un nuevo tipo de formato para los archivos ejecutables el cual llamaron PE (Portable Executable). El cual tuvo su inicio en el formato COOF (Common Object File Format) que usa Unix para que se pudiera mantener su compatibilidad con MS-DOS y los sistemas operativos Windows, este nuevo tipo de archivo ejecutable continuo con la cabecera MZ del MS-DOS.
Pero por que le pusieron el nombre de Portable Executable? Eso simple y sencillamente porque es portable y totalmente compatible con cualquier versión del sistema operativo windows. Así como también es usado en procesadores diferentes a Intel X86, MIPS Alpha entre muchos otros, cabe mencionar también que los DLL y Drivers de dispositivos también se manejan en el formato PE.
Pero como nos podemos dar cuenta de esa cabecera? Pues simplemente abrimos con un editor Hexadecimal un PE y podremos ver la cabecera:
Pero por que le pusieron el nombre de Portable Executable? Eso simple y sencillamente porque es portable y totalmente compatible con cualquier versión del sistema operativo windows. Así como también es usado en procesadores diferentes a Intel X86, MIPS Alpha entre muchos otros, cabe mencionar también que los DLL y Drivers de dispositivos también se manejan en el formato PE.
Pero como nos podemos dar cuenta de esa cabecera? Pues simplemente abrimos con un editor Hexadecimal un PE y podremos ver la cabecera:
Esto nos dice mucho acerca del ejecutable para conocer y comprender los conceptos básicos de cómo se ejecutan y el por qué se ejecutan las aplicaciones hechas para el Sistema Operativo WINDOWS 32 Bits, como se cargan las librerías de funciones dinámicas llamados también DLL, y sus funciones importadas y exportadas del mismo.
En la siguiente imagen tomada de internet, podemos ver don la estructura lógica de un PE :
Archivos en General y el Formato PE
Como hemos visto existen gran variedad de archivos donde los datos en un archivo común y corriente no es más que un conjunto de datos organizados de tal forma en registros donde cada registro podríamos llamarlo como en la programación estructurada, con esto decimos que es un espacio que ocupa en memoria para guardar datos de forma organizada.
Entonces, en los archivos con formato PE, tenemos un encabezado y un cuerpo.
Entonces, en los archivos con formato PE, tenemos un encabezado y un cuerpo.
El encabezado de los archivos PE lo podemos dividir en 4 sub encabezados que son los siguientes:
· El encabezado DOS MZ
· El encabezado PE
· El encabezado NT opcional
· El conjunto de tablas de secciones Veamos la organización en la siguiente tabla: PE EXE (Windows 32Bit EXE, DLL, OCX, etc)
· El encabezado DOS MZ
· El encabezado PE
· El encabezado NT opcional
· El conjunto de tablas de secciones Veamos la organización en la siguiente tabla: PE EXE (Windows 32Bit EXE, DLL, OCX, etc)
Encabezado MZ
EXE
|
Contiene información necesaria para ejecutar el DOS STUB. Conservado por
compatibilidad
|
Encabezado
DOS
|
Encabezado MZ
extendido
|
El desplazamiento (OFFSET) 3Ch
apunta al encabezado PE
|
|
DOS STUB
|
Usualmente
despliega 'Requires windows to run' o un mensaje similar
|
Agregado para avisar que el programa rueda en Windows
|
Encabezado PE
|
Contiene info necesaria para correr el programa en Win32
|
Encabezados
agregados por W32
|
Encabezado
opcional NT
|
Contiene info adicional necesaria para correr el programa en Win32
|
|
Tabla de Objetos o
Secciones
|
Información sobre objetos o secciones en el archivo
|
|
Objetos o
secciones
|
Datos de las secciones
|
Cuerpo del
archivo
|
A este antiguo encabezado EXE MZ se le han agregado algunos campos que informan al cargador del Sistema Operativo (SO) dónde está el encabezado PE con información relevante para W32.
001C
|
Dword
|
Tabla de relocalización con un número variable de reubicación de
elementos.
|
0020
|
Dword
|
Identifuicador OEM
|
0024
|
Dword
|
Información OEM.
|
0028
|
26Bytes
|
Reservado.
|
003C
|
Dword
|
Desplazamiento del nuevo encabezado EXE desde el inicio del archivo o
0 si es un archivo MZ EXE
|
Si abrimos NOTEPAD.EXE con con HEX WORKSHOP y revisamos el campo e_lfanew en el desplazamiento 003Ch, veremos el número 8000h, que al revés es 0080h, el desplazamiento donde veremos los caracteres 'PE', que identifican el formato del archivo (Si trabajas con HEX WORKSHOP, no cierres todavía este archivo). Si ahora abrimos con HEX WORKSHOP el archivo WINFILE.EXE, generalmente ubicado en el directorio C:\WINDOWS, veremos que el desplazamiento 003Ch apunta al desplazamiento 0400h, donde encontramos los caracteres 'NE', que es el formato de los archivos W16.
Inmediatamente después de la signatura hay dos bytes o una palabra (WORD) con ceros, después de los cuales inicia el encabezado PE. En la actualidad, el formato NE está prácticamente extinguido. Lo pasaré por alto y me concentraré en el formato PE.
Entre el encabezado MZ DOS y la signatura PE, está la sección "STUB" del archivo, la cual se incluye para el despliegue de un mensaje que indica que el programa sólo puede correr en Windows.
También existen muchas secciones importantes que deberíamos de conocer a cerca de los Portables Ejecutables como lo son:
· El tamaño de la secciones
· Punto de Entrada (RVA Entry Point)
· Base de las secciones
· Base de la Imagen (ImageBase)
· Alineamientos
· Tamaño de la imagen
· Directorio de datos
· SizeOfRawData
· PointerToRawData
Y muchas y muchas más cosas que debemos de conocer a cerca de los PE, que en este texto no se trataran ya que el objetivo principal es el de mostrar la protección de KEYFILES.
Ahora explicaremos algunas de las secciones PE del crackme en cuestión:
.data y .text : permiten especificar las secciones de memoria donde se ubicaran los códigos de maquina correspondientes a las líneas de texto que siguen a la directiva.
.reloc : En pocas palabras, los traslados de base son simplemente una lista de ubicaciones en un archivo ejecutable en un valor delta se necesita ser añadido a los contenidos actuales de la memoria. Las páginas de un archivo ejecutable se ponen en la memoria sólo cuando son necesarios, y el formato de los Movimientos de base así lo refleja. Las reubicaciones de base residen en una sección llamada. Reloc, pero la forma correcta de encontrarlos es a partir de la DataDirectory con la entrada IMAGE_DIRECTORY_ENTRY_BASERELOC.
.rsrc : esta sección contiene la información sobre los recursos compartidos que son las funciones importadas y exportadas que usa el ejecutable.
Con esta explicación creo que es suficiente, ahora si continuemos con la protección de KEYFILES.
No hay comentarios:
Publicar un comentario