[Seguridad del sistema] 4. El uso básico de la herramienta de análisis dinámico OllyDbg y el craqueo inverso de Crakeme

Es posible que hayas visto un artículo similar que escribí antes, ¿por qué tienes que repetirlo? Solo quiero ayudar a los principiantes a comprender mejor el análisis inverso de virus y la seguridad del sistema, y ​​ser más sistemático sin destruir la serie anterior. Por lo tanto, volví a abrir esta columna para preparar un estudio sistemático y en profundidad de la seguridad del sistema, el análisis inverso y la detección de códigos maliciosos. La serie de artículos "Seguridad del sistema" será más centrada, más sistemática y más profunda. También es el historial de crecimiento lento del autor. Es muy difícil cambiar de carrera, el análisis inverso también es una parte difícil, pero también intentaré ver cuánto puedo aprender de él en los próximos cuatro años. Disfruten el proceso, vengan juntos ~

Los autores de la serie de seguridad del sistema estudiarán en profundidad el análisis de muestras maliciosas, el análisis inverso, el combate ofensivo y defensivo, la explotación de vulnerabilidades de Windows, etc., y aprenderán de los blogueros a través de notas en línea y operaciones prácticas, con la esperanza de progresar con usted. El artículo anterior popularizó el uso básico de la herramienta de desmontaje IDA Pro y explicó brevemente un método práctico de descifrado de ingeniería inversa de EXE. Este artículo presentará en detalle el uso básico de OllyDbg y el caso CrakeMe, el análisis inverso de "Yitian Slaying the Dragon", espero que sea de ayuda para los principiantes.

No hay mucho que decir, ¡comencemos un nuevo viaje! Tus me gusta, comentarios y favoritos serán tu mayor apoyo para mí. Estoy agradecido de ir hasta el final por el camino seguro. Si hay alguna mala redacción, puedes contactarme para modificarla. Artículo básico, espero que te sea de ayuda. El propósito del autor es avanzar con las personas de seguridad. Vamos ~

Recursos de github del autor:

Análisis del preámbulo:


Declaración: Me opongo firmemente al uso de métodos de enseñanza para cometer delitos. Todos los comportamientos delictivos serán severamente castigados. Necesitamos mantener la red verde unida. Se recomienda que comprenda los principios detrás de ellos y los proteja mejor.


1. Introducción a la herramienta OllyDbg

OllyDbg es una nueva herramienta de seguimiento dinámico que combina IDA con SoftICE. El depurador Ring de 3 niveles es muy fácil de usar. Es una de las herramientas de depuración y descifrado más populares en la actualidad. También admite extensiones de complementos y actualmente es una de las herramientas de depuración más poderosas.

OllyDbg se abre como se muestra en la figura siguiente, incluida la ventana de desmontaje, la ventana de registro, la ventana de información, la ventana de datos y la ventana de pila.

  • Ventana de desmontaje : muestra el código de desmontaje del programa depurado, incluida la dirección, datos HEX, desmontaje, comentario
  • Ventana de registro : muestra el contenido del registro de la CPU del hilo seleccionado actualmente, haga clic en la etiqueta para cambiar la forma de mostrar el registro
  • Ventana de información : muestra los parámetros del primer comando seleccionado en la ventana de desmontaje, dirección de destino del salto, caracteres, etc.
  • Ventana de datos : muestra el contenido de la memoria o los archivos, menú contextual para cambiar el modo de visualización
  • Ventana de pila : muestra la pila del hilo actual

Inserte la descripción de la imagen aquí

La siguiente figura es la interfaz que se muestra después de abrir el EXE.

Inserte la descripción de la imagen aquí


A continuación, se explica brevemente los métodos de depuración de teclas de acceso directo más utilizados.

F2
Establezca el punto de interrupción, la posición roja como se muestra en la figura siguiente, el programa se detendrá cuando llegue a este punto y presione la tecla F2 nuevamente para eliminar el punto de interrupción.

