Hola y bienvenidos de nuevo.
En esta video conferencia, voy a hablar sobre el archivo ejecutable portable, también conocido como PE.
Los archivos PE son archivos ejecutables de Windows.
Puede saber si un archivo es o no un archivo PE abriéndolo con TrID.
Analicemos nuestra muestra.
Y TrID ha detectado 90. 7% que se trata de un archivo EXE.
Los archivos EXE son archivos ejecutables portátiles.
Los archivos ejecutables portátiles tienen una estructura parecida a ésta.
Tenemos la cabecera MS-DOS y el stub DOS, la cabecera PE, la tabla de secciones y las distintas secciones.
Ahora, usemos otra herramienta para estudiar la estructura de archivos, abra la carpeta FLARE y abra la
carpeta Utilidades y busque un programa llamado CFF Explorer.
Ahora arrastre la muestra 4-1 al Explorador de CFF para abrirla.
Como puede ver aquí, el archivo PE tiene varias cabeceras y subcabeceras.
Y algunas de ellas son vistas de árbol plegables.
El primer encabezado se conoce como encabezado DOS.
Si hace clic en la cabecera DOS, verá las distintas partes de la cabecera DOS a la derecha.
La primera columna es el miembro.
Muestra el nombre del campo y el primer campo se llama Magia, que son los bytes.
5A 4D a la inversa.
Si haces clic en el editor hexadecimal, puedes ver aquí 4D 5A es el número mágico, los bytes mágicos,
M Z, siempre que veas MZ.
Esto significa que se trata de un archivo PE.
Cada archivo PE tiene estos bytes mágicos MZ.
Si sigue bajando, verá el texto.
Este programa no puede ejecutarse en modo DOS.
Y poco después verá PE. Así que estos son de confirmación positiva MZ y la cadena.
Este programa no puede ejecutarse en modo DOS.
Y los bytes mágicos PE.
Así que estas tres cosas confirman que se trata de un archivo PE, un archivo ejecutable de Windows.
Así que el encabezado DOS aquí te muestra los primeros bytes, los dos primeros bytes del archivo.
¿Por qué está al revés?
Porque en los sistemas Intel, el PE se almacena en modo little endian.
Little endian es una convención para almacenar bytes en orden inverso.
La segunda columna es el desplazamiento desde el inicio de la cabecera DOS.
Y luego el tamaño te dice el tamaño de la cabecera.
Palabra significa dos bytes.
Como se puede ver, dos bytes, dos bytes, dos bytes, y luego la columna de valor contiene el valor de los bytes
en esos desplazamientos.
A continuación, hablemos de la base de imágenes.
Cuando Windows carga un proceso en memoria, copia y carga un archivo PE y sus secciones desde el disco duro a la memoria
virtual del proceso.
Pero primero necesita asignar espacio en la memoria virtual.
Pero, ¿cómo sabe en qué
ubicación debe asignar el espacio en la memoria virtual para copiar los archivos y sus secciones?
Esta información procede del campo base de la imagen en el archivo PE, en Cabecera opcional.
Así que aquí se puede ver aquí la base de la imagen y aquí está el valor para eso.
Ahora, abramos el archivo y ejecutémoslo e iniciemos nuestro Process Hacker.
Ahora, si se desplaza hacia abajo, verá la muestra 4-1 aquí.
Hagamos doble clic y examinemos la Memoria.
La memoria virtual para este proceso.
Este proceso está ahora en la memoria.
Y vemos en el Explorador CFF que la base de la imagen es 00400000, seguida de cinco ceros.
Vamos a esa ubicación.
Y ya está.
Esta es tu base de imágenes.
Así que esto confirma lo que se ve aquí.
Base de imágenes.
Sin embargo, esto no siempre es cierto.
Windows cargará aquí el valor de esta base de imágenes como recomendación.
A veces no permite el uso de la recomendación aquí.
Esto puede ocurrir cuando la memoria de la dirección virtual del proceso ya está ocupada por otros contenidos.
Así que no siempre se puede confiar en esta recomendación aquí y confirmar que está aquí.
A veces puede ser en otros lugares.
Otras cosas de interés.
La dirección del punto de entrada.
Este.
Los valores mostrados en esta columna son direcciones virtuales relativas también conocidas como offsets.
En pocas palabras, las llamamos RVAs por relative virtual addresses (direcciones virtuales relativas).
Así que cuando veas la dirección del punto de entrada en este offset 1040, si quieres encontrar
la ubicación real en la memoria virtual, tomarías la dirección base, que es este valor
más este offset que te dará 00401040.
Y ese será el punto de entrada real.
Intentemos ahora comprobarlo con x32dbg.
Así que haz clic en x32dbg.
Ahora cerraremos este programa y usaremos x32dbg para ejecutar este programa para depurarlo.
x32dbg es un depurador.
Ábrelo directamente desde aquí.
Se ejecuta hasta el punto de entrada.
Es cierto, se detiene en el punto de entrada 00401040.
Así que esta es la confirmación de lo que acabamos de hacer.
El desplazamiento del punto de entrada es 1040.
Así que para encontrar la dirección virtual real, se toma este desplazamiento, añadir a la dirección
base, base de la imagen, que es esto, y que le da este punto de entrada 401040.
Volvamos ahora a analizar las cabeceras.
Hay tres cabeceras principales en el archivo PE.
La cabecera DOS y las cabeceras NT.
Cabeceras NT y cabeceras de sección.
Las secciones están aquí.
Echa un vistazo a la cabecera DOS.
La cabecera DOS comienza con el campo mágico del que ya hemos hablado.
Si se desplaza por este campo hasta el final, verá este e_lfanew.
Ahora este byte, esta ubicación te muestra el desplazamiento.
Al inicio de la cabecera PE.
El encabezado PE es NT encabezado este y se puede ver en el editor hexadecimal también.
Y si baja a este offset 80, aterrizará en la cabecera NT.
Puede ver aquí 80.
En el offset 80.
Usted obtiene su 5045, que es el encabezado PE.
Así que esta es la cabecera DOS y esta es tu cabecera PE también conocida como cabecera NT.
Así que la cabecera DOS es un resto de los días de DOS Windows.
Esto permite que los programas sean compatibles con versiones anteriores.
Así, si intenta ejecutar la aplicación Windows de hoy en modo DOS, también se ejecutará, pero mostrará este
mensaje.
Este programa no puede ejecutarse en modo DOS.
Por ello, Microsoft puede conservar esta cabecera MS-DOS.
Así que cuando ejecutes cualquier programa de Windows hoy, se saltará esta parte.
Ven aquí, busca la cabecera PE y ejecuta desde aquí.
Así pues, la cabecera PE también se conoce como cabecera NT.
La cabecera NT se divide a su vez en.
Cabecera del fichero.
Y cabecera opcional.
La cabecera NT comienza con este campo.
4550, que es PE a la inversa.
5045.
5045 en reversa.
Echemos ahora un vistazo a la cabecera del archivo.
La cabecera del fichero tiene siete campos.
Uno, dos, tres, cuatro, cinco, seis, siete.
Echemos un vistazo a la máquina.
El campo máquina le indica cuál es el procesador de este fichero.
El procesador de destino.
Y aquí podemos ver que es Intel 386.
Si hacemos doble clic en él, podremos cambiar el tipo de procesador.
Y puede ver que la lista es bastante larga.
Pero si cambias a otros procesadores, esto ya no podrá funcionar porque es un objetivo de procesador
erróneo.
Lo dejaremos como está.
El siguiente campo es el número de secciones, por lo que este campo contiene el número de secciones presentes en el archivo.
Y aquí puedes ver que hay dos secciones, una y dos.
Así que secciones.
¿Qué son las secciones?
Las secciones almacenan diversos tipos de datos e información en un ejecutable.
Algunos son código y otros son datos. Código de texto.
Por código se entienden las instrucciones que pueden ejecutarse y por datos, las cadenas o constantes o variables o estructuras.
A veces, los virus de malware, los infectadores de archivos y los empaquetadores modifican los programas añadiendo aquí secciones adicionales
que contienen código y datos maliciosos.
Así que cuando hacen esto, también necesitan manipular.
Este campo.
Para aumentarlo.
Para cambiar el valor aquí.
Actualmente muestra dos.
Lo siguiente son sus características.
Puede hacer doble clic para ver más información.
Puede ver que el archivo es ejecutable.
No es una DLL y es un programa de 32 bits.
El siguiente encabezado es el encabezado opcional.
Aunque se denomina cabecera opcional.
No es opcional.
Es muy importante.
Windows utilizará esta cabecera opcional cuando copie el archivo en la memoria virtual para ejecutarlo como
un proceso.
Los dos campos más importantes de la cabecera opcional, como hemos visto, son el punto de entrada y la dirección
del punto de entrada y la base de la imagen.
El siguiente será su directorio de datos.
El directorio de datos contiene el tamaño y las direcciones virtuales relativas RVAs u offsets que contienen tablas y directorios
de datos importantes.
Algunos de ellos están en blanco 00000000, como puedes ver, lo que significa que no hay nada.
Pero algunos tienen valores almacenados.
Por ejemplo aquí directorio de importación y este desplazamiento contiene el está en la sección de datos y otro aquí.
Importar directorio de tablas de direcciones.
A continuación, examinamos los datos de sección y los encabezados de sección.
Por aquí.
La primera columna es el nombre.
El campo nombre contiene el nombre de la sección.
Como puede ver, . texto y . datos.
Normalmente . texto significa código que puede ejecutarse y . sección de datos que sólo contiene datos sin código.
Pero esto no es fiable.
El malware puede darle el nombre que quiera.
A veces también puede aparecer código ejecutable en la sección de datos, por lo que no podemos fiarnos de estas etiquetas.
La columna de direcciones virtuales.
Aquí está el RVA en el que la sección se coloca en la memoria virtual.
Para obtener la dirección virtual real.
Tenemos que añadir esto a la base de imágenes.
Como hemos visto antes, el tamaño bruto es el tamaño de los datos de la sección del archivo en el disco.
Si haces clic con el botón derecho y seleccionas Cambiar bandera.
Haga clic con el botón derecho y seleccione Cambiar indicador de sección.
Puede ver más información.
Por ejemplo, hago clic con el botón derecho en la primera fila y selecciono Bandera y veo que esta sección contiene banderas que
indican que es ejecutable, que es legible y que contiene código.
Si hago clic con el botón derecho del ratón en la segunda fila y pulso en Cambiar banderas de sección, puedo ver que
esta sección es legible, es escribible, contiene datos inicializados pero no contiene ningún código.