Producción · no repartir fuera del equipo docente

Guion detallado — PoorMan's Forensic

Universidad de León · Cybersecurity Summer Bootcamp 2026 · beat a beat de la propuesta cerrada, con lo que hace el ponente, lo que hace cada pareja, y las frases ancla listas para usar en directo.

🗣️ Teoría / demo — se escucha 🛠️ Práctica guiada — todos a la vez 🤝 Práctica libre — en parejas, a su ritmo 🎮 Reto / juego colectivo 🎬 Narrativa + activación ZK/WK = lo dan ellos 🧩 = hilo del cómplice
DÍA 1

El equipo (disco) y la nube con contraseña

4:27 bloques + 0:33 descansos = 5:00
ModoBloqueDur.Qué pasaFrases ancla
🗣️ 1 · Apertura 0:15
  • Cold-open sin presentarnos: Cellebrite Reader sobre un UFDR sintético, se entra en una app de chat y muestra "0 mensajes" — silencio de un par de segundos.
  • Se cambia a la vista de sistema de ficheros del mismo Reader y se señala el .sqlite de esa app: está ahí, pesa megas, el visor de pago no lo decodificó.
  • Presentación en 2 frases (perito + estudiante de abogacía → defendibilidad).
  • Tesis honesta: la libertad crece según se avanza — poca en adquisición, mucha en procesado (con la comercial de apoyo), total en análisis e informe.
  • Mapa de los 2 días + leitmotiv "una extracción, tres lentes".
"Esto es lo que ve el juez. Según esta herramienta de 40.000€, aquí no hubo conversación. ¿Caso cerrado?"
"El dato existía. Nadie lo decodificó."
"Cuanto más cerca del informe, más libres y más responsables."
🗣️ Entrega 1 ZK/WK 1:05
  • Quiénes son, qué es la informática forense (versión formal/académica, complementa el cold-open de urgencia).
  • Vida completa de la evidencia digital: recogida → adquisición → procesado → defensa en juicio.
  • Buenas prácticas al intervenir en una escena real: qué tocar y qué no, aislamiento electromagnético, equipos encendidos vs. apagados.
  • Contenido íntegro de ZK/WK.
"Vale, ya sabéis cómo se preserva una escena. Nosotros tenemos una escena esperando — Puebla de la Parrilla." (puente)
🎬 2 · El caso🧩 Puebla de la Parrilla 0:12
  • La escena: 6 AM, agosto, Puebla de la Parrilla (Córdoba) — pueblo real, broma de apertura con el nombre.
  • El encargo: caso "flojo", el juez espera algo en las primeras horas o suelta al detenido.
  • La hipótesis: acción terrorista probable, plan subido/compartido, mensajería sin identificar todavía, y 🧩 gestiones para conseguir algo — se deja deliberadamente en el aire, arranque del hilo del cómplice.
  • Se interpela a 2-3 personas al azar sin corregir. Acceso a las máquinas en paralelo mientras se cuenta.
"¿A que nadie la conoce? Le pusieron 'la Parrilla' porque a las 6 de la mañana ya estás como en una."
"¿Os suena la historia?"
"¿Tú qué harías primero?"
🗣️ Entrega 2 ZK/WK 0:18
  • Cifrado multiplataforma: BitLocker (Windows), FileVault (macOS), VeraCrypt y LUKS (Linux).
  • Qué son, cómo se reconoce cada uno desde fuera, qué hace falta para acceder si está cerrado.
  • Contenido íntegro de ZK/WK, con sus propias capturas.
"Vale, ya sabéis qué es BitLocker. Vamos a sacarle la clave a este disco AHORA MISMO." (puente)
🛠️ 3 · Paso 0 0:18
  • Cada pareja ejecuta en su máquina extraer_claves.bat (Monroy) — orden de volatilidad: esto antes que nada.
  • El contenedor BitLocker del equipo está abierto → el script saca la clave de recuperación sin más.
  • Sale también una clave WiFi que a primera vista no sirve para nada — se pide guardarla igualmente, sin explicar por qué.
  • Documentar en la bitácora/expediente del caso: primera entrada del "sistema de pistas".
