Parte: 6 — Análisis de malware · Fuente: Practical Malware Analysis (Sikorski & Honig) ⏱️ Duración estimada: 140 min · Nivel: Avanzado
Usar un desensamblador/decompilador para leer el código del malware y reconstruir su lógica: identificar la función main, seguir el grafo de llamadas, reconocer patrones de APIs, renombrar y anotar, y llegar al decompilado en pseudo-C. Ghidra (gratuito) e IDA son las herramientas centrales del análisis estático avanzado.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Carga y auto-análisis | Punto de partida del RE |
| 2 | Vistas: disasm, decompiler, graph | Distintos niveles de abstracción |
| 3 | Xrefs (referencias cruzadas) | Navegar de un string/API a su uso |
| 4 | Renombrado y comentarios | Hace legible un binario hostil |
| 5 | Reconocimiento de APIs y patrones | Identifica funcionalidad rápido |
| 6 | Resolución dinámica de APIs | Malware oculta imports en runtime |
| 7 | Scripting (Ghidra/IDAPython) | Automatiza tareas repetitivas |
LoadLibrary+GetProcAddress en runtime. Característica clave: oculta capacidades al análisis estático.⚠️ Nota ética y de seguridad: el desensamblado es estático y no ejecuta la muestra, pero cárgala siempre desde la VM aislada. Nunca ejecutes la muestra desde el desensamblador (evita "run/debug" con binarios reales fuera del entorno controlado).
main.contact_c2) y comenta el propósito de sus variables.InternetConnect, CryptEncrypt, CreateRemoteThread) y desde ellos sigue xrefs a las rutinas que los invocan.GetProcAddress/API hashing y documenta cómo resuelve funciones.GetProcAddress.Entrega un proyecto de Ghidra anotado de una muestra con al menos 5 funciones renombradas, la rutina de C2 identificada y la configuración/IOCs extraídos del código, más un breve informe. Criterio de aceptación: otra persona puede abrir el proyecto y, siguiendo tus nombres y comentarios, explicar cómo la muestra contacta su C2 sin partir de cero.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Decompilado incoherente | Muestra empaquetada; desempácala antes de desensamblar |
No aparece main |
Runtime del compilador; localiza main desde WinMain/CRT |
| Faltan nombres de API | API hashing o resolución dinámica; reconstruye la tabla |
| Xrefs vacíos en un string | El string se construye en runtime; búscalo en el decompilado |
| Perderse en el grafo | Trabaja desde strings/imports hacia dentro, no al revés |
❓ ¿Ghidra o IDA? Ambos son excelentes. Ghidra es gratuito y su decompilador es muy bueno; IDA Pro es el estándar comercial. Aprende el flujo, no solo la herramienta.
❓ ¿Debo leer todo el binario? No. El análisis dirigido por objetivos (encontrar C2, cifrado, persistencia) es mucho más eficiente que leer linealmente.
❓ ¿Cómo trato el API hashing? Reconoce el algoritmo de hash, precomputa hashes de APIs comunes y mapea; hay scripts públicos que automatizan esto.
Clase 145 — El formato PE de Windows