lunes, 1 de diciembre de 2014

Análisis Técnico de un Sistema de Protección basado en KEYFILE - PARTE 2


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?



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:
 
 


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.
 
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)



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




El último campo de esta extensión, 'e_lfanew', indica la dirección donde está la signatura que identifica el formato del archivo. Si se trata de un archivo con un programa W32, este campo apunta a dos caracteres: "PE" (Portable Executable), el formato elegido por M$ para los archivos con programas W32.

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.

 
Regresando a la imagen previa, tomada del desensamblado del crackme:

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

Crowdstrike -> Solución de errores de actualización de CrowdStrike con BitLocker habilitado

En este pequeño articulo ver como componer el problema de CROWDSTRIKE cuando esta habilitado el BITLOCKER, cabe resaltar que puede ser una e...