Inserte la descripción de la imagen aquí

F9
Presione esta tecla para ejecutar el programa.Si el punto correspondiente no está configurado, el programa depurado comienza a ejecutarse directamente.

F8
Paso a paso, cada vez que presione este botón, se ejecutará una instrucción en la ventana de desmontaje y el código no se ingresará en subrutinas como CALL.

Inserte la descripción de la imagen aquí

F7
Un paso hacia adentro, la función es similar a un solo paso (F8), la diferencia es que cuando se encuentra con una subrutina como CALL, la ingresará y primero se detendrá en la primera instrucción de la subrutina después de ingresar. Ingrese la subrutina CALL como se muestra a continuación.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

F4
Corre a la posición seleccionada, es decir, corre a la posición del cursor y haz una pausa.

CTRL + F9
Ejecutar para regresar, presione este botón para hacer una pausa al ejecutar una instrucción de retorno, que a menudo se usa para regresar del espacio aéreo del sistema al espacio aéreo del programa que estamos depurando.

ALT + F9
Ejecutar al código de usuario, regresar rápidamente del espacio aéreo del sistema al espacio aéreo del programa que depuramos.

Inserte la descripción de la imagen aquí


2. Análisis de OllyDbg del ejemplo 1 de Crakeme

El primer caso es el archivo Crakeme v3.0 del libro "Cifrado y descifrado", que necesita descifrar el nombre de usuario y el número de serie.

Inserte la descripción de la imagen aquí

Haga clic en el botón "Registrarse ahora", aparecerá un mensaje sobre los errores de entrada, como se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí

El proceso básico del análisis dinámico de OllyDbg es el siguiente:

  • Por lo general, obtiene un software e intenta ejecutarlo primero. Si tiene un documento de ayuda, puede consultar el documento de ayuda, familiarizarse con el uso básico del software, luego intentar ingresar el código de registro incorrecto y observar el mensaje de error.
  • Si no hay lugar para ingresar el código de registro, considere si es para leer el registro o el archivo de clave (el programa lee el contenido de un archivo para determinar si debe registrarse), estos se pueden analizar con otras herramientas.
  • Si no es así, el programa original es solo una versión de prueba con funciones incompletas, por lo que para registrarse como versión oficial, debe escribir código para perfeccionarlo manualmente.
  • Si necesita ingresar el código de registro, como se muestra en la figura anterior, llame al software de shell para verificar si el programa está empaquetado (como PeiD, FI). Si hay un shell, debe descomprimirlo y luego llamar a OllyDbg para su análisis y depuración. Si no hay un shell, puede llamar directamente a la herramienta para depurarlo.

Comencemos con el análisis formal.

Paso 1: Llame a PEiD para verificar si el programa está empaquetado.
El resultado de la retroalimentación es "Borland Delphi 4.0-5.0", un archivo escrito por Delphi sin shell.

Inserte la descripción de la imagen aquí

Paso 2: Ejecute el archivo CrakeMe V3.0 y haga clic en "Registrarse ahora" para mostrar un mensaje de error.
El cuadro de diálogo muestra el mensaje de error "¡Serie incorrecta, inténtelo de nuevo!".

Inserte la descripción de la imagen aquí

Paso 3: Inicie el software OllyDbg, seleccione el menú "Archivo" y abra el archivo CrackMe3.
En este momento, el archivo permanecerá en la siguiente posición, haga doble clic en la posición del comentario para agregar un comentario personalizado.

Inserte la descripción de la imagen aquí

Paso 4: haga clic con el botón derecho en la ventana de desmontaje y seleccione "Buscar" -> "Todas las cadenas de texto de referencia".

Inserte la descripción de la imagen aquí

Aparecerá el cuadro de diálogo que se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí

