Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo aprender ollydbg? ¿Cuál es el principio? ¿Cuál es el uso básico?

¿Cómo aprender ollydbg? ¿Cuál es el principio? ¿Cuál es el uso básico?

La forma más sencilla es iniciar OllyDbg, hacer clic en Archivo|Abrir y luego seleccionar el programa que desea depurar. El programa requiere que se ingresen argumentos de la línea de comando en el campo de texto debajo del cuadro de diálogo.

La tecla de acceso directo para reiniciar la depuración del último programa es Ctrl F2 y OllyDbg usa los mismos parámetros.

También puedes hacer clic en el historial. También puedes comenzar a depurar arrastrando el programa a OllyDbg.

Por supuesto, al iniciar OllyDbg, también puede especificar el nombre del programa y los parámetros que se depurarán en la línea de comando. Por ejemplo:

Puedes crear un acceso directo en el escritorio que apunte a OllyDbg, seleccionar Propiedades, ir a Accesos directos y agregar el nombre del programa a la barra de destino.

Cada vez que hace doble clic en este icono de acceso directo, OllyDbg carga automáticamente el programa depurado.

Puedes adjuntar OllyDbg a un proceso en ejecución. Haga clic en Archivo|Adjuntar y seleccione

el proceso de la lista. Nota: Cuando cierre OllyDbg, este proceso también finalizará. No intente adjuntar procesos del sistema

ya que esto puede provocar que el sistema falle por completo. (De hecho, en la mayoría de los casos, el sistema operativo no permite adjuntar procesos confidenciales)

OllyDbg se puede utilizar como depurador justo a tiempo. Esto requiere inscripción en el registro. Haga clic en

Opciones|Depuración justo a tiempo y haga clic en "Crear depurador justo a tiempo

de OllyDbg" en el cuadro de diálogo. Ahora, cuando algún programa falla, se le preguntará si desea depurarlo. De esta forma, el sistema operativo

puede iniciar OllyDbg y detenerse directamente donde se produce la excepción. Si elige adjuntar sin

confirmación, OllyDbg comenzará directamente sin preguntar. Para restaurar el depurador

justo a tiempo original, simplemente haga clic en el botón correspondiente en el cuadro de diálogo que aparece.

Otro método es agregar OllyDbg al menú emergente del archivo ejecutable. Haga clic en Opciones|Agregar al

Explorador y haga clic en "Agregar OllyDbg al menú en el Explorador de Windows". Posteriormente puedes hacer clic derecho

en el archivo ejecutable y seleccionar OllyDbg. Esta opción crea claves de registro

HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg y

HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg/command

OllyDbg puede depurar Programas de consola (basados ​​en texto).

Nota: En Windows NT o Windows 2000, debe tener derechos de administrador

Ayuda de OllyDbg-Atajos generales (Traducción)

Atajos de Golbal (Atajos generales)

Estas teclas de acceso directo son universales en OllyDbg y no dependen de la ventana actualmente activa.

Ctrl F2---OllyDbg reinicia y reinicia la depuración. Si no hay ningún programa activo, OllyDbg carga el primer programa en la lista del historial. El reinicio de OllyDbg liberará memoria y eliminará los puntos de interrupción difíciles.

Alt F2——Cierra el programa depurado. Si el programa aún está activo, se le preguntará si desea realizar esta acción.

F3: muestra el cuadro de diálogo "Abrir archivo .exe de 32 bits", donde puede seleccionar el archivo ejecutable y especificar parámetros

Alt F5: hace que OllyDbg aparezca en la frente a la pantalla. Si la ventana de visualización cubre algunas áreas de OllyDbg cuando el depurador la interrumpe, no continuará ejecutándose y no se podrá mover ni minimizar. Active OllyDbg y presione Alt F5 para resolver el problema. Si presiona Alt F5 nuevamente, OllyDbg volverá a una ventana normal. El estado actual de OllyDbg se muestra en la barra de estado.

F7——entra y ejecuta el siguiente comando simple. Si el comando es una llamada de función, ingrese la función de llamada. Si el comando tiene un prefijo REP, ejecute un paso del comando.

Mayús F7: igual que F7, excepto que cuando el programa depurado encuentra ciertas excepciones, primero intenta llamar al propio proceso de manejo de excepciones del programa.

Ctrl+F7: anima, ejecuta el programa paso a paso y también ingresa llamadas de función (igual que si sigues presionando F7, pero más rápido). Cuando ejecuta algunos comandos de un solo paso o de continuación, el programa alcanza un punto de interrupción válido y, cuando ocurre alguna excepción, la animación finaliza. En cada paso, OllyDbg vuelve a pintar todas las ventanas. Para acelerar la animación, cierre todas las ventanas en lugar de simplemente cambiar el tamaño de las ventanas existentes. Para finalizar la animación, también puede presionar Esc.

