chemical-and-materials-engineering
Utilizando Ollydbg y X64dbg para Windows Inversa Proyectos de Ingeniería
Table of Contents
Comprender el paisaje de la ingeniería inversa de Windows
La ingeniería inversa de Windows sigue siendo una disciplina crítica para descubrir vulnerabilidades de software, diseccionar malware, analizar protocolos patentados, y entender programas heredados o indocumentados. Dos de los depuradores más usados en el ecosistema de Windows son OllyDbg] (para aplicaciones de 32 bits) y x64dbg[LT]
Un vistazo a OllyDbg
Orígenes y Filosofía
OllyDbg, creado por Oleh Yuschuk, ganó popularidad a principios de los años 2000 como un depurador de nivel de ensamblador ligero y fácil de usar. A pesar de estar limitado a los ejecutables de 32 bits, sigue siendo relevante para analizar aplicaciones de Windows más viejas, muchas muestras de malware compiladas para x86, y software que no incluye construcciones de 64 bits.
Instalación y configuración inicial
Descargar OllyDbg de su sitio web oficial (]ollydbg.de]). El paquete es un único ejecutable – ningún instalador requerido – que hace la portabilidad fácil. Para obtener mejores resultados, ejecutar OllyDbg en un entorno Windows de 32 bits o en un sistema de 64 bits que soporta WOW64; recuerde que OllyDbg en sí puede depurar procesos de 32 bits.
Pasos clave de configuración después del lanzamiento:
- Ir a Opciones → Aspecto] y establecer fuentes y colores a su preferencia – los esquemas de alto contraste ayudan a reducir la tensión de los ojos durante las sesiones largas.
- Bajo Opciones → Opciones depuradoras, permiten “Pausa en punto de ruptura” y consideran desactivar “Ignorar INT3” si planea utilizar puntos de ruptura personalizados.
- Configure los colores Mapa de memoria para detectar rápidamente regiones ejecutables, doblables o de salto.
- Cargue un ejecutable de prueba (por ejemplo, un sencillo compilado `HelloWorld.exe`) para verificar el desmontador y los paneles de registro hacen correctamente.
Interfaz de usuario
La interfaz de OllyDbg consiste en varios paneles que pueden ser reorganizados a través de arrastrar y soltar. El diseño predeterminado incluye:
- Ventana desmontable (top left): Muestra el código desmontado con direcciones, bytes, mnemonics y comentarios.
- Marcas de la ventana (de la derecha): Muestra el contenido de registro de CPU (EAX, EBX, ECX, EDX, ESP, EBP, EIP, banderas). Cada registro actualiza en directo a medida que avanzas.
- Ventana de gota (abajo izquierdo): Vista hexadecimal y ASCII de la memoria en una dirección seleccionada. Puede cambiar la dirección de base haciendo clic con el botón derecho y eligiendo “Ir a”.
- Ventana de tacos (derecho inferior): Muestra los marcos de pila actuales, direcciones de retorno y variables locales.
Estos paneles son interdependientes: hacer clic en una dirección en la ventana de volcado actualiza instantáneamente la desmontaje si esa región de memoria contiene código.
Tipos de punto de ruptura esenciales
OllyDbg admite múltiples mecanismos de puntos de ruptura:
- INT3 breakpoint (F2): Punto de ruptura del software que reemplaza un byte de instrucciones con 0xCC. Simple, pero detectable por código antidesbugimiento.
- Punto de ruptura de memoria: Se establece en una región de memoria (ejecutable, escribe o lee) haciendo clic con el botón derecho en el mapa de la memoria o el vertedero. Útil para capturar cuando se accede a un buffer de datos específico.
- ]Hardware breakpoint:] Invocado a través de Debug → Puntos de ruptura de hardware. Usa registros de depuración de CPU (DR0‐DR3). Más difícil de detectar que INT3, pero limitado a cuatro puntos de ruptura simultáneos.
- Punto de ruptura convencional: Un punto de ruptura INT3 combinado con una caja de mensajes Win32 o una condición de registro (por ejemplo, "romper cuando EAX == 0"). Accesible haciendo clic con el botón derecho en una línea y seleccionando "Breakpoint → Condición".
Código de navegación con OllyDbg
Usar la tecla F7 para entrar en una llamada, F8] para dar un paso hacia atrás, y F9 para ejecutar hasta el siguiente punto de ruptura. La función "Rano trazado" (]Debug → Trace into[FLT]
El menú "Buscar" es un asistente poderoso:
- Buscar → Comando: Localizar un conjunto específico mnemónico (por ejemplo, "CALL") en todo el módulo.
- Buscar → Secuencia de bytes: Encontrar patrones en el binario, como una determinada cadena o firma.
- Buscar → Todas las cuerdas referenciadas: Extraer rápidamente todas las cadenas ASCII legibles y Unicode utilizadas por el programa.
Plugin Ecosystem
La extensibilidad de OllyDbg a través de plugins compensa su falta de actualizaciones.
- OllyDump: Desenfunda la memoria del proceso de ejecución al disco para el análisis estático o el parche.
- HideDebugger: Obscures la presencia de OllyDbg para evadir los cheques anti-debugging.
- OllyScript: Automatizar tareas repetitivas utilizando un lenguaje de scripting tipo Python. Por ejemplo, puede scripts en busca de patrones y establecer puntos de ruptura en múltiples carreras.
- PhantOm: plugin avanzado de sigilo que parche a muchos IsDebugger comúnPresentación y NtQueryInformationDetección de procesos.
Para instalar un plugin, extraiga el archivo `.dll` en la carpeta `Plugins ' de OllyDbg y reinicie el depurador.
Mastering x64dbg: Modern Debugging para objetivos de 32-Bit y 64-Bit
Por qué x64dbg se ha convertido en el estándar
Aunque OllyDbg es un veterano, x64dbg es la herramienta de ir a la ingeniería inversa contemporánea. Admite tanto 32 bits como 64 bits ejecutables, tiene una base de código de código de código abierto activamente mantenida (]GitHub repository) e introduce características modernas como script
Instalación y Primera Iniciación
Descarga la última versión del sitio web x64dbg (]x64dbg.com]). El paquete incluye dos lanzadores ejecutables: `x32dbg.exe` para depuración de 32 bits y `x64dbg.exe` para 64 bits. Ambos comparten la misma configuración y carpetas plugin.
En el primer lanzamiento, establecer estas preferencias esenciales:
- Configuración → Preferencias → Eventos:] Compruebe “Breakpoint at system breakpoint” para pausar en el punto de entrada en lugar del cargador del sistema.
- Apariencia:] Elige un tema oscuro o un esquema de color personalizado bajo “Opticks” – más fácil en los ojos para uso prolongado.
- Desmontable: Permite “Mostrar representación byte” y “Mostrar opcodes” si desea que los detalles de instrucciones sean visibles en todo momento.
- Función interior: x64dbg tracks changes to memory and registers – puedes rodar un paso si accidentalmente remplazas algo.
Interfaz y flujo de trabajo
La ventana x64dbg se divide en paneles abatibles:
- CPU Disassembly: La vista principal del código, con dirección, bytes, desmontaje y columna para comentarios. El clic derecho revela un menú contextual rico con comandos de análisis: “Encuentra referencias a”, “Encuentra Xrefs”, “Asignar a nuevo NOP”, etc.
- Registros: Muestra todos los registros de uso general, banderas, registros de segmentos y estado flotante. Los colores indican cambios desde el último evento – verde para las banderas modificadas, rojas para las nuevas banderas.
- Dump:] Editor de hex de memoria que puede cambiar entre modos de hex, texto y estructura. Haga clic con el botón derecho en una dirección y elija “Watch DWord” para monitorear instantáneamente un valor de 4 bytes.
- Estuche:] Similar a OllyDbg, pero con un formato más agradable y la capacidad de destacar las direcciones de retorno y los marcos locales.
- ]Vista de gráficos (Tab): Presiona G] en una función para abrir el gráfico de flujo de control. Esto es inestimable para entender las estructuras de rama, los lazos y los saltos condicionales a un vistazo.
- Simbolos y módulos: Lista todos los DLL cargados y sus tablas de exportación. Puede establecer puntos de rotura en cualquier función exportada buscando en la ficha de símbolos.
Puntos de ruptura avanzados y localización
x64dbg extiende la funcionalidad de punto de ruptura más allá de OllyDbg:
- Breakpoint con condiciones y cuenta de éxito:] Haga clic derecho en una línea → “Breakpoint” → “Editar”. Puede agregar una condición como `EAX == 0x12345678` y un mensaje de registro a la ventana de registro de puntos de ruptura.
- Punto de ruptura de memoria en el rango: Haga clic en la pestaña “Mapa de memoria” y seleccione una región y elija “Punto de ruptura de memoria en el acceso” o “en el texto”. Esto es esencial para el seguimiento cuando se sobrescribe un búfer.
- Hardware breakpoint via menu: Navigate to Debug → Hardware Breakpoints] para configurar cuatro puntos de ruptura DRx en lectura/escritura/ejecución.
- Grabación de traza:] Permite ]Debug → Registro de traza capturar cada instrucción ejecutada. Más tarde puede "Buscar" patrones en el trazo grabado – extremadamente útil para encontrar dónde se modifica una ubicación de memoria particular.
Guionización y automatización en x64dbg
Una de las características de x64dbg es su soporte de scripting profundo:
- Python scripting: El plugin Python incorporado permite escribir automatización compleja. Por ejemplo, puede script logging all `CreateFileW` calls with their arguments. Un script simple podría parecer:
- x64dbgpy: Una unión más extensa de Python que da pleno control: lectura/escritura de memoria, desmontar bytes arbitrarios, gestionar puntos de ruptura, y más.
- Barra de comandos de arranque: En la parte inferior de la ventana, puede escribir comandos como `bp kernel32.VirtualProtect`, `dump @rsp`, o `set cond eax==5`. Esto hace posible acciones rápidas sin navegar por los menús.
Símbolo e integración Fuente-Nivel
Utilizar la pestaña Simbolos] para cargar símbolos públicos (.pdb ficheros) del servidor de símbolos de Microsoft o de su propio proyecto. Con símbolos cargados, x64dbg puede mostrar nombres de funciones y números de línea de la fuente original – recortando la brecha entre el montaje y el código de alto nivel. También, la fuente
Comparando OllyDbg y x64dbg: Cuándo utilizar cada uno
Ambas herramientas son potentes, pero sus casos de mejor uso difieren:
- ] Software de 32 bits de Legacy: Si usted está trabajando en aplicaciones antiguas, archivos PE malformados, o binarios de 32 bits que se dejan a anillo 0, el ecosistema de plugin maduro de OllyDbg (especialmente HideDebugger y OllyDump) todavía puede ser más confiable. Algunos plugins más antiguos como "OllyFlow" producen hermosas gráficos de llamada que falta x64.
- 64-bit targets: x64dbg es la única opción para el depuración nativa de 64-bits. OllyDbg ni siquiera puede abrir un ejecutable de 64 bits. Para el malware moderno de Windows, use x64dbg.
- Las necesidades de scripting: La integración de Python de x64dbg es mucho más versátil que OllyScript. Si su proyecto requiere analizar estructuras de datos personalizadas o automatizar sesiones de depuración completas, x64dbg gana.
- Reparación de memoria: Ambos permiten el parcheado, pero x64dbg tiene una ventana de “Patch” integrada que registra todas las modificaciones y puede generar un archivo de parche.
- Curva de aprendizaje: OllyDbg tiene una curva de aprendizaje más profunda para los principiantes debido a su interfaz más simple y menos botones. Sin embargo, la documentación y la comunidad de x64dbg son más activos, por lo que la inversión inicial se paga rápidamente.
Muchos reversores experimentados mantienen tanto instalado: OllyDbg para el triaje rápido en muestras de 32 bits y x64dbg para todo lo demás.
Proyecto de ingeniería inversa práctica: Cracking a Simple Crackme
Para solidificar los conceptos, vamos a caminar analizando un típico “crackme” – un pequeño programa que pide una contraseña. Usaremos x64dbg para este proyecto, pero los mismos pasos se aplican a OllyDbg (con ligeras diferencias de interfaz de usuario).
Paso 1: Reconocimiento estatico
Antes de lanzar el depurador, ejecutar el ejecutable y observar su comportamiento. Típicamente, muestra un diálogo con un cuadro de edición y un botón "Comprobar". Introduzca una contraseña de borrador como "prueba" para ver el mensaje de error (¡Contraseña incorrecta!").
Ahora abre el ejecutable en x64dbg. Nota el punto de entrada – generalmente una llamada a `GetModuleHandleA` o `WinMain`. Desplazarse por el desmontaje para encontrar la cadena “Contraseña incorrecta!”. Presione Ctrl+F y busque ese código Actual (o use
.text:00401234 push offset aWrongPassword ; "Wrong password!" .text:00401239 call ds:MessageBoxA
Justo encima de ese empuje, es probable que haya un salto condicional (por ejemplo, `jne` o `je`) que decide qué mensaje mostrar. Ponga un punto de ruptura en esa instrucción de salto.
Paso 2: Análisis dinámico
Presione F9] para ejecutar la aplicación. Ingrese su contraseña y haga clic en "Comprobar". El depurador rompe la instrucción de salto. Examine las banderas: si la bandera cero está establecida (ZF=1) el salto podría ir al mensaje de éxito; si ZF=0, va al fracaso. Ahora mire la instrucción anterior `CMP` o 'TEST'LT2
Si la comparación es una simple llamada de `strcmp`, puede localizar la llamada a `strcmp` y ver sus argumentos en la ventana de la pila. Los dos argumentos son punteros - uno a su entrada, uno a la contraseña correcta. Haga clic derecho en la segunda dirección del puntero y seleccione "Seguir en Dump" para ver la contraseña en memoria. O, mejor, establecer un punto de ruptura en el valor de retorno de Ecmp2X
Paso 3: Patching the Binary
Un objetivo común de crackme es evitar el control de contraseña completamente. En el salto condicional que conduce al mensaje incorrecto, puede cambiar el opcode. Haga clic derecho en la línea de salto y seleccione "Assemble" – reemplazar `jne 0x00401234` con `je 0x00401234` o simplemente `nop` el salto. Después de parche, haga clic derecho y seleccione "Copiar para ejecutar archivo → Seleccionar disco
Paso 4: Escribir la solución
Si usted estaba analizando cientos de binarios similares, usted podría automatizar el parche. Un script Python en x64dbg podría: encontrar todas las referencias a la cadena de error, identificar el salto condicional más cercano, y reemplazarlo con un NOPsled, todo sin interacción manual.
Técnicas de manipulación de productos antidesacato
Muchos programas comerciales o de malware emplean anti-debugging para deterar el análisis. Aquí están trucos comunes y cómo evitarlos con OllyDbg y x64dbg.
- IsDebuggerPresent (kernel32!IsDebuggerPresent):] El cheque más sencillo – llame a la API y si EAX != 0, el depurador está presente. Establece un punto de ruptura en la API, y cuando se golpea, modifique EAX a 0.
- NtQueryInformationProcess (ntdll!NtQueryInformationProcess):] Más sofisticado. Pague el valor de retorno (el ProcessDebugFlags o ProcessDebugPort) estableciendo un punto de ruptura y modificando la estructura devuelta.
- Controles de selección: El código mide el tiempo entre dos instrucciones y lo compara con un umbral. Pasando con un depurador introduce retraso. Usa puntos de ruptura de hardware y evita pasar por encima del código sensible al tiempo, o utiliza la función "Run to selection" para pasar del tiempo de verificación.
- INT3 detección: Algunos programas escanean su propio código para los bytes 0xCC. Para evadir, utilizar puntos de ruptura de hardware exclusivamente (pero sólo cuatro son posibles). Alternativamente, utilice el plugin de "Hide Debugger" de x64dbg (construido) y establecer las opciones "Stealth" bajo
Optimización de su flujo de trabajo
La ingeniería inversa es un proceso meticuloso – las ganancias de productividad importan. Considera estos consejos:
- Use un VM dedicado:] Ejecute sus herramientas de depuración dentro de una máquina virtual de Windows. Snapshots le permite volver a un estado limpio después de infectar con malware o deshacerse de una biblioteca del sistema.
- Integrar con herramientas de análisis estáticos: Complementar la depuración dinámica con IDA Pro, Ghidra o Binary Ninja. Exportar símbolos de una desmontaje estático e importarlos en x64dbg para una navegación más fácil.
- ]Comentario: Ambos depuradores apoyan añadir comentarios a líneas de código. Úsalos para documentar su comprensión de rutinas, argumentos y valores de retorno. Con el tiempo, estos comentarios se convierten en una documentación personal del programa.
- Log everything:] Usa las ventanas de registro en x64dbg para registrar golpes de punto de ruptura, valores de registro y modificaciones de memoria. Más tarde puedes sondear el registro para encontrar patrones, por ejemplo, todos los llamados a `WriteFile` con valores de mango.
- ] Recursos externos de aprendizaje: Sitios web como Woodmann.com archivo muchos plugins y tutoriales de OllyDbg. Para x64dbg, el wiki GitHub oficial y el blog de ReversingLabs son excelentes referencias.
Conclusión
OllyDbg y x64dbg siguen siendo indispensables para la ingeniería inversa de Windows. La simplicidad de OllyDbg y la base de plugin madura sirven bien para proyectos heredados de 32 bits, mientras que la arquitectura moderna de x64dbg, soporte de 64 bits, y poderosas capacidades de scripting hacen de ella la herramienta de elección para el análisis contemporáneo.