Paso 5: Haga clic con el botón derecho y seleccione "Buscar texto" e introduzca "Incorrecto" para localizar la posición "Serie incorrecta, ¡inténtelo de nuevo!".

Inserte la descripción de la imagen aquí

Como se muestra en la figura siguiente, ubique la posición "Serie incorrecta".

Inserte la descripción de la imagen aquí

Paso 6: Haga clic derecho y haga clic en "Seguir en la ventana de desmontaje".

Inserte la descripción de la imagen aquí

Luego ubíquelo en la posición que se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí

Paso 7: Seleccione la oración y haga clic derecho en "Buscar referencia" -: "Dirección seleccionada" (tecla de método abreviado Ctrl + R).

Inserte la descripción de la imagen aquí

Aparece la "página de referencia" que se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí

Paso 8: Vaya a las dos direcciones (00440F79, 00440F93) en la máquina dual a las ubicaciones correspondientes.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Desplácese hacia arriba en la ventana de desmontaje para ver el código principal:

Inserte la descripción de la imagen aquí

Paso 9: Puede consultar el programa correspondiente viendo la instrucción que salta a la cadena "Serie incorrecta, inténtelo de nuevo".
En "Opciones de depuración" -> "CPU" -> marque "Mostrar ruta de salto" y "Mostrar ruta gris si el salto no está implementado" y "Mostrar ruta de salto al comando seleccionado".

Inserte la descripción de la imagen aquí

Como se muestra abajo:

Inserte la descripción de la imagen aquí

Paso 10: Analice el código de desmontaje en detalle.
En la siguiente figura, presione F2 para establecer un punto de interrupción en la dirección 0040F2C, y luego presione F9 para ejecutar el programa.

Inserte la descripción de la imagen aquí

Ingrese "Prueba" y "754-GFX-IER-954", haga clic en "¡Regístrese ahora!", El resultado de la pantalla se muestra en la siguiente figura.

Inserte la descripción de la imagen aquí

El programa se detendrá en el punto de interrupción y le pedirá lo que acaba de ingresar.

Inserte la descripción de la imagen aquí

El contenido de salida es el siguiente, donde se ingresa "Prueba" en la dirección de memoria 02091CE0.

Paso 11: Haga clic izquierdo en "ss: [0019F8FC] = 02091CE0, (ASCII" Prueba ")", haga clic derecho y seleccione "Seguir el valor en la ventana de datos" y verá la entrada en la ventana de datos. EAX = 00000004 significa que la longitud del contenido de entrada es de 4 caracteres.

Inserte la descripción de la imagen aquí

El duodécimo paso: llame al botón F8 y al botón F7 para analizar el código paso a paso.
Vuelva a la parte del código debajo de 00440F2C, presione F8 para ejecutar paso a paso, preste atención al código central a continuación.

00440F2C  |.  8B45 FC       mov eax,[local.1]            ;  输入的内容送到EAX,即"Test"
00440F2F  |.  BA 14104400   mov edx,crackme3.00441014    ;  ASCII "Registered User"
00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C       ;  关键点:用按F7进入子程序
00440F39  |. /75 51         jnz Xcrackme3.00440F8C       ;  调走到这里就错误:Wrong serial
...

Inserte la descripción de la imagen aquí

Paso 13: Cuando F8 se ejecuta en "00440F34 |. E8 F32BFCFF call crackme3.00403B2C", presione F7 para ingresar a la subrutina CALL, y el cursor permanece en la posición que se muestra a continuación (00403B2C).

Inserte la descripción de la imagen aquí

Aquí, PUSH ebx, PUSH esi, etc. son todos los comandos que se utilizan cuando se llama a una subrutina para guardar la pila. Presione F8 para ejecutar el código paso a paso. La explicación principal es la siguiente, que es el lenguaje ensamblador básico: (consulte el "Tutorial de introducción a OllyDBG" de Kan Xue CCDebuger)

Inserte la descripción de la imagen aquí

