C, C ++ y DotNet decompile son los principios básicos de la inversión. Resolviendo problemas para revertir con r0ot-mi. Parte 1

imagen

En este artículo, las primeras 5 tareas, aprenderemos los conceptos básicos del desmontaje, resolveremos los problemas del nivel inverso inicial y también descompilaremos la aplicación dotNet.

Información organizacional
Especialmente para aquellos que quieran aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso de los conocimientos y métodos obtenidos como resultado de estudiar este documento.

C, GCC32


Considere el caso más simple. Esta es la primera búsqueda inversa.

imagen

En tareas de este tipo, cuando la contraseña se almacena como una cadena, se puede encontrar sin usar ninguna herramienta especial. Ejecutemos el programa y veamos qué muestra.

imagen

Genial Tenemos una invitación y un mensaje sobre la contraseña incorrecta. Observamos las líneas en el archivo del programa y encontramos entre ellas una invitación y un mensaje sobre la contraseña incorrecta. Debe haber una contraseña cerca.

imagen

Por lo tanto, desde las líneas una al lado de la otra, hay una que parece una contraseña. Probémoslo.

imagen

La tarea se ha completado. Le damos la contraseña, obtenemos 5 puntos.

imagen

ELFx86, Básico


Se nos pide que encontremos una contraseña.

imagen

Cargamos el programa en el depurador IDA Pro (uso la versión 7.0) y presionamos F5 para descompilar el programa.

imagen

Por lo tanto, el nombre ingresado se compara con el string john, y la contraseña se compara con el destripador.

imagen

Por lo tanto, resolvimos correctamente la tarea y obtuvimos nuestra contraseña. Lo alquilamos y ganamos 5 puntos más.

imagen

PEx86, 0 ​​protección


Esta vez nos dan un exe-shnik.

imagen

Descárguelo en IDA Pro.

imagen

El programa no guarda la información de depuración, por lo que no vemos los nombres de funciones habituales como main. Veamos las líneas en el programa, para esto presione + F12.

imagen

Vemos mensajes sobre cómo ingresar las contraseñas correctas e incorrectas. Ahora podemos encontrar el bloque con esta línea en el código y ver qué condición lo precede. Haga doble clic en la línea.

imagen

Estamos ubicados en la sección de datos. Busquemos todos los enlaces en el código para esta dirección. Para hacer esto, presione X.

imagen

Por lo tanto, en el código del programa solo hay una llamada a nuestra línea. Hacemos doble clic y vamos al código.

imagen

Estamos en el código del programa principal. Estamos descompilando

imagen

Aquí, se verifica un número a2 y una línea a1. Vamos a traducir un numérico a un personaje.

imagen

Para hacer esto, presione R. en el número. Y nuestro código ha cambiado.

imagen

Ahora sabemos la línea, queda por averiguar cuál es el número a2. Veamos todos los enlaces a esta función.

imagen

Se llama solo una vez.

imagen

Como puede ver, la longitud de la cadena se pasa como el segundo parámetro. Verifique la contraseña encontrada.

imagen

Cedemos y obtenemos 5 puntos.

imagen

ELF-C ++, 0 protección


Se nos ofrece resolver un programa en C ++.

imagen

Abrimos en IDA Pro y pasamos al lugar de una llamada del mensaje con la contraseña correcta. Vamos a colorearlo de verde.

imagen

Hagamos el gráfico más pequeño.

imagen

Entonces necesitamos pasar por dos condiciones. Analicémoslos. En la primera condición, el número de argumentos se compara con 1. Es decir, el programa debe tener más de un argumento (el primero es el nombre del programa).

imagen

Analizamos la segunda condición.

imagen

La cadena que ingresamos se compara con la cadena que se pasa como parámetro a la función plouf. Lo descompilamos.

imagen

Analiza el código. En realidad a2 - es una cadena. Por lo tanto, el ciclo va desde i = 0, hasta que el elemento i-ésimo de la línea a2 es 0 (es decir, hasta que llega al final de la línea).

V3 = a2 [i]
V5 = longitud (a3)
V6 = a3 [i% v5]

Es decir, la línea en la dirección a1 será igual a las dos líneas proxy a2 y a3. Volvamos a la función principal y busquemos estas líneas.

imagen

Entonces necesitamos definir los parámetros var_C y var_10. Los encontraremos un poco más altos. Estas son las cadenas unk_8048BC4 y unk_8048DCC, respectivamente.

imagen

Encuentra el valor de las cadenas.

imagen

Bueno, escribiremos un código para proxificarlos.

imagen

Obtenemos la contraseña.

imagen

PE-DotNet, 0 protección


En esta tarea, se nos ofrece invertir la aplicación .NET.

imagen

Puede determinarlo utilizando la utilidad de archivo.

imagen

C # es un lenguaje descompilado, por lo que podemos obtener el proyecto original. Esto se puede hacer usando dnSpy .

imagen

Abramos el proyecto CrackMe y encontremos funciones y métodos.

imagen

El método Button1_Click verifica la contraseña al hacer clic en un botón.

imagen

En el código fuente encontramos la contraseña. Compruébalo

imagen

Lo entregamos.

imagen

Eso es todo por ahora. Continuará ... Puede unirse a nosotros en Telegram . Allí puede proponer sus propios temas y votar sobre la elección de los temas para los siguientes artículos.

Source: https://habr.com/ru/post/467085/


All Articles