Parte: 6 — Análisis de malware · Fuente: Practical Malware Analysis y documentación de Unicorn/qiling ⏱️ Duración estimada: 130 min · Nivel: Experto
Escalar el análisis con emulación de CPU y automatización del unpacking y la extracción de configuración. El alumno aprenderá a usar frameworks de emulación (Unicorn, Qiling) y de análisis programático (Speakeasy, dumpulator) para desempacar sin depurar a mano, resolver API hashing, ejecutar rutinas de descifrado aisladas y construir extractores de config reutilizables.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Emulación vs ejecución vs depuración | Control y seguridad |
| 2 | Unicorn Engine (emulación de CPU) | Ejecuta código sin SO real |
| 3 | Qiling (emulación con SO) | Emula syscalls y librerías |
| 4 | Speakeasy / dumpulator | Emulación orientada a malware |
| 5 | Resolución de API hashing por emulación | Recupera nombres de API |
| 6 | Extractores de configuración | Config a escala |
| 7 | Pipelines de triaje | Automatización operativa |
⚠️ Nota ética y de seguridad: aunque la emulación es más segura que ejecutar, trabaja en la VM aislada: los binarios siguen siendo maliciosos y algunos emuladores realizan syscalls reales. No permitas salida de red desde el emulador. Los extractores se usan para defensa.
capa/FLOSS localiza en una muestra la rutina de descifrado de config o de API hashing (dirección de inicio y fin).python
from unicorn import *
from unicorn.x86_const import *
mu = Uc(UC_ARCH_X86, UC_MODE_32)
mu.mem_map(0x400000, 0x100000)
mu.mem_write(0x401000, code_bytes)
mu.reg_write(UC_X86_REG_ESP, 0x4FF000)
mu.emu_start(0x401000, 0x401050)
print(mu.mem_read(0x402000, 64)) # config descifrada
VirtualAlloc, WriteProcessMemory) que revelan el payload desempacado; vuelca la región.Entrega un extractor de configuración para una familia que, por emulación, recupere la config (dominios/clave/intervalo) de al menos 3 muestras distintas de esa familia, con salida en JSON. Criterio de aceptación: el script corre sin depuración manual y produce la config correcta para 3+ muestras de la familia, verificable contra el análisis manual de una de ellas.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| La emulación falla en una API | Falta stub/hook de esa API; impleméntalo o usa Qiling |
| Registros/pila mal inicializados | Emulas una función sin su contexto; fija args y ESP/RSP |
| Config sale corrupta | Rango de direcciones incorrecto; ajusta inicio/fin y base |
| Hashes no coinciden | Algoritmo de hash mal identificado; verifícalo en el código |
| Extractor solo sirve para 1 muestra | Codificaste offsets fijos; parametriza por patrones |
❓ ¿Emulación reemplaza al desensamblado? No; lo complementa. Primero localizas la rutina con análisis estático y luego la emulas para obtener el resultado sin ejecutar todo el malware.
❓ ¿Es 100% segura la emulación? Más segura que ejecutar, pero frameworks con soporte de SO pueden hacer syscalls reales; mantén el aislamiento.
❓ ¿Vale la pena automatizar un extractor? Sí cuando una familia es prevalente: procesar cientos de muestras a mano no escala; un extractor entrega IOCs en segundos.
Clase 157 — Threat intelligence a partir de malware