Importante: cuando el programa se ejecuta en la interfaz como se muestra en la figura siguiente, puede ver la comparación entre "Prueba" y "Usuario registrado". A través del análisis de la imagen anterior, sabemos que el nombre de usuario debe ser "Usuario registrado".

Inserte la descripción de la imagen aquí

Paso 14: Luego presione F9 para ejecutar el programa, aparecerá un cuadro de diálogo de error, haga clic en Aceptar, vuelva a ingresar "Usuario registrado" en el cuadro de edición y haga clic en el botón "¡Registrarse ahora!" Nuevamente para analizar y depurar el programa.
Tenga en cuenta que la tecla F12 es pausa.

Inserte la descripción de la imagen aquí

El código central es el siguiente, la CALL en la dirección 00440F34 se ha analizado claramente, continúe con F8 para ejecutar el siguiente paso, conozca el segundo lugar de la tecla, es decir, 00440F51, presione F7 para ingresar a la subrutina. Nota: La solicitud del contenido del comentario no necesariamente existe. Es la forma correcta de depurar dinámicamente el programa en el registro para ver el código de registro correspondiente.

Inserte la descripción de la imagen aquí

00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C
00440F51  |.  E8 D62BFCFF   call crackme3.00403B2C

En las dos frases de código anteriores, puede ver que tanto el nombre de usuario como el código de registro llaman a la misma subrutina El método de análisis CALL es el mismo que el anterior.

Inserte la descripción de la imagen aquí

El decimoquinto paso: presione F8 para depurar la subrutina y encuentre que cmp compara los dos valores para ver si son iguales, y 0044102C es el contenido del código de registro.

Inserte la descripción de la imagen aquí

Paso 16: Presione F12 para pausar, luego presione F9 para reiniciar, ingrese el nombre de usuario y la contraseña correctos, y el descifrado será exitoso.

  • usuario registrado
  • GFX-754-IER-954

Inserte la descripción de la imagen aquí

Dificultad: cómo depurar el código central, como la comparación CMP aquí, y el código ensamblador también es más oscuro.


3. Análisis de OllyDbg del ejemplo 2 de Crakeme

Este caso es para crackear Afkayas.1.EXE en Crakeme, que es un programa típico de descifrado de secuencias de cadenas. Serial se inicia según el valor del nombre.

Paso 1: Verifique que no tenga shell a través de PEiD, escrito en VB.

Paso 2: La herramienta OllyDbg abre el archivo Afkayas.1.EXE como se muestra en la siguiente figura.

Paso 3: haga clic con el botón derecho en el área de desmontaje y seleccione "Buscar" -> "Todas las cadenas de texto de referencia".

Paso 4: Busque el carácter de mensaje fallido "Se equivoca" en el cuadro de diálogo emergente, haga clic con el botón derecho en "Seguir en la ventana de desmontaje".

En este momento, volverá al área de código y podrá ver las cadenas de errores y logros.

Paso 5: Por lo general, las cadenas de retroalimentación de éxito y falla no están muy separadas. Debe juzgar de antemano. Si la serie de entrada es correcta, tendrá éxito; de lo contrario, fallará; luego suba para encontrar el punto de entrada para llamar a la función de comparación de cadenas.

Tenga en cuenta que este paso es más crítico, pero personalmente creo que se necesita mucho tiempo de experiencia y práctica para ubicarlo con precisión.

Antes de ensamblar la función de llamada, los parámetros se colocan en la pila y luego se llama a la función con la instrucción CALL. Hay una instrucción PUSH EAX antes de la función de comparación de cadenas Se puede inferir que EAX aquí es la primera dirección de la cadena.

Paso 6: Presione la tecla F2 para establecer un punto de interrupción en la función de comparación 00402533, y luego presione la tecla F9 para ejecutar. En este momento, aparecerá la interfaz en ejecución. Ingresamos "Eastmount" y "12345678", y luego hacemos clic en el botón Aceptar.

