WEBVTT

00:00.770 --> 00:02.980
Hola y bienvenidos de nuevo.

00:02.990 --> 00:11.510
En esta video conferencia, voy a hablar sobre el archivo ejecutable portable, también conocido como PE.

00:12.740 --> 00:17.360
Los archivos PE son archivos ejecutables de Windows.

00:18.470 --> 00:25.220
Puede saber si un archivo es o no un archivo PE abriéndolo con TrID.

00:26.450 --> 00:31.010
Analicemos nuestra muestra.

00:41.020 --> 00:48.580
Y TrID ha detectado 90. 7% que se trata de un archivo EXE.

00:50.310 --> 00:54.270
Los archivos EXE son archivos ejecutables portátiles.

00:55.620 --> 01:01.860
Los archivos ejecutables portátiles tienen una estructura parecida a ésta.

01:03.420 --> 01:13.260
Tenemos la cabecera MS-DOS y el stub DOS, la cabecera PE, la tabla de secciones y las distintas secciones.

01:14.720 --> 01:25.460
Ahora, usemos otra herramienta para estudiar la estructura de archivos, abra la carpeta FLARE y abra la

01:25.460 --> 01:32.210
carpeta Utilidades y busque un programa llamado CFF Explorer.

01:34.350 --> 01:42.030
Ahora arrastre la muestra 4-1 al Explorador de CFF para abrirla.

01:43.080 --> 01:50.070
Como puede ver aquí, el archivo PE tiene varias cabeceras y subcabeceras.

01:51.930 --> 01:56.130
Y algunas de ellas son vistas de árbol plegables.

01:57.270 --> 01:59.760
El primer encabezado se conoce como encabezado DOS.

02:00.770 --> 02:08.660
Si hace clic en la cabecera DOS, verá las distintas partes de la cabecera DOS a la derecha.

02:09.320 --> 02:11.720
La primera columna es el miembro.

02:12.800 --> 02:21.260
Muestra el nombre del campo y el primer campo se llama Magia, que son los bytes.

02:22.250 --> 02:25.760
5A 4D a la inversa.

02:27.010 --> 02:37.360
Si haces clic en el editor hexadecimal, puedes ver aquí 4D 5A es el número mágico, los bytes mágicos,

02:37.390 --> 02:40.330
M Z, siempre que veas MZ.

02:40.690 --> 02:45.490
Esto significa que se trata de un archivo PE.

02:45.520 --> 02:49.210
Cada archivo PE tiene estos bytes mágicos MZ.

02:50.650 --> 02:53.770
Si sigue bajando, verá el texto.

02:53.950 --> 02:57.880
Este programa no puede ejecutarse en modo DOS.

02:59.770 --> 03:09.820
Y poco después verá PE. Así que estos son de confirmación positiva MZ y la cadena.

03:09.820 --> 03:12.220
Este programa no puede ejecutarse en modo DOS.

03:13.560 --> 03:15.930
Y los bytes mágicos PE.

03:16.200 --> 03:23.130
Así que estas tres cosas confirman que se trata de un archivo PE, un archivo ejecutable de Windows.

03:25.230 --> 03:32.040
Así que el encabezado DOS aquí te muestra los primeros bytes, los dos primeros bytes del archivo.

03:32.220 --> 03:33.480
¿Por qué está al revés?

03:34.230 --> 03:41.880
Porque en los sistemas Intel, el PE se almacena en modo little endian.

03:42.000 --> 03:46.770
Little endian es una convención para almacenar bytes en orden inverso.

03:47.310 --> 03:54.060
La segunda columna es el desplazamiento desde el inicio de la cabecera DOS.

03:55.640 --> 04:00.350
Y luego el tamaño te dice el tamaño de la cabecera.

04:01.250 --> 04:02.960
Palabra significa dos bytes.

04:02.990 --> 04:09.860
Como se puede ver, dos bytes, dos bytes, dos bytes, y luego la columna de valor contiene el valor de los bytes

04:09.860 --> 04:11.960
en esos desplazamientos.

04:12.680 --> 04:14.990
A continuación, hablemos de la base de imágenes.

04:16.310 --> 04:27.590
Cuando Windows carga un proceso en memoria, copia y carga un archivo PE y sus secciones desde el disco duro a la memoria

04:27.590 --> 04:30.010
virtual del proceso.