F8: pasa por alto y ejecuta el siguiente comando simple. Si el comando es una llamada de función, la función se ejecuta inmediatamente (a menos que haya un punto de interrupción o se genere una excepción dentro de la función. Si el comando tiene un prefijo REP, todas las operaciones repetidas se realizan y se detienen en el siguiente comando).

Mayús F8: igual que F8, excepto que cuando el programa depurado encuentra ciertas excepciones, primero intenta llamar al propio proceso de manejo de excepciones del programa.

Ctrl F8: termina la animación, ejecuta el programa paso a paso, pero no ingresa llamadas de función (igual que si sigues presionando F8, pero más rápido). Cuando ejecuta algunos comandos de un solo paso o de continuación, la animación del programa alcanza un punto de interrupción válido o se produce una excepción, la animación termina. En cada paso, OllyDbg vuelve a pintar todas las ventanas. Para acelerar la animación, cierre todas las ventanas en lugar de simplemente cambiar el tamaño de las ventanas existentes. También puede presionar Esc para finalizar la animación.

F9——Continuar ejecutando el programa.

Mayús F9 - Igual que F9. Excepto cuando el programa depurado encuentra ciertas excepciones, primero intenta llamar al proceso de manejo de excepciones del programa.

Ctrl F11: ejecuta el seguimiento, ejecuta el programa paso a paso, ingresa la llamada a la función y registra el contenido del registro. Ejecutar seguimiento no vuelve a dibujar la ventana de la CPU.

F12: suspende todos los subprocesos para detener la ejecución del programa. Es mejor reanudar el hilo de ejecución usando la tecla Continuar y un comando de menú (como F9) en lugar de usar otros métodos manuales.

Ctrl F12: ejecute el seguimiento, ejecute el programa paso a paso, no ingrese la llamada a la función y registre el contenido del registro. Ejecutar seguimiento no vuelve a dibujar la ventana de la CPU.

ESC: si la animación o el seguimiento están en curso, finalizará. Si la ventana de la CPU muestra datos durante el seguimiento, cambia a mostrar datos reales en este momento.

Alt B——Abre o restaura la ventana Punto de interrupción. Los puntos de interrupción se pueden editar, eliminar y observar aquí.

Alt C——Abre o restaura la ventana de la CPU.

Alt E——Abre o restaura la lista de módulos

Alt E——Abre o restaura la ventana Pila de llamadas.

Alt L——Abre o restaura la ventana de Registro.

Alt M——Abre o restaura la ventana Memoria.

Alt O——Abre el cuadro de diálogo Opción

Ctrl P——Abre la ventana Parche.

Ctrl T——Abre el cuadro de diálogo Pausar ejecución de seguimiento

Alt+X——Interrumpe OllyDbg.

Las siguientes teclas de acceso directo se pueden utilizar para la mayoría de las ventanas:

Alt F3: cierra la ventana activa.

Ctrl F4——Cierra la ventana activa.

F5——Maximiza o restaura la ventana activa.

F6——Activa la siguiente ventana.

Shift F6 – Activa la ventana anterior.

F10——Abre el menú contextual de la ventana o panel activo.

Flecha izquierda: desplaza un carácter hacia la izquierda.

Ctrl Flecha izquierda: mueve una línea hacia la izquierda.

Flecha derecha: desplaza un carácter hacia la derecha.

Ctrl Flecha Derecha: Mover una línea hacia la derecha.

Introducción al módulo de análisis de ayuda de OllyDbg (traducción)

Análisis

OllyDbg integra un analizador de código rápido y potente. Para cargarlo, use el menú emergente o presione Ctrl A en la barra de desmontaje de la ventana de la CPU

o seleccione "Analizar todos los módulos" en el módulo de ejecución.

Los analizadores son muy útiles. Identifica código en los datos, marca puntos de entrada y objetivos de salto, identifica tablas de conmutación, cadenas ASCII y UNICODE, localiza procedimientos, bucles, declaraciones de conmutación avanzadas y criterios de decodificación.

Parámetros de función API (ver ejemplo). Otras partes de OllyDbg también se utilizan ampliamente para el análisis de datos.

¿Cómo es esto posible? Permítanme presentarles un poco el principio. Primero, OllyDbg desmonta todas las direcciones posibles en el área de código y anota todas las llamadas encontradas y los objetivos a los que apuntan. Por supuesto, muchas de estas llamadas son incorrectas, pero no necesariamente hay dos llamadas incorrectas que apuntan al mismo comando, y es incluso menos probable que haya tres o más. De esta manera,