En este momento, el programa permanece en el punto de interrupción y el indicador de serie correcto se muestra en el área de la pila en la esquina inferior derecha.

Paso 7: Ingrese el nombre de usuario y el número de serie correctos y registre los resultados.

  • Eastmount
  • AKA-877848

El siguiente es un análisis simple de la lógica básica del cifrado en combinación con las publicaciones del blog del Dios de la Mano Fantasma y del Dios Dios de Haití. Al mismo tiempo, recomiendo encarecidamente a todos que lean sus artículos, consulte las referencias anteriores. Estas experiencias inversas realmente no son algo que se pueda obtener de la noche a la mañana. Sé que hay demasiadas cosas que aprender y experimentar. Tú y yo trabajaremos duro juntos.

El proceso básico es el siguiente:
serial = 'AKA-' + orden inverso itoa (strlen (nombre) * 0x17CFB + nombre [0])

  • Encuentra la longitud del nombre de usuario
  • Multiplique la longitud del nombre de usuario por 0x17CFB para obtener el resultado, salte si se desborda
  • Agregue el ASCII del primer carácter del nombre de usuario al resultado
  • Convierta el resultado a decimal
  • Une el resultado y AKA para obtener el número de serie final

Permítanme compartir un fragmento de código de descifrado de Python.

# encoding:  utf-8

key = "AKA"
name = "Eastmount"

#获取用户名长度
nameLen = len(name)
print(u'获取用户名长度:')
print(nameLen)

#用户名长度乘以0x17CFB得到结果
res = nameLen * 0x17CFB
print(u'用户名长度乘以0x17CFB:')
print(res)

#将结果加上用户名的第一个字符的ASCII
print(name[0], ord(name[0]))
res = res + ord(name[0])
print(u'结果加上用户名第一个字符的ASCII:')
print(res)

#转换为十进制 省略

#拼接序列号
key = key + str(res)
print(u'最终结果:')
print(key)

Defina diferentes nombres de usuario para obtener el Serial correspondiente.


Cuatro. Resumen

En este punto, este artículo básico está terminado. Realmente hay mucho conocimiento que aprender sobre la seguridad de la red, que cubre una amplia gama de áreas, que incluyen ensamblaje, red, sistema operativo, cifrado y descifrado, C / C ++, Python, etc. Espero poder avanzar lentamente y prestar la misma atención a la investigación y la práctica. También espero que a los lectores les guste esta serie de notas resumidas. Si no te gusta, no rocíes, camina contigo ~

Hoy acabo de romper con 100,000 fans de CSDN, les agradezco sinceramente a todos por su compañía y apoyo a lo largo de los años, estoy agradecido de conocerlos y espero que en el futuro pueda continuar compartiendo artículos de mayor calidad, ayudar a más personas a comenzar y resolver el problema, entreteniendo y alentando !

Inserte la descripción de la imagen aquí

El recientemente inaugurado "Nazhang AI Security Home" el 18 de agosto de 2020 se centra principalmente en el análisis de big data de Python, la seguridad del ciberespacio, la inteligencia artificial, la penetración web y la tecnología ofensiva y de defensa para explicar, mientras comparte la implementación del algoritmo del documento. La Casa de Nazhang será más sistemática, reconstruirá todos los artículos del autor, explicará Python y la seguridad desde cero, y ha escrito artículos durante casi diez años. Realmente quiero compartir lo que he aprendido y sentido. También me gustaría invitarlo a darme su consejo e invitarle sinceramente ¡Su atención! Gracias.

Inserte la descripción de la imagen aquí

(Por: Eastmount 2020-12-22 Escrito en Wuhan https://blog.csdn.net/Eastmoun el martes a las 10 p.m. )

Supongo que te gusta

Origin blog.csdn.net/Eastmount/article/details/108956863
Recomendado
Clasificación