04:30.020 --> 04:34.730
Pero primero necesita asignar espacio en la memoria virtual.

04:34.880 --> 04:36.380
Pero, ¿cómo sabe en qué

04:36.380 --> 04:43.730
ubicación debe asignar el espacio en la memoria virtual para copiar los archivos y sus secciones?

04:45.050 --> 04:53.480
Esta información procede del campo base de la imagen en el archivo PE, en Cabecera opcional.

04:59.260 --> 05:04.360
Así que aquí se puede ver aquí la base de la imagen y aquí está el valor para eso.

05:04.900 --> 05:15.490
Ahora, abramos el archivo y ejecutémoslo e iniciemos nuestro Process Hacker.

05:22.310 --> 05:26.000
Ahora, si se desplaza hacia abajo, verá la muestra 4-1 aquí.

05:26.180 --> 05:32.330
Hagamos doble clic y examinemos la Memoria.

05:33.020 --> 05:35.720
La memoria virtual para este proceso.

05:36.710 --> 05:38.570
Este proceso está ahora en la memoria.

05:39.230 --> 05:52.100
Y vemos en el Explorador CFF que la base de la imagen es 00400000, seguida de cinco ceros.

05:53.650 --> 05:55.150
Vamos a esa ubicación.

05:58.940 --> 05:59.990
Y ya está.

06:00.770 --> 06:02.300
Esta es tu base de imágenes.

06:04.830 --> 06:08.010
Así que esto confirma lo que se ve aquí.

06:09.090 --> 06:09.960
Base de imágenes.

06:12.640 --> 06:16.090
Sin embargo, esto no siempre es cierto.

06:16.120 --> 06:23.260
Windows cargará aquí el valor de esta base de imágenes como recomendación.

06:23.470 --> 06:29.530
A veces no permite el uso de la recomendación aquí.

06:29.950 --> 06:38.230
Esto puede ocurrir cuando la memoria de la dirección virtual del proceso ya está ocupada por otros contenidos.

06:38.410 --> 06:45.900
Así que no siempre se puede confiar en esta recomendación aquí y confirmar que está aquí.

06:45.910 --> 06:48.820
A veces puede ser en otros lugares.

06:49.030 --> 06:50.800
Otras cosas de interés.

06:51.910 --> 06:54.400
La dirección del punto de entrada.

06:54.430 --> 06:55.210
Este.

06:57.760 --> 07:06.160
Los valores mostrados en esta columna son direcciones virtuales relativas también conocidas como offsets.

07:08.020 --> 07:13.990
En pocas palabras, las llamamos RVAs por relative virtual addresses (direcciones virtuales relativas).

07:15.040 --> 07:24.820
Así que cuando veas la dirección del punto de entrada en este offset 1040, si quieres encontrar

07:24.820 --> 07:33.760
la ubicación real en la memoria virtual, tomarías la dirección base, que es este valor

07:33.760 --> 07:38.500
más este offset que te dará 00401040.

07:38.980 --> 07:41.410
Y ese será el punto de entrada real.

07:41.530 --> 07:46.420
Intentemos ahora comprobarlo con x32dbg.

07:54.000 --> 07:56.310
Así que haz clic en x32dbg.

07:56.670 --> 08:06.210
Ahora cerraremos este programa y usaremos x32dbg para ejecutar este programa para depurarlo.

08:06.780 --> 08:09.050
x32dbg es un depurador.

08:09.060 --> 08:11.160
Ábrelo directamente desde aquí.

08:20.860 --> 08:22.780
Se ejecuta hasta el punto de entrada.

08:24.070 --> 08:30.880
Es cierto, se detiene en el punto de entrada 00401040.

08:31.450 --> 08:34.150
Así que esta es la confirmación de lo que acabamos de hacer.

08:34.180 --> 08:37.660
El desplazamiento del punto de entrada es 1040.

08:38.110 --> 08:46.000
Así que para encontrar la dirección virtual real, se toma este desplazamiento, añadir a la dirección

08:46.000 --> 08:52.360
base, base de la imagen, que es esto, y que le da este punto de entrada 401040.

08:53.890 --> 08:58.810
Volvamos ahora a analizar las cabeceras.

08:58.840 --> 09:01.450
Hay tres cabeceras principales en el archivo PE.

09:02.140 --> 09:04.510
La cabecera DOS y las cabeceras NT.