Tres o más llamadas apuntan a la misma dirección y estoy seguro de que la dirección es una entrada de subproceso de uso frecuente. A partir de esta entrada, sigo todos los saltos y llamadas y opero repetidamente. Este enfoque me hace estar 99,9% seguro de todos los comandos. Sin embargo, algunos bytes no están en esta cadena y recurro a unos 20 métodos más eficientes (el más simple

como: "MOV[RA],Ra" es un comando no válido).

La detección de procesos también es sencilla. Un proceso, desde el punto de vista del analizador, es una región contigua de código que comienza desde la entrada

y que puede (teóricamente) alcanzar otros comandos (excepto NOP o relleno alineado). Puede especificar tres niveles de reconocimiento

. El nivel Estricto confirma estrictamente una entrada y al menos una salida. A nivel heurístico, el analizador intenta confirmar la entrada. Si elige el nivel difuso, las áreas de código más o menos consistentes se separan en procedimientos. Los compiladores modernos dividen el proceso en varias partes para optimizar el código común. En este caso, ¡el nivel difuso es especialmente útil! Sin embargo, la probabilidad de malentendidos

también es bastante alta.

De manera similar, un bucle es una secuencia cerrada de comandos consecutivos, donde el último comando salta al principio, una entrada

y varias salidas. Loop es equivalente a do, while y for en lenguajes operativos de alto nivel. OllyDbg puede comprender cualquier bucle anidado complejo. En la sección de desmontaje, están marcados con llaves largas. Si la entrada no es el

ésimo comando del bucle, OllyDbg la marca con un pequeño triángulo.

Para implementar la instrucción switch, la mayoría de los compiladores cargan la variable switch en un registro y luego restan parte de ella, como la siguiente

secuencia de código:

MOV EDX, lt; cambiar variablegt;

SUB EDX, 100

JB DEFAULTCASE

JE CASE100; p>

JNE DEFAULTCASE

... ; Caso 101

Estas secuencias también pueden contener tablas de cambio de uno o dos niveles, comparación directa, optimización, llenado, etc. Si

profundiza en las comparaciones y salta árboles, es difícil saber qué comando es una determinada declaración de caso. OllyDbg lo hace por ti.

Marca todas las declaraciones de casos, incluido el valor predeterminado, e incluso intenta adivinar el significado del caso, como 'A',

WM_PAINT o EXCEPTION_ACCESS_VIOLATION. Si la secuencia de comandos no modifica el registro (consta sólo de comandos de comparación), entonces es poco probable que sea una instrucción de cambio, pero puede ser un if anidado:

if (i==0) { ...}

más si (i==5) {...}

más si (i==10) {...}

Deje que OllyDbg decodifique si está anidado como interruptor y seleccione la opción correspondiente en Análisis1.

OllyDbg tiene descripciones preestablecidas de más de 1900 funciones API de uso común. Incluye KERNEL32, GDI32, USER32,

ADVAPI32, COMDLG32, SHELL32, VERSION, SHLWAPI, COMCTL32, WINSOCK,

WS2_32 y MSVCRT. También puedes agregar tu propia descripción. Si el analizador encuentra una llamada a un nombre de función conocido (o salta a esa función), intenta decodificar el comando PUSH que precede a la llamada. Por lo tanto, puede traducir aproximadamente la función de la llamada. OllyDbg también tiene descripciones integradas de aproximadamente 400 funciones C estándar. Si utiliza la nueva biblioteca,

le recomiendo que escanee los archivos objeto antes del análisis. En este caso, OllyDbg también decodificará parámetros de funciones C conocidos

.

Si la opción "Adivinar el número de argumentos de funciones desconocidas" está configurada, el analizador

intenta identificar el número de palabras dobles enviadas a la pila por el procedimiento de llamada y las marca. como parámetros Arg1, Arg2, etc. esperar. Nota:

Si hay parámetros de registro, OllyDbg aún no los reconoce y no se incluyen en las estadísticas anteriores. El analizador utiliza

un enfoque seguro. Por ejemplo, no distingue entre procedimientos sin parámetros y declaraciones de casos que usan POP para restaurar registros antes de regresar en lugar de descartar parámetros

. Sin embargo, la cantidad de funciones que se pueden distinguir es bastante grande y contribuye en gran medida a la legibilidad del código.

El analizador puede realizar un seguimiento de los valores de registro. Los compiladores de optimización modernos, especialmente para Pentium, a menudo cargan constantes y direcciones en registros para facilitar la reutilización o reducir el uso de memoria. Si se carga alguna constante en un registro

, el analizador la toma nota y la utiliza para decodificar la función y sus argumentos.

También puede realizar un seguimiento de cálculos aritméticos simples

comandos push y pop.

