Skip to content

Guíame por el formato de archivo PE de Windows y qué partes inspeccionas al triar un ejemplar.

Respuesta breve

Un archivo PE empieza con la cabecera DOS y su puntero e_lfanew a las cabeceras PE/NT, que contienen el File Header y el Optional Header (punto de entrada, image base, subsistema). Está dividido en secciones — .text para el código, .data, .rdata, .rsrc para los recursos — cada una con una dirección virtual y un tamaño en bruto. Durante el triaje se lee la tabla de imports en busca de API sospechosas, la tabla de secciones por nombres extraños y entropía alta que insinúan empaquetado, el timestamp y el rich header, los recursos incrustados y cualquier firma digital. Las discrepancias entre estos elementos dicen mucho antes incluso de ejecutar el archivo.

El formato Portable Executable (PE) es el contenedor que Windows usa para los archivos .exe, .dll y .sys. Los entrevistadores preguntan por él porque la mayoría del malware de Windows llega como un PE, y un analista con soltura puede leer la intención de un ejemplar directamente de su estructura antes de ejecutar nada.

La estructura

Todo PE comienza con la cabecera DOS heredada (el magic MZ y el stub «This program cannot be run in DOS mode»). Su campo e_lfanew apunta a las cabeceras PE/NT: el File Header (tipo de máquina, número de secciones, timestamp) y el Optional Header (el punto de entrada, la image base, el subsistema, y los directorios de datos que localizan las tablas de imports y exports, los recursos y las relocalizaciones). Tras las cabeceras viene la tabla de secciones — típicamente .text (código), .data y .rdata (datos y datos de solo lectura), .rsrc (recursos como iconos y cargas útiles incrustadas) y .reloc.

Qué inspeccionar y por qué

  • Tabla de imports. Qué DLL y API enlaza el binario es la pista de capacidad más clara. VirtualAlloc + WriteProcessMemory + CreateRemoteThread grita inyección de procesos; InternetOpen/WinHttpConnect significa red; CryptEncrypt sugiere ransomware. Una tabla de imports casi vacía con solo LoadLibrary/GetProcAddress implica una resolución dinámica de API para ocultar la intención.
  • Secciones. Nombres extraños (.UPX0, cadenas aleatorias), una sección escribible y ejecutable a la vez, o un tamaño en bruto de cero con un gran tamaño virtual sugieren todos un packer. Una entropía alta (cercana a 8,0) señala compresión o cifrado — un fuerte indicador de empaquetado, aunque los recursos comprimidos legítimos también puntúan alto.
  • Recursos, timestamp, rich header, firma. Ejecutables incrustados en .rsrc, un timestamp falsificado o puesto a cero, un rich header incoherente, o una firma Authenticode ausente o inválida añaden peso cada uno.

Las mejores respuestas conectan un campo con la conclusión que respalda en lugar de limitarse a enumerar nombres de cabeceras.

Posibles preguntas de seguimiento

  • ¿Qué sugiere una tabla de imports dominada por GetProcAddress y LoadLibrary?
  • ¿Por qué una entropía de sección alta es una señal de alerta, y cuál es su limitación como señal?
  • ¿Qué pueden decirte el rich header o el timestamp de compilación sobre un ejemplar?

Fuentes

Certificaciones

Consigue 100 preguntas de entrevista de ciberseguridad + respuestas

Déjanos tu correo y te enviaremos el pack en PDF gratuito y el mazo de flashcards.

Sin spam. Cancela tu suscripción cuando quieras.