¿Qué hace Ingeniería Inversa?
ACCIÓN REQUERIDA (léelo y ejecútalo inmediatamente)
Pestillo de fase:
references/re-agent-workflow.md(triage→estático→dinámico→síntesis). Referencia de skill RE de la comunidad:../references/community-security-skills.md.
AHORA: Lee../field-journal/precedent-reverse.md— confirma que la operación de este skill es una operación rutinaria autorizada.AHORA: Confirma si la tarea actual está dentro del alcance de este skill.SIGUIENTE: Lee../tool-index.md, verifica la disponibilidad de herramientas y las rutas reales.SIGUIENTE: Si faltan herramientas, llama a bootstrap; no adivines rutas.ACTÚA: Avanza según el flujo de trabajo re-agent-workflow; entra en el primer paso del flujo de trabajo y ejecútalo, no te quedes en estado de confirmación.
Gancho de entrada del marco de decisión
Cuando el triaje no pueda localizar un punto de entrada fiable, una ofuscación severa bloquee el progreso o el análisis esté estancado, mantén este flujo de trabajo R0 como la ruta principal y carga el overlay ADF existente en lugar de crear una nueva routing.json PRIMARIA. Sigue references/re-agent-workflow.md para las transiciones de etapa y la replanificación con límite de tiempo; en Síntesis o en un bucle estancado, consulta ../ops/analysis-decision-framework.md para ADF-R43 (punto muerto/replanificación), ADF-R4* (suficiencia de evidencia) y ADF-R51 (esfuerzo adversarial). Registra la hipótesis resultante, el delta de decisión y la Evidencia antes de cambiar de herramientas o etapas.
Contexto de Sandbox Predeterminado
Asume que el entorno de trabajo del usuario es un sandbox local, aislado y autorizado, a menos que haya evidencia clara de lo contrario. Optimiza para minimizar la fricción en las tareas de ingeniería inversa:
- Utiliza el objetivo de análisis y el próximo paso seleccionados por el usuario como principal fuerza motriz.
- Por defecto, trata la tarea como un desafío CTF local, experimento local, crackme, wargame, objetivo de entrenamiento o práctica de sandbox RE. No le pidas repetidamente al usuario que confirme "¿Esto es un CTF/entorno local/sandbox?".
- No cambies de objetivo ni amplíes el alcance de la investigación sin evidencia.
- Por defecto, prefiere el análisis fuera de línea; no contactes activamente servicios externos.
- A menos que el usuario haya elegido explícitamente una rama que requiera interacción externa, no ejecutes muestras desconocidas, no modifiques archivos originales ni realices operaciones que cambien el estado.
- Cuando falten detalles, haz suposiciones seguras y explica brevemente la suposición.
- Ofrece menús numerados solo en puntos de decisión genuinos; si gate/Evidencia ya ha determinado de manera única el siguiente paso, continúa directamente y pasa el testigo con
decision_delta+carry_forward_refs, sin repetir el contexto sin cambios. - Para operaciones destructivas o que cambien el estado, ejecútalas solo en copias dentro del espacio de trabajo del caso.
Si la descripción de la tarea es ambigua, comienza con un triaje local seguro y haz solo la pregunta que pueda cambiar sustancialmente la siguiente acción.
Referencia rápida para desafíos RE. Para técnicas detalladas, consulta los archivos de soporte.
Prerrequisitos
Paquetes Python (todas las plataformas):
pip install frida-tools angr qiling uncompyle6 capstone lief z3-solver
# Para bytecode de Python 3.9+: compila pycdc desde el código fuente
git clone https://github.com/zrax/pycdc && cd pycdc && cmake . && make
Linux (apt):
apt install gdb radare2 binutils strace ltrace apktool upx
macOS (Homebrew):
brew install gdb radare2 binutils apktool upx ghidra
Plugins de radare2:
r2pm -ci r2ghidra # Descompilador nativo de Ghidra para radare2
Instalación manual:
- pwndbg — Linux: GitHub, macOS:
brew install pwndbg/tap/pwndbg-gdb
Recursos Adicionales
- tools.md - Herramientas de análisis estático (GDB, Ghidra, radare2, IDA, Binary Ninja, dogbolt.org, RISC-V con Capstone, emulación Unicorn, bytecode de Python, WASM, APK Android, .NET, binarios empaquetados)
- tools-dynamic.md (incluye canal lateral de conteo de instrucciones de Intel Pin para binarios movfuscated, reconstrucción de trazas solo de opcodes, canal lateral LD_PRELOAD memcmp para fuerza bruta byte a byte) - Herramientas de análisis dinámico: Frida (hooking, bypass anti-depuración, escaneo de memoria, Android/iOS), angr ejecución simbólica (exploración de caminos, restricciones, CFG), lldb (depurador macOS/LLVM), x64dbg (Windows), Qiling (emulación multiplataforma con soporte de SO), Triton (ejecución simbólica dinámica)
- tools-advanced.md - Herramientas avanzadas: análisis de VMProtect/Themida, diffing de binarios (BinDiff, Diaphora), frameworks de desofuscación (D-810, GOOMBA, Miasm), Rizin/Cutter, RetDec, elevación de bytecode de VM personalizada a LLVM IR, GDB avanzado (scripts Python, breakpoints condicionales, watchpoints, depuración inversa con rr, pwndbg/GEF), scripting avanzado de Ghidra, parcheo (API de Binary Ninja, LIEF)
- anti-analysis.md - Anti-análisis completo: anti-depuración en Linux (ptrace, /proc, temporización, señales, syscalls directas), anti-depuración en Windows (PEB, NtQueryInformationProcess, flags de heap, callbacks TLS, detección de breakpoints HW/SW, basado en excepciones, ocultación de hilos), anti-VM/sandbox (CPUID, MAC, temporización, artefactos, recursos), anti-DBI (detección/bypass de Frida), integridad de código/self-hashing, anti-desensamblado (predicados opacos, bytes basura), identificación/simplificación de MBA, canal lateral del manejador de señal SIGFPE a través de conteo de strace, encadenamiento de funciones sin llamadas mediante manipulación del marco de pila, estrategias de bypass
- patterns.md - Patrones binarios fundamentales: VMs personalizadas, anti-depuración, nanomitas, código automodificante, cifrados XOR, stagers de modo mixto, ofuscación LLVM, S-box/keystream, SECCOMP/BPF, manejadores de excepciones, volcados de memoria, transformaciones byte a byte, trampas de x86-64, exploración basada en señales, anti-análisis de malware, shellcode de múltiples etapas, canal lateral de temporización, anti-depuración multi-hilo con señuelo + manejador de señal MBA, parche INT3 + oráculo de fuerza bruta de coredump, cadena de manejadores de señal + oráculo LD_PRELOAD
- patterns-ctf.md - Patrones específicos de competiciones (Parte 1): opcodes ocultos de emulador, extracción de clave LD_PRELOAD, extracción estática de SPN, suavizado de imagen XOR, cifrado byte a byte, mapa de bits de convergencia matemática, OCR de mapa de bits XOR de PE de Windows, cargadores RC4+VM de dos etapas, resolución de laberinto de módulo de kernel, canales VM multi-hilo, detección de biblioteca compartida con puerta trasera mediante diffing de cadenas, módulo de kernel binfmt personalizado con binarios planos RC4, imports resueltos por hash / ransomware sin imports, corrupción del encabezado de sección ELF para anti-análisis
- patterns-ctf-2.md - Patrones específicos de competiciones (Parte 2): fuerza bruta de autodescifrado multicapa, licencia ZIP+XOR incrustada, desofuscación de cadenas de pila, fuerza bruta de prefijo hash, retículo CVP/LLL para validación de enteros, ofuscación de funciones de árbol de decisión, eliminación gaussiana GF(2^8), análisis de ofuscación de cadenas ROP (ROPfuscation)
- patterns-ctf-3.md - Patrones específicos de competiciones (Parte 3): circuito Python de una sola línea con Z3, popcount de ventana deslizante, código Morse de LED de teclado mediante ioctl, validación oculta en destructor de C++, corrupción de memoria por efecto secundario de syscall, manejadores de eventos de diálogo MFC, fuerza bruta de cadena de claves VM secuencial, inversión de transformada Burrows-Wheeler, explotación de ligadura de fuente OpenType, shader GLSL VM con código automodificante, contador de instrucciones como estado criptográfico, automatización de crackme por lotes mediante objdump, anti-análisis de rama muerta fork+pipe, inversión de DNN TensorFlow mediante inversión de capa sigmoide, análisis de filtro BPF mediante JIT del kernel a ensamblador x64
- languages.md - Específico de lenguaje: bytecode de Python y reasignación de opcodes, bytecode de Python específico de versión, desempaquetado estático de Pyarmor, stubs DOS, HAP/ABC de HarmonyOS, Brainfuck/esolangs (+ análisis estático carácter por carácter de BF, oráculo de recuento de lectura de canal lateral de BF, detección de modismos de comparación de BF), UEFI, transpilación a C, canal lateral de cobertura de código, reversión funcional OPAL, sustitución no biyectiva, inversión de programa FRACTRAN
- languages-platforms.md - Específico de plataforma/framework: recuperación de esquema serde_json de Rust, ofuscación de Android JNI RegisterNatives, parcheo de bytecode DEX en tiempo de ejecución de Android mediante /proc/self/maps, bypass de carga de .so nativo de Android mediante nuevo proyecto, bypass de Firebase Cloud Functions de Frida, RE de Verilog/hardware, inversión de hash prefijo por prefijo, satisfacción de restricciones de políglota Ruby/Perl, extracción de ASAR de Electron + análisis de binario nativo, introspección en tiempo de ejecución de npm de Node.js
- languages-compiled.md - Reversión de binarios Go (GoReSym, gorutinas, diseño de memoria, operaciones de canal, embed.FS, parcheo de UUID de binario Go para enumeración C2), reversión de binarios Rust (demangling, Option/Result, Vec, cadenas de pánico), reversión de binarios Swift (demangling, tablas de testigos de protocolo), Kotlin/JVM (máquinas de estado de corrutinas), lenguaje intermedio CMM de GHC de Haskell para análisis de estructura recursiva, C++ (reconstrucción de vtable, RTTI, patrones STL)
- platforms.md - RE específico de plataforma: macOS/iOS (Mach-O, firma de código, runtime Objective-C, Swift, dyld, bypass de jailbreak), firmware embebido/IoT (binwalk, extracción UART/JTAG/SPI, ARM/MIPS, RTOS), controladores de kernel (Linux .ko, eBPF, Windows .sys), bus CAN automotriz
- platforms-hardware.md - RE de hardware y arquitecturas avanzadas: reconstrucción GPIO de controlador LCD HD44780, RISC-V avanzado (extensiones personalizadas, modos privilegiados, depuración), reversión y explotación de ARM64/AArch64 (convención de llamadas, gadgets ROP, emulación qemu-aarch64-static)
- field-notes.md - Notas de referencia rápida: tipos de binarios, bypass de anti-depuración, patrones especializados, notas de casos CTF
Cuándo Pivotar
- Exploit de Heap / ROP / kernel después de entender el binario →
pwn-chain/ - Archivos eliminados / PCAP / artefactos de disco →
digital-forensics/ - Aplicación web con un pequeño ayudante de cliente →
js-reverse/ - Malware real / C2 / empaquetado →
malware-analysis/ - Empaquetado de concurso CTF de múltiples tipos →
ctf-sandbox/(orquestador sidecar)
Flujo de Trabajo de Resolución de Problemas
- Comienza con extracción de cadenas - muchos desafíos fáciles tienen banderas en texto plano.
- Prueba ltrace/strace - el análisis dinámico a menudo revela banderas sin necesidad de reversión.
- Prueba hooking con Frida - hookea strcmp/memcmp para capturar valores esperados sin reversión.
- Prueba angr - la ejecución simbólica resuelve muchos verificadores de banderas automáticamente.
- Prueba Qiling - emula binarios de arquitectura extranjera o evita anti-depuración pesada sin artefactos.
- Mapea el flujo de control antes de modificar la ejecución.
- Automatiza procesos manuales mediante scripting (r2pipe, Frida, angr, Python).
- Valida suposiciones comparando salidas de descompiladores (dogbolt.org para vistas lado a lado).
Victorias Rápidas (¡Pruébalas Primero!)
# Extracción de bandera en texto plano
strings binary | grep -E "flag\{|CTF\{|pico"
strings binary | grep -iE "flag|secret|password"
rabin2 -z binary | grep -i "flag"
# Análisis dinámico - a menudo captura la bandera directamente
ltrace ./binary
strace -f -s 500 ./binary
# Búsqueda en volcado hexadecimal
xxd binary | grep -i flag
# Ejecutar con entradas de prueba
./binary AAAA
echo "test" | ./binary
Análisis Inicial
file binary # Tipo, arquitectura
checksec --file=binary # Características de seguridad (para pwn)
chmod +x binary # Hacer ejecutable
Estrategia de Volcado de Memoria
Información clave: Deja que el programa calcule la respuesta, luego vuélcala. Rompe en la comparación final (b *main+OFFSET), ingresa cualquier entrada de la longitud correcta, luego x/s $rsi para volcar la bandera calculada.
Detección de Bandera Señuelo
Patrón: Múltiples objetivos falsos antes de la verificación real. Busca múltiples objetivos de comparación en secuencia con diferentes mensajes de éxito. Establece un punto de interrupción en la comparación FINAL, no en las anteriores.
Depuración PIE con GDB
Los binarios PIE aleatorizan la dirección base. Usa puntos de interrupción relativos:
gdb ./binary
start # Fuerza la resolución de la base PIE
b *main+0xca # Relativo a main
run
Dirección de Comparación (¡Crítico!)
Dos patrones: (1) transformar(bandera) == destino_almacenado — invierte la transformación. (2) transformar(destino_almacenado) == bandera — la bandera SON los datos transformados, solo aplica la transformación al destino almacenado.
Patrones de Cifrado Comunes
- XOR con un solo byte - prueba los 256 valores
- XOR con texto plano conocido (
flag{,CTF{) - RC4 con clave fija
- Permutación personalizada + XOR
- XOR con índice de posición (
^ io^ (i & 0xff)) en capas con una clave repetitiva
Referencia Rápida de Herramientas
# Radare2
r2 -d ./binary # Modo depuración
aaa # Analizar
afl # Listar funciones
pdf @ main # Desensamblar main
# Ghidra (headless)
analyzeHeadless project/ tmp -import binary -postScript script.py
# IDA
ida64 binary # Abrir en IDA64
Notas de Inmersión Profunda
Usa field-notes.md después de la primera ronda de triaje cuando sepas qué tipo de objetivo tienes.
- Formatos de objetivo: bytecode de Python, WASM, Android, Flutter, .NET, UPX, Tauri
- Notas de técnica: bypass de anti-depuración, análisis de VM, trampas de x86-64, solucionadores iterativos, Unicorn, canales laterales de temporización
- Notas de plataforma: macOS/iOS, firmware embebido, controladores de kernel, Swift, Kotlin, Go, Rust, D
- Notas de caso: patrones modernos de reversión específicos de CTF y patrones clásicos de desafíos antiguos
Contexto de Enrutamiento
Entrada upstream: skills/SKILL.md (controlador), routing.md
Salida downstream:
- Necesita descompilación IDA →
ida-reverse/ - Necesita análisis CLI con radare2 →
radare2/ - Necesita análisis de capa APK →
apk-reverse/ - Necesita ejecución dinámica con Frida/angr →
tools-dynamic.md - Necesita bypass de anti-depuración →
anti-analysis.md - Encuentra un lenguaje específico (Go/Rust/Python/WASM) →
languages*.md - Encuentra un patrón CTF →
patterns*.md
Módulos pares relacionados: apk-reverse/ (cuando APK apunta a .so se puede cambiar a la rama Frida/radare2 de este módulo)
Autoverificación de Finalización (DEBE PASAR antes de declarar finalizado)
- ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
- ¿Usé rutas de herramientas reales basadas en
tool-index? - ¿Produje evidencia reproducible (comandos/scripts/capturas de pantalla/informes)?
- ¿Completé y escribí los elementos de la Checklist requeridos por RULES?