El analizador no puede distinguir entre diferentes tipos de nombres. Si nombra algunas funciones con nombres existentes, OllyDbg

decodificará todas las llamadas a esa dirección en el procedimiento original. WinMain, DllEntryPoint y WinProc son nombres especiales predefinidos. Puede utilizar estas etiquetas para marcar la entrada principal del programa, el puntero de entrada de la DLL y el proceso de ventana (Nota

: OllyDbg no comprobará la unicidad de las etiquetas definidas por el usuario). Por supuesto, la mejor manera es mostrar los parámetros

definidos.

Desafortunadamente, no existen reglas generales para un análisis 100% preciso. En algunos casos, como cuando un módulo contiene código p o una gran cantidad de datos está incrustada en el área de código, el analizador puede considerar que algunos de los datos son código. Si el análisis estadístico

muestra que el código puede estar empaquetado o cifrado, el analizador le avisará. Si desea utilizar el seguimiento de visitas, le sugiero que no utilice el análisis difuso; de lo contrario, existe una alta probabilidad de que se establezcan puntos de interrupción en datos que se confundan con el código.

Los archivos autoextraíbles suelen tener código de descompresión fuera del código principal. Si selecciona la opción SFX "Extender la sección de código

para incluir el autoextractor", OllyDbg expandirá la sección de código, permitiendo formalmente su análisis y seguimiento.

Principios generales (traducción) parte de OllDbg

Espero que esté familiarizado con la estructura interna de las CPU compatibles con 80x86 y tenga experiencia en programación ensambladora. También espero que

esté familiarizado con Microsoft Windows.

OllyDbg es un depurador de "nivel de código de máquina" de proceso único y multiproceso para programas de 32 bits en el entorno Windows. Le permite depurar y parchear programas ejecutables en formato PE. OllDbg solo utiliza llamadas API Win32 documentadas, por lo que puede usarse en sistemas Windows de 32 bits de próxima generación. OllDbg parece funcionar también en Windows XP, pero no lo he probado exhaustivamente, por lo que no puedo garantizar que sea completamente funcional.

OllyDbg no está orientado al compilador. No contiene reglas especiales que muestren qué secuencias de código genera un compilador en particular en determinadas circunstancias. Por lo tanto, puede tratar cualquier código compilado por cualquier compilador o escrito en ensamblador de la misma manera.

OllyDbg funciona simultáneamente con el programa que se está depurando. Puede explorar código y datos, establecer puntos de interrupción, detener o reanudar subprocesos e incluso modificar la memoria durante el tiempo de ejecución (a veces esto se denomina depuración suave). Por supuesto, si la operación solicitada no es la más básica, OllyDbg pausará brevemente el programa, pero esto es transparente para el usuario. A veces, los programas que no se ejecutan en modo de depuración fallan inesperadamente. OllyDbg, este depurador "justo a tiempo", señalará dónde ocurre la excepción.

OllyDbg está fuertemente orientado a módulos. El módulo aquí se refiere al archivo ejecutable principal o la biblioteca de enlaces dinámicos cargados al inicio o cargados dinámicamente. En el área de depuración, puede establecer puntos de interrupción, definir nuevas etiquetas y comentar declaraciones de ensamblaje. Cuando algunos módulos se descargan de la memoria, OllyDbg guarda esta información en un archivo con extensión .UDD y el mismo nombre que el módulo que se está depurando. La próxima vez que se cargan estos módulos, OllyDbg restaura automáticamente toda la información de depuración, independientemente de si el programa utiliza estos módulos. Por ejemplo: depura el programa Myprog1 que usa Mydll y establece algunos puntos de interrupción en Mydll. Luego, cuando depure Myprog2, también usando Mydll, encontrará que todos los puntos de interrupción en Mydll todavía están allí, independientemente de si Mydll está cargado en una ubicación diferente.

Algunos depuradores tratan la memoria del proceso depurado como un área única de 2**32 bytes. OllyDbg realiza otros métodos de procesamiento. La memoria se compone de varios bloques independientes.

Cualquier operación de memoria está restringida a bloques. En la mayoría de los casos, esto funciona bien y es fácil de depurar. Pero el módulo contiene varias partes de ejecución, etc., y no podrá ver el código completo a la vez. Sin embargo, estas excepciones son poco comunes.

OllyDbg es un gran consumidor de memoria. Se asignarán 3 MB de memoria al inicio, o incluso más. Cada análisis, copia de seguridad, seguimiento o volcado de archivos se reasigna adicionalmente. Por lo tanto, es normal consumir 40 o 60 M de memoria cuando se depura un proyecto grande.

Para depurar eficazmente un programa sin código fuente, primero debes entender cómo funciona. OllyDbg proporciona muchos medios para facilitar la comprensión