Parte: 5 — Explotación de sistemas y binarios · Fuente: Andriesse, Practical Binary Analysis · Eilam, Reversing ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Sentar las bases de la ingeniería inversa de software: qué es, para qué sirve (análisis de malware, descubrimiento de vulnerabilidades, interoperabilidad, CTF), y qué contiene un binario ejecutable. Verás los formatos ELF (Linux) y PE (Windows), las secciones, símbolos y strings, y el flujo general de un análisis: reconocimiento estático rápido antes de abrir un desensamblador.
⚠️ Ética: aplica ingeniería inversa solo a binarios propios, de práctica o cuya licencia/permiso lo autoricen. Respeta la ley y los términos de uso.
Al finalizar, el alumno podrá:
file, strings, nm, readelf, objdump.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Qué es y usos legítimos | Marco y ética |
| 2 | Formato ELF | Binarios de Linux/CTF |
| 3 | Formato PE | Binarios de Windows/malware |
| 4 | Secciones (.text/.data/.rodata) | Dónde vive código y datos |
| 5 | Símbolos y stripping | Cuánta ayuda te da el binario |
| 6 | strings y triage rápido | Primeras pistas |
| 7 | Estático vs dinámico | Estrategia de análisis |
| 8 | Metodología por objetivos | No perderse en binarios grandes |
readelf -h muestra tipo, arquitectura y entry point.sudo apt install -y binutils file
pip install pwntools # checksec
# Para PE en Linux:
sudo apt install -y pev
Entorno propio.
crackme) y haz el triage:bash
file crackme
checksec --file=crackme
strings -n 6 crackme | less # busca prompts, rutas, contraseñas, formatos
bash
readelf -h crackme # cabecera, entry point
readelf -S crackme # secciones
readelf -s crackme | head # símbolos (si no está stripped)
main y desensámblala superficialmente:bash
objdump -d -M intel crackme | sed -n '/<main>:/,/ret/p' | head -40
Identifica llamadas relevantes (strcmp, puts, scanf) que sugieran la lógica de validación.
Para un PE (si dispones de uno de práctica), usa pev/peframe para listar imports y secciones:
bash
readpe -i muestra.exe # importaciones
readelf y localízalo en el desensamblado.strings y razona su función.Realiza el triage estático completo de un crackme e identifica, sin ejecutarlo, cuál es la función
que compara la clave y qué API/rutina usa.
Criterio de aceptación: señalas la función de comparación (p. ej. strcmp/lógica propia) y
justificas tu conclusión con evidencia de strings/objdump/readelf.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
readelf -s no muestra nombres |
Binario stripped; usa análisis por patrones |
strings no revela nada útil |
Cadenas cifradas/ofuscadas; pasa a dinámico |
| Confundir program vs section headers | Program = carga; section = análisis |
objdump da AT&T |
Añade -M intel |
| Analizar un PE con herramientas ELF | Usa pev/readpe para PE |
❓ ¿Reversing es legal? El análisis con fines de seguridad, interoperabilidad y sobre binarios propios/autorizados es legítimo; respeta licencias y jurisdicción.
❓ ¿Empiezo por estático o dinámico? Casi siempre triage estático primero; el dinámico confirma y desvela lo ofuscado.
❓ ¿Necesito los símbolos? Ayudan mucho, pero el reversing serio asume binarios stripped y reconstruye la semántica.
Clase 129 — Explotación en Windows: manejo de SEH