09:06.190 --> 09:10.300
Cabeceras NT y cabeceras de sección.

09:11.920 --> 09:13.240
Las secciones están aquí.

09:15.190 --> 09:16.540
Echa un vistazo a la cabecera DOS.

09:17.680 --> 09:23.030
La cabecera DOS comienza con el campo mágico del que ya hemos hablado.

09:23.120 --> 09:32.030
Si se desplaza por este campo hasta el final, verá este e_lfanew.

09:32.260 --> 09:38.240
Ahora este byte, esta ubicación te muestra el desplazamiento.

09:39.740 --> 09:41.450
Al inicio de la cabecera PE.

09:43.340 --> 09:51.050
El encabezado PE es NT encabezado este y se puede ver en el editor hexadecimal también.

09:53.180 --> 10:03.740
Y si baja a este offset 80, aterrizará en la cabecera NT.

10:04.850 --> 10:07.430
Puede ver aquí 80.

10:10.130 --> 10:12.920
En el offset 80.

10:13.190 --> 10:17.270
Usted obtiene su 5045, que es el encabezado PE.

10:17.600 --> 10:22.340
Así que esta es la cabecera DOS y esta es tu cabecera PE también conocida como cabecera NT.

10:23.480 --> 10:29.690
Así que la cabecera DOS es un resto de los días de DOS Windows.

10:29.870 --> 10:35.750
Esto permite que los programas sean compatibles con versiones anteriores.

10:36.800 --> 10:45.440
Así, si intenta ejecutar la aplicación Windows de hoy en modo DOS, también se ejecutará, pero mostrará este

10:45.440 --> 10:46.270
mensaje.

10:46.280 --> 10:49.280
Este programa no puede ejecutarse en modo DOS.

10:49.430 --> 10:55.670
Por ello, Microsoft puede conservar esta cabecera MS-DOS.

10:56.000 --> 11:00.830
Así que cuando ejecutes cualquier programa de Windows hoy, se saltará esta parte.

11:01.190 --> 11:05.390
Ven aquí, busca la cabecera PE y ejecuta desde aquí.

11:06.170 --> 11:09.660
Así pues, la cabecera PE también se conoce como cabecera NT.

11:10.080 --> 11:13.770
La cabecera NT se divide a su vez en.

11:15.120 --> 11:16.140
Cabecera del fichero.

11:16.990 --> 11:18.400
Y cabecera opcional.

11:19.000 --> 11:21.280
La cabecera NT comienza con este campo.

11:21.820 --> 11:28.090
4550, que es PE a la inversa.

11:28.120 --> 11:29.890
5045.

11:32.420 --> 11:34.370
5045 en reversa.

11:34.580 --> 11:36.440
Echemos ahora un vistazo a la cabecera del archivo.

11:37.070 --> 11:39.920
La cabecera del fichero tiene siete campos.

11:39.920 --> 11:42.650
Uno, dos, tres, cuatro, cinco, seis, siete.

11:43.280 --> 11:45.380
Echemos un vistazo a la máquina.

11:46.700 --> 11:53.810
El campo máquina le indica cuál es el procesador de este fichero.

11:55.040 --> 11:56.270
El procesador de destino.

11:56.390 --> 11:59.600
Y aquí podemos ver que es Intel 386.

12:00.170 --> 12:04.550
Si hacemos doble clic en él, podremos cambiar el tipo de procesador.

12:05.090 --> 12:07.460
Y puede ver que la lista es bastante larga.

12:08.600 --> 12:16.070
Pero si cambias a otros procesadores, esto ya no podrá funcionar porque es un objetivo de procesador

12:16.070 --> 12:17.540
erróneo.

12:19.070 --> 12:20.360
Lo dejaremos como está.

12:20.960 --> 12:29.540
El siguiente campo es el número de secciones, por lo que este campo contiene el número de secciones presentes en el archivo.

12:31.770 --> 12:36.120
Y aquí puedes ver que hay dos secciones, una y dos.

12:38.950 --> 12:39.910
Así que secciones.

12:39.910 --> 12:40.790
¿Qué son las secciones?

12:40.810 --> 12:46.180
Las secciones almacenan diversos tipos de datos e información en un ejecutable.

12:47.740 --> 12:51.460
Algunos son código y otros son datos. Código de texto.

