Trabajar con Cutter - Conceptos básicos inversos. Revertir la resolución de problemas con r0ot-mi. Parte 3

imagen


En este artículo, entenderemos cómo descompilar archivos ELF en Cutter usando el ejemplo de tareas ligeras. Introducción anterior a las



partes inversas: Parte 1: Descompilación de C, C ++ y DotNet - Conceptos básicos del inverso

Parte 2: MIPS Reverse y Golang - Conceptos básicos del inverso



Información organizacional
, - , :



  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.


, , , .



, , Telegram . , , .



. , - , .



Instrucciones falsas







Esta es la octava tarea en esta categoría y se nos dice que hay instrucciones falsas. Comencemos mirando la información del archivo.







Abro el programa en Cutter, una GUI para radare2 con un descompilador ghidra incorporado que tiene la capacidad de emular y, más recientemente, depurar. E inmediatamente obtenemos una interesante lista de funciones.







Pasemos a la función principal y descompilemos.







Al principio, el canario se inicializa y se verifica el número de argumentos. Después de eso, se asignan 0x1f bytes, donde se copia la cadena constante especificada, la dirección se almacena en la variable iVar3 y luego se cambian los bytes individuales de esta cadena. A continuación, se producen transformaciones con la cadena s1, que no nos interesa. La función WPA también se inicializa y la contraseña que ingresamos se escribe en la dirección auStack50 y se pasa junto con la cadena iVar3 convertida a la función WPA, después de lo cual se verifica el valor canario y el programa termina.



Pasemos a la función WPA.







La línea previamente insertada en el programa se cambia nuevamente, después de lo cual se comparan las dos líneas. Si son iguales, se llamará a la función blowfish (), que nos mostrará la contraseña correcta para el cambio, de lo contrario se llamará a la función RS4 ().







Dado que se produce el descifrado de los valores ingresados ​​anteriormente, podemos depurar el programa y cambiar el resultado de la comparación. Vayamos a donde se comparan las cadenas y establezcamos un punto de interrupción.







Ahora comencemos a depurar - F9 e ingresemos los argumentos del programa.







Haga clic en el botón más adelante en la barra de navegación hasta que alcancemos nuestro punto de interrupción. El resultado de comparar cadenas utilizando la función strcmp () se escribirá en el registro EAX, que luego se comprobará. Dado que las cadenas no son iguales, este registro contiene el valor 1.







Cambiemos a 0 para cambiar la rama del comportamiento del programa y continuar ejecutándose. Después de completar en la consola de Cutter, veremos la respuesta correcta, que debe enviarse en el sitio.







Ptrace







Descarga el programa y compruébalo.







Nada especial, necesitas encontrar una contraseña. Pero hay un poco de protección contra la depuración (ptrace) y las transiciones que deben editarse manualmente. Así es como se muestra el gráfico en IDA Pro.







También haremos esta tarea en Cutter, automáticamente corregirá todas las transiciones.







Pasemos a descompilar la función principal.







Y la contraseña correcta son las 4 letras correspondientes de la cadena especificada al principio.







BRAZO ELF







Este es un binar para la arquitectura ARM, lo lanzamos a Cutter y seleccionamos la función principal. En el gráfico de la función, vemos con qué estamos lidiando y lo más probable es que se trate de una comparación símbolo por símbolo.







Abrimos el descompilador y analizamos el programa.







En primer lugar se comprueba la presencia del argumento del programa y su longitud, debe ser igual a 6.







Entonces la variable var_14h actúa como índice y toma el valor 0. Y luego se realizan una serie de comparaciones, que consideraremos como condiciones:



str [0] == str [5]

str [0] + 1 == cadena [1]

cadena [3] + 1 == cadena [0]

cadena [2] + 4 == cadena [5]

cadena [4] + 2 == cadena [2]

0 == str [3] ^ 0x72



Implementemos el algoritmo y obtengamos la contraseña.







Y obtenemos la contraseña requerida. Eso es todo por ahora.



Puedes unirte a nosotros enTelegram . Allí puede encontrar materiales interesantes, cursos filtrados y software. Reunamos una comunidad, en la que habrá personas con experiencia en muchas áreas de TI, entonces siempre podremos ayudarnos unos a otros en cualquier problema de TI y seguridad de la información.



All Articles