"Guardadla. Os hará falta luego, aunque ahora no sepáis para qué."
🗣️ 3b · Bitpixie🧩 2º portátil 0:15
  • Se rompe el ritmo de práctica para una pieza de impacto: la investigación localiza un segundo portátil del sospechoso, más cuidado, sin BitLocker tan a mano.
  • Demo guiada (no práctica, por tiempo/infraestructura de red): downgrade del Boot Manager vía PXE + extracción de la clave de la RAM.
  • Honestidad explícita: en el mundo real sacar la clave de la RAM exige hardware específico (cold-boot, DMA); aquí, al ser virtual, se hace con un volcado de memoria desde el hipervisor (qm monitor/QMP) — se dice claramente que es un atajo, no el mundo real.
"No siempre hay un `.bat` esperando. A veces hay que ir a la RAM."
🛠️ 4 · Triage con Belkasoft🧩 Wallapop 0:25
  • Frase de apertura sobre el arsenal libre y su trampa (contaminación por exceso).
  • Cada pareja lanza Belkasoft Triage sobre su equipo y busca el objetivo principal: un documento reciente, cifrado — el plan.
  • Hallazgos accesorios: sesiones web vivas (Strava, Idealista, Wallapop), sesión de Google con contraseña reutilizada (la costura del caso).
  • 🧩 Dentro de Wallapop aparece una conversación con un contacto de nick genérico sobre "material de acampada" a un precio que no cuadra — no se resuelve aquí, queda anotado en la bitácora.
"El arsenal libre es enorme. La habilidad no es coleccionar herramientas, es saber cuál necesitas."
"Nadie paga 900€ por una tienda de campaña usada. Apuntad ese nick, luego volvemos."
🛠️ 5 · Dead-box con Monroy 0:25
  • Se apaga la máquina (transición explícita: "hasta ahora en vivo, ahora por la vía limpia") y se rearranca desde el ISO de Monroy — el disco de la VM pasa a ser el disco del sospechoso en solo lectura.
  • Cada pareja hace su keyword search con los términos del caso → localiza y exporta el .docx del plan (con hash, ya legible con la clave WiFi del Paso 0) y revisa lo recuperado de MFT/borrados.
  • Mensaje metodológico: más lento que ir en vivo, pero es lo que se sostiene ante un juez.
"Esto es lo fácil Y lo defendible: solo lectura, determinista, con hash. Esto es lo que se lleva al juez."
🗣️ Entrega 3 ZK/WK 0:12
  • Art. 588 sexies LECrim: registro de dispositivos de almacenamiento masivo, incluidos repositorios remotos.
  • Circular 5/2019 FGE: requisitos del consentimiento (sin error, con capacidad, inequívoco, revocable).
  • Contenido íntegro de ZK/WK.
"Ya sabéis qué autoriza un juez a entrar en la nube. Aquí está el auto de nuestro caso." (puente)
🤝 6 · La nube (con contraseña)🧩 JoClo 0:25
  • Se muestra en pantalla la parte relevante del auto judicial (2 líneas).
  • Cada pareja usa SandClo (reinyección de sesión) y SandGo (analizar el Google Takeout) sobre las cuentas ya encontradas: la de Google y la de Wallapop.
  • Ejemplo del Takeout — ver exhibit debajo de esta tabla: no son ficheros sueltos, es un caso completo con fuentes cruzadas.
  • 🧩 Con la nueva herramienta propia para Wallapop/Revolut/Idealista (nombre provisional JoClo), se descarga por API la conversación completa con el contacto — sesión reinyectada, no queda todo en el dispositivo. Aparecen foto de perfil y ubicación aproximada.
"Nadie sabe aún quién es. Pero ya tenemos cara y ciudad."
🗣️ Entrega 4 ZK/WK 0:13
  • Cómo se pide realmente un Takeout — Fase 1 (Aislar y Asegurar: contraseña, sesiones, tokens de hardware) y Fase 2 (Solicitar y Extraer) de Google, Telegram, Meta.
  • Contenido íntegro de ZK/WK, colocado justo antes de usarse en el bloque 6.
🎬 7 · Cierre Día 1 0:04
  • Recap: Paso 0 → triage → dead-box → nube — qué se podría llevar hoy mismo a un juez.
  • Runbooks de cada práctica al hub. Se deja el gancho del día 2 sin resolver.
