SOBRE EL AUTOR INTRODUCCIÓN CAPÍTULO 1. INTRODUCCIÓN A LA INGENIERÍA INVERSA 1.1 DEFINICIONES 1.2 MOTIVACIÓN 1.2.1 Descifrar algoritmos y/o especificaciones privadas 1.2.2 Agregar funcionalidades 1.2.3 Validación y verificación del software 1.2.4 Detección de vulnerabilidades 1.2.5 Análisis de malware 1.3 LIMITACIONES 1.4 ASPECTOS LEGALES 1.5 CUESTIONES RESUELTAS 1.5.1 Enunciados 1.5.2 Soluciones CAPÍTULO 2. COMPILADORES 2.1 TEORÍA DE COMPILADORES 2.2 FASES DE UN COMPILADOR 2.3 ANÁLISIS LÉXICO 2.3.1 Definición de términos 2.3.2 Especificación de componentes léxicos 2.3.3 Reconocimiento de componentes léxicos 2.3.4 LEX como analizador léxico 2.4 ANÁLISIS SINTÁCTICO 2.4.1 Gramáticas independientes del contexto 2.4.2 Arboles de análisis sintáctico y derivaciones 2.4.3 Analizadores sintácticos LR 2.4.4 Analizadores sintácticos LALR 2.5 ANÁLISIS SEMÁNTICO 2.6 GENERACIÓN DE CÓDIGO INTERMEDIO 2.6.1 Código de tres direcciones 2.6.2 Tipos de proposiciones de tres direcciones 2.7 GENERACIÓN DE CÓDIGO Y OPTIMIZACIONES 2.8 HERRAMIENTAS PARA LA COMPILACIÓN 2.9 CUESTIONES RESUELTAS 2.9.1 Enunciados 2.9.2 Soluciones 2.10 EJERCICIOS PROPUESTOS CAPÍTULO 3. RECONSTRUCCIÓN DE CÓDIGO I. ESTRUCTURAS DE DATOS 3.1 CONCEPTOS BÁSICOS SOBRE RECONSTRUCCIÓN DE CÓDIGO 3.2 VARIABLES 3.3 ARRAYS 3.4 PUNTEROS 3.5 ESTRUCTURAS 3.6 OBJETOS 3.7 CUESTIONES RESUELTAS 3.7.1 Enunciados 3.7.2 Soluciones 3.8 EJERCICIOS PROPUESTOS CAPÍTULO 4. RECONSTRUCCIÓN DE CÓDIGO II. ESTRUCTURAS DE CÓDIGO COMUNES 4.1 ESTRUCTURAS DE CÓDIGO 4.2 OPERADORES 4.3 CONDICIONALES Y BIFURCACIONES 4.4 FUNCIONES 4.5 CUESTIONES RESUELTAS 4.5.1 Enunciados 4.5.2 Soluciones 4.6 EJERCICIOS PROPUESTOS CAPÍTULO 5. FORMATOS DE FICHEROS BINARIOS Y ENLAZADORES DINÁMICOS 5.1 CONCEPTOS PRELIMINARES 5.2 BINARIOS ELF 5.2.1 Formato de ficheros 5.2.2 Cargador dinámico 5.3 FICHEROS BINARIOS PE 5.3.1 Formato de fichero 5.3.2 Cargador dinámico 5.4 CUESTIONES RESUELTAS 5.4.1 Enunciados 5.4.2 Soluciones 5.5 EJERCICIOS PROPUESTOS CAPÍTULO 6. ANÁLISIS ESTÁTICO: DESENSAMBLADORES Y RECONSTRUCTORES DE CÓDIGO 6.1 CONCEPTOS INICIALES 6.2 DESENSAMBLADORES 6.2.1 Conceptos básicos 6.2.2 Herramientas disponibles 6.3 RECONSTRUCTORES DE CÓDIGO 6.3.1 Herramientas disponibles 6.3.2 Hex-Rays Decompiler 6.4 CUESTIONES RESUELTAS 6.4.1 Enunciados 6.4.2 Soluciones 6.5 EJERCICIOS PROPUESTOS CAPÍTULO 7. ANÁLISIS DINÁMICO: DEPURADORES DE CÓDIGO 7.1 ASPECTOS GENERALES 7.2 CAJA NEGRA: ANÁLISIS DE COMPORTAMIENTO 7.2.1 Interceptación de comunicaciones 7.2.2 Monitorización de funciones del sistema 7.3 CAJA BLANCA: DEPURADORES DE CÓDIGO 7.3.1 Depuradores de código en Linux 7.3.2 Depuradores de código en Windows 7.4 CUESTIONES RESUELTAS 7.4.1 Enunciados 7.4.2 Soluciones 7.5 EJERCICIOS PROPUESTOS CAPÍTULO 8. APLICACIONES PRÁCTICAS 8.1 PUNTO DE PARTIDA 8.2 CASO PRÁCTICO 1: ANÁLISIS DE VULNERABILIDADES 8.3 CASO PRÁCTICO 2: ANÁLISIS DE FUNCIONALIDADES OCULTAS 8.4 CASO PRÁCTICO 3: ANÁLISIS DE UN FORMATO DE FICHERO DESCONOCIDO 8.5 CUESTIONES RESUELTAS 8.5.1 Enunciados 8.5.2 Soluciones
La capacidad de invertir el proceso de compilado de un código fuente, siendo capaz de convertir un conjunto de números binarios en código fuente entendible por una persona con conocimientos de programación, sin más herramientas que la vista, es sin duda una gran cualidad que diferencia a los profesionales entre sí. El objetivo principal del libro es dotar al lector de las herramientas necesarias para poder llevar a cabo labores de ingeniería inversa por sus propios medios y comprendiendo en cada momento lo que sucede, sin toparse con barreras técnicas a las que no pueda enfrentarse. En esta obra el autor pone en práctica todo lo aprendido con casos reales y resueltos paso a paso, como la explotación de un fallo de seguridad, la detección de una puerta trasera y la generación de un fichero con formato válido habiendo proporcionado tan solo el binario que lo valida. También el lector encontrará un repaso por la historia de la ingeniería inversa, teoría de compiladores, estructuras de datos y de control (x86 32 y 64 bits y ARM), funcionamiento de los desensambladores y depuradores bajo Linux y Windows, formatos de ficheros PE y ELF, funcionamiento de cargadores dinámicos también en Linux y Windows El objetivo del libro sin duda, es proporcionar de recursos al lector para afrontar los diversos retos con una buena base teórica y técnica para dotarlo de razonamiento sobre cada problema y en cada caso.