Resolviendo Crackme con Retdec

Started by rollth, January 05, 2018, 11:59:08 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

January 05, 2018, 11:59:08 AM Last Edit: April 01, 2018, 10:19:25 AM by rollth
Muy buenas Underc0ders,

este es el tercer post que escribo en el que resuelvo un crackme, y en ninguno de ellos he utilizado nada de reversing, ya que es un tema que aún tengo muy flojo, pero está bien ver formas alternativas, aquí podeis ver los otros dos a los que me refiero.

https://underc0de.org/foro/soluciones-de-wargames/resolviendo-crackme-con-pipes/msg115400/#msg115400
https://underc0de.org/foro/soluciones-de-wargames/despiezando-crackme-underc0de/msg120640/#msg120640

Bueno, ¿qué mas ideas me quedan? pues hoy vamos a decompilar el ejecutable, seguro que ya conoceis algunos decompiladores para lenguajes como C# o JAVA, y pensais que si el ejecutable está programado, por ejemplo en C, no se puede obtener el código fuente, me toca decir que aunque en principio debería ser así se le puede sacar una puntillita.

Hoy vamos a ver una herramienta llamada retdec que hará justo esto que nosotros queremos, retdec es una herramienta muy potente y open source que nos permitirá hacer esto que nosotros queremos. Fue desarrollada por el equipo de AVAST para poder practicar reversing al malware de una forma más sencilla.

Todo lo que necesitamos para descargarlo y compilarlo está aquí, además de una guía de instalación, así que no gastaré tiempo en esto.

Yo voy a partir de un ejecutable compilado con C para Linux de 32 bits, el cuál se llamará a.out.



Vamos a ejecutarlo a ver como funciona.



Tiene un proceso simple, introducimos la contraseña y nos dice si es correcta o incorrecta, ahora vamos a probar a decompilarlo a ver que nos devuelve esta herramienta.

Code (bash) Select
decompile.sh a.out



Vemos que nos ha creado un archivo llamado a.out.c, así que le vamos a imprimir por pantalla a ver que nos dice.
Code (bash) Select
cat a.out.c



Vemos que basicamente comprueba que el valor introducido sea 725, y ya dependiendo de eso dice si la password está bien o es erronea, veamos si es así realmente en el binario compilado.



Ya estaría completado, el código que use para el CrackMe es el siguiente.

Code (c) Select

#include <stdio.h>
     
int main(){
           
int password2;
int password = 725;
           
scanf("%d", &password2);
           
if(password == password2){
printf("Password Correcta");
}
else{
printf("Password Incorrecta");
}
     
}


Podemos ver que el código es parecido pero no es exactamente el mismo, la cuestión es que nos ha sacado un código comprensible a partir de un binario y hemos podido evitar hacer procesos más complejos con alguna herramienta como IDA o OllyDBG.

Espero que les haya gustado y servido.

También me pueden seguir en Twitter si les hace ilusión: @RoloMijan

Saludos.