"El sujeto hablaba con alguien por el móvil. Y hay un contacto de Wallapop que aún no tiene nombre. Mañana, las dos cosas se cruzan."
🎮 🏁 Kahoot 0:20
  • Quiz multijugador de repaso (avatares, marcador, podio, ya construido en la plataforma).
  • Preguntas sobre hechos concretos de la propia sesión (qué sacaba el .bat, qué encontró el triage, Monroy, Wallapop) — también repasa de forma encubierta las Entregas de ZK/WK.

Exhibit A — ejemplo ilustrativo del Takeout del sospechoso (bloque 6, visto en SandGo)

Fuente dentro del TakeoutLo que muestra SandGoPor qué importa
Actividad de la cuenta (logins)2026-08-03 05:47 · IP 185.220.x.x · país no identificado, frente al resto de accesos desde IP de CórdobaLogin anómalo, horario extraño, no cuadra con "solo su cuenta de siempre"
Historial de ubicacionesPuntos GPS repetidos en una nave industrial a las afueras del pueblo, mismas fechas que la conversación de WallapopCruce directo con la pista abierta en el triage
GmailUn borrador nunca enviado con una lista de materialesNo aparece en "enviados" — justo lo que un vistazo superficial se salta y SandGo sí indexa (FTS5)
Mis actividades / búsquedasBúsquedas de Maps hacia la misma nave, búsquedas de términos del planRefuerza la intención, con timestamps defendibles
DÍA 2

El móvil, su nube, y el CTF

4:22 bloques + 0:38 descansos = 5:00
ModoBloqueDur.Qué pasaFrases ancla
🗣️ 1 · Cold-open🧩 Vigilancia 0:08
  • Demo en vivo, puntual, 8' — nada corriendo de fondo el resto del día.
  • Acción corta con la flota física (AndoidRemoto) mientras una webcam sobre la zona de teléfonos retransmite en directo: los móviles reciben y responden, solos, delante de la sala.
  • Se presenta como la vigilancia real sobre el contacto de ayer.
"Así es como se le sigue la pista a alguien como él, en directo."
🗣️ 2a · Rooteo real (demo) 0:08
  • Se intenta rootear el dispositivo objetivo con exploits públicos conocidos (Dirty Pipe, Dirty COW, Bad Binder...) — honestamente, la mayoría fallan contra un móvil actual y parcheado; el fracaso es la lección: poco margen sin herramienta comercial.
  • Giro: la propia comercial trae su exploit de fábrica para rootear — módulo interno extraído por ingeniería inversa completa del equipo, y ese sí funciona.
"La herramienta de 40.000€ trae su propio exploit de fábrica. Lo hemos sacado, y funciona."
🛠️ 2b · Root vs. no-root🧩 Calentamiento 0:20
  • Cada pareja recibe su máquina Android virtual (BlissOS-14.3-x86_64, con WhatsApp y Botim ya instaladas).
  • Primero exploran sin root: solo lo que daría un adb backup normal, casi nada.
  • Rootean con Dirty Pipe (CVE-2022-0847), exploit de kernel real, no Magisk — repiten la exploración: ahora acceso completo a /data/data/, BDs crudas.
  • Se presenta como calentamiento sobre "un dispositivo similar al del cómplice".
"Lo que hagáis aquí en 20 minutos, lo repetiréis con el UFDR real dentro de un rato."
🛠️ 3 · UFDR + estructura física🧩 Reaparece 0:40
  • Qué es un UFDR (breve) → se abre con Reader, visor gratuito → se recorren WhatsApp/Telegram/Signal/navegación.
  • ALEAPP/iLEAPP como parsers libres: parsean bien lo estándar, no Botim.
  • Estructura física/binaria sin depender de ninguna herramienta que la abstraiga: E01 (binario complejo, secciones, hash MD5 embebido verificable a mano) vs. UFDR ("solo" zip, pero con report.xml sin esquema público, reconstruido por la comunidad) — dos tipos de opacidad distintos.
  • 10' de bicheo libre en parejas: referencias a Botim en los mensajes; 🧩 el contacto de Wallapop reaparece entre las apps instaladas (Instagram/Telegram/TikTok).
