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 organizacionalEspecialmente 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.

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.

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.

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

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

ELFx86, Básico
Se nos pide que encontremos una contraseña.

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

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

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

PEx86, 0 protección
Esta vez nos dan un exe-shnik.

Descárguelo en IDA Pro.

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.

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.

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.

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.

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

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

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

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

Se llama solo una vez.

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

Cedemos y obtenemos 5 puntos.

ELF-C ++, 0 protección
Se nos ofrece resolver un programa en C ++.

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

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

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).

Analizamos la segunda condición.

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

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.

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.

Encuentra el valor de las cadenas.

Bueno, escribiremos un código para proxificarlos.

Obtenemos la contraseña.

PE-DotNet, 0 protección
En esta tarea, se nos ofrece invertir la aplicación .NET.

Puede determinarlo utilizando la utilidad de archivo.

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

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

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

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

Lo entregamos.

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.