12:52.070 --> 13:02.240
Por código se entienden las instrucciones que pueden ejecutarse y por datos, las cadenas o constantes o variables o estructuras.

13:02.260 --> 13:13.570
A veces, los virus de malware, los infectadores de archivos y los empaquetadores modifican los programas añadiendo aquí secciones adicionales

13:13.600 --> 13:16.960
que contienen código y datos maliciosos.

13:17.080 --> 13:21.160
Así que cuando hacen esto, también necesitan manipular.

13:22.740 --> 13:23.550
Este campo.

13:26.210 --> 13:27.230
Para aumentarlo.

13:27.530 --> 13:29.060
Para cambiar el valor aquí.

13:29.390 --> 13:30.830
Actualmente muestra dos.

13:31.310 --> 13:33.110
Lo siguiente son sus características.

13:33.530 --> 13:36.710
Puede hacer doble clic para ver más información.

13:37.070 --> 13:39.920
Puede ver que el archivo es ejecutable.

13:40.280 --> 13:44.360
No es una DLL y es un programa de 32 bits.

13:45.980 --> 13:48.800
El siguiente encabezado es el encabezado opcional.

13:50.480 --> 13:52.970
Aunque se denomina cabecera opcional.

13:54.110 --> 13:55.330
No es opcional.

13:55.340 --> 13:56.960
Es muy importante.

13:56.990 --> 14:06.500
Windows utilizará esta cabecera opcional cuando copie el archivo en la memoria virtual para ejecutarlo como

14:06.500 --> 14:07.820
un proceso.

14:08.060 --> 14:14.600
Los dos campos más importantes de la cabecera opcional, como hemos visto, son el punto de entrada y la dirección

14:14.600 --> 14:17.360
del punto de entrada y la base de la imagen.

14:21.380 --> 14:25.790
El siguiente será su directorio de datos.

14:26.360 --> 14:38.150
El directorio de datos contiene el tamaño y las direcciones virtuales relativas RVAs u offsets que contienen tablas y directorios

14:38.150 --> 14:41.090
de datos importantes.

14:41.450 --> 14:46.640
Algunos de ellos están en blanco 00000000, como puedes ver, lo que significa que no hay nada.

14:46.640 --> 14:48.580
Pero algunos tienen valores almacenados.

14:48.590 --> 14:59.180
Por ejemplo aquí directorio de importación y este desplazamiento contiene el está en la sección de datos y otro aquí.

15:00.510 --> 15:02.370
Importar directorio de tablas de direcciones.

15:03.840 --> 15:07.860
A continuación, examinamos los datos de sección y los encabezados de sección.

15:09.090 --> 15:09.690
Por aquí.

15:10.020 --> 15:11.520
La primera columna es el nombre.

15:13.350 --> 15:15.780
El campo nombre contiene el nombre de la sección.

15:16.650 --> 15:18.780
Como puede ver, . texto y . datos.

15:19.350 --> 15:27.690
Normalmente . texto significa código que puede ejecutarse y . sección de datos que sólo contiene datos sin código.

15:28.500 --> 15:30.810
Pero esto no es fiable.

15:31.200 --> 15:33.720
El malware puede darle el nombre que quiera.

15:34.620 --> 15:43.290
A veces también puede aparecer código ejecutable en la sección de datos, por lo que no podemos fiarnos de estas etiquetas.

15:43.680 --> 15:46.320
La columna de direcciones virtuales.

15:46.320 --> 15:52.080
Aquí está el RVA en el que la sección se coloca en la memoria virtual.

15:53.890 --> 15:56.650
Para obtener la dirección virtual real.

15:57.520 --> 16:00.280
Tenemos que añadir esto a la base de imágenes.

16:00.970 --> 16:10.060
Como hemos visto antes, el tamaño bruto es el tamaño de los datos de la sección del archivo en el disco.

16:12.520 --> 16:17.470
Si haces clic con el botón derecho y seleccionas Cambiar bandera.

16:19.120 --> 16:22.870
Haga clic con el botón derecho y seleccione Cambiar indicador de sección.

16:23.110 --> 16:24.970
Puede ver más información.

16:26.470 --> 16:36.610
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

16:37.150 --> 16:42.340
indican que es ejecutable, que es legible y que contiene código.

16:44.470 --> 16:53.590
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

16:53.590 --> 17:02.440
esta sección es legible, es escribible, contiene datos inicializados pero no contiene ningún código.