🛠️ 4 · SQLite a mano🧩 Confirmado 0:25
  • WhatsApp (práctica, calentamiento): DB Browser + SQL preparado → aparecen los mensajes sin más.
  • Telegram (solo demo): datos binarios, "trabajo de chinos" real — detalle concreto: la clave del registro va big-endian en iOS y little-endian en Android.
  • Botim (práctica, "el bingo"): se abre su BD → aparecen los mensajes.
  • 🧩 Entre los contactos de Botim reaparece el mismo nick/número de Wallapop — confirmado, es la misma persona.
"El '0' del visor de 40.000€ era mentira. Estaba aquí."
"Es él. El de Wallapop y el de Botim son la misma persona: nuestro cómplice."
🛠️ 5 · Sand 0:30
  • Se escala de "a mano" a algo reproducible: se extrae del UFDR la BD de Botim, se sube a Sand → mensajes recuperados + informe con hashes, mismo resultado que antes pero determinista.
  • Se repite con otra BD/app para afianzar que el método (no la herramienta) es lo que se sostiene.
  • Cierra el leitmotiv: Reader (el "0") → SQLite a mano (lento, frágil) → Sand (reproducible, defendible, escalable).
"Una extracción, tres lentes. La buena recupera lo que la cara no vio."
🤝 6 · La nube del móvil 0:40
  • El UFDR no lo tiene todo — buena parte vive en la nube de las propias apps (Instagram/TikTok cloud-first, Telegram solo cachea parte).
  • SandClo con un UCAE (.ucae, formato Cellebrite) en demo guiada, completando con 2FA/contraseña de la cuenta → acceso a navegación real, cada pareja investiga desde ahí.
  • Contexto LEA para quien tenga placa: EPE de Europol, ECTEG, CEPOL, Universidad de Dublín, EACTDA.
🤝 7 · Previous 0:22
  • Demo breve de Previous/forensichub: qué es, cómo ingiere un UFDR completo, navegación multiusuario.
  • Resto del bloque, uso libre: cada pareja trastea a su ritmo — explícitamente como calentamiento para el CTF.
"Trastead: dentro de un rato esta será una de vuestras herramientas en el reto."
🎬 8 · Cierre 0:09
  • Recap de los 2 días completos: del disco del equipo a la nube del móvil, con la tesis de fondo.
  • Acceso a herramientas propias: no se entregan directamente, se piden desde correo corporativo → acceso a repositorio; en el servidor del taller solo se usan.
🎮 🏁 CTF🧩 El cómplice 1:00
  • Reglas (0:00-0:05): salto de la investigación — toca investigar al cómplice. Su propio caso completo: E01 de su portátil, UFDR de su móvil, y Google Takeout suyo, coherente con el caso pero con hallazgos que nadie ha visto — regla dura: nada de lo ya visto en las prácticas guiadas sirve de respuesta directa. Todas las herramientas disponibles, incluida explícitamente SandGo para su Takeout (mismo patrón del bloque 6 del Día 1, con datos nuevos: login desde IP que geolocaliza a otra ciudad, entrada de Calendar con una cita que da la ubicación de la siguiente pista). Premia completar, no velocidad.
  • Escalera 🟢→🔴 (0:05-0:42): keyword en su E01 · fichero borrado · clave de cifrado del disco · mensaje/contacto visible en su UFDR · app que el Reader da en 0 → BD cruda · IP/país de login o fecha, con SandGo, en su Takeout · coordenada/lugar, también con SandGo.
  • Stinger (tras ~6 resueltos): una última app de chat que ningún tool de clase decodificó y que ni siquiera usa SQLite (vive en IndexedDB/LevelDB, tipo WebView embebida) — hay que escribir su esquema en Sand desde cero. Deliberadamente distinta de Botim para que no se sienta "más de lo mismo".
  • Cierre (0:42-1:00): scoreboard final + reconocimiento.
"Nada que no hayáis hecho ya. Quien lo complete todo, gana."
"Botim se decodificaba con un esquema. Esta ni siquiera usa SQLite. Bienvenidos al último escalón."