Parte: 6 — Análisis de malware · Fuente: Windows Internals (Yosifovich et al.) y Practical Malware Analysis ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Entender el Portable Executable (PE), el formato de los ejecutables y DLLs de Windows, con el detalle que necesita un analista: cómo se organizan las cabeceras y secciones, cómo el cargador mapea el archivo en memoria, cómo se resuelven imports y exports, y qué anomalías delatan malware o packing. Este conocimiento es la base para el desensamblado y el unpacking.
Al finalizar, el alumno podrá:
.text.| # | Tema | Por qué importa |
|---|---|---|
| 1 | DOS header y stub | Punto de entrada al formato; firma MZ |
| 2 | NT headers (File + Optional) | Metadatos, entry point, subsystem |
| 3 | Section headers y secciones | .text, .data, .rsrc, packers |
| 4 | RVA vs raw offset | Traducir direcciones entre disco y memoria |
| 5 | Import Directory / IAT | Capacidades y resolución de APIs |
| 6 | Export Directory | Relevante en DLLs maliciosas |
| 7 | Recursos, overlay y TLS callbacks | Payloads ocultos y ejecución temprana |
⚠️ Nota ética y de seguridad: el estudio del PE es estático, pero si abres muestras reales hazlo en la VM aislada. Para practicar la estructura puedes usar binarios legítimos del sistema (calc.exe, notepad.exe) sin riesgo.
Practica primero con un binario legítimo y luego con una muestra en la VM:
notepad.exe en PE-bear. Localiza la firma MZ, el e_lfanew y salta a los NT headers.AddressOfEntryPoint, ImageBase, Subsystem (GUI/CLI) y SizeOfImage..text es RX y .data RW.pefile, imprime imports: for e in pe.DIRECTORY_ENTRY_IMPORT: print(e.dll). Relaciona DLLs con capacidades (ws2_32.dll → red).pe.get_offset_from_rva(rva) y verifica con PE-bear.UPX0, .packed), entropía alta y una IAT mínima. Anota estas señales de packing.pefile que marque secciones con entropía > 7.0.Con pefile, genera un reporte PE automatizado de una muestra: entry point, secciones con entropía, imports por DLL, presencia de overlay y TLS callbacks, y un veredicto de "probable packing" justificado.
Criterio de aceptación: el script corre sobre cualquier PE de entrada y su veredicto de packing coincide con lo que muestra Detect It Easy en al menos dos muestras de prueba.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Confundir RVA con offset de disco | Usa la tabla de secciones para traducir; no son iguales |
Entry point fuera de .text |
Señal de packing; el stub vive en otra sección |
| IAT casi vacía | Imports resueltos en runtime; espera resolverlos tras desempacar |
| Ignorar el overlay | Muchos droppers guardan la carga ahí; revísalo siempre |
| Fiarse del nombre de sección | Es arbitrario; correlaciónalo con permisos y entropía |
❓ ¿Por qué importa tanto el PE para malware? Porque packing, inyección y persistencia manipulan directamente la estructura PE; entenderla es requisito para desempacar y desensamblar.
❓ ¿Qué es la ImageBase y por qué cambia? Es la dirección preferida de carga. Con ASLR el binario se reubica y las direcciones reales difieren de las estáticas; por eso trabajamos con RVAs.
❓ ¿Los .NET usan PE? Sí, pero con un directorio CLR y bytecode gestionado; su análisis usa herramientas como dnSpy, distintas de las de PE nativo.
Clase 144 — Análisis dinámico básico y sandboxing