\   /\          __    _____        _____     _____ _ _____
)  ( ')        |  |  |  _  |   ___|  _  |___|  |  |_|_   _|___
(  /  )        |  |__|     |  |  _|     |_ -|     | | | | | .'| 
 \(__)|        |_____|__|__|  |___|__|__|___|__|__|_| |_| |__,|

 
 Hoy vamos a hacer algo de reversing a los ejercicios que tiene
wapiflapi en su github.

Podeis obtenerlos en: https://github.com/wapiflapi/exrs/blob/master/reverse

Empezaremos por el primer ejercicio, para descargarlo en nuestra maquina
usaremos:

https://github.com/wapiflapi/exrs/raw/master/reverse/r1
Una vez descargado en nuestro equipo debemos darle permisos de ejecucion con el comando:
chmod +x r1
Una vez otorgados los permisos de ejecucion ya podremos ejecutarlo. Si lo ejecutamos, vemos que nos indica su uso, el cual es pasandole un password como parametro, y si le pasamos uno que no es nos dice que not OK.... Smiley face Bien, nos indican que el password esta en texto plano, asi que lo primero que podemos hacer es usar el comando strings para ver todas las cadenas de texto que tiene el binario de la siguiente forma:
strings r1
Smiley face En la imagen podemos ver que hay un texto llamativo... my_password_to_easy. Si probamos con ese password pasa lo esperado... Smiley face Asi que ya habriamos superado el reto ya que ya hemos obtenido el password. Ahora vamos a hacer algo de reversing :) Bien, empezaremos usado gdb para ver el interior del binario, para ello ejecutamos:
gdb ./r1
El siguiente paso sera desensamblar la funcion main para ver que hace... asi que escribiremos:
disas main
Obtendremos algo como lo siguiente: Smiley face Si miramos bien vemos que en la direccion 0x400640 se encuentra una call a la funcion compare_pwd, para ver que hace esa funcion usaremos:
disas compare_pwd
Y nos aparecera algo como: Smiley face A simple vista podemos ver que: 0x4005d0 mov edi,0x4006d8 #copia lo que hay en 0x4006d8 al registro edi antes de hacer la comparacion. 0x4005d5 call 0x400b0 strcmp #Se hace la comparacion y.. 0x4005dc jne 4005ea #Despues de la comparacion... Si la comparacion sale "mal" El salto lleva a: 0x4005f1 mov edi,0x4006f8 printf Si la comparacion sale bien, no salta, entonces continuara con: 0x4005de mov edi,0x4006ec puts Sabiendo esto podemos ver que hay en 0x4006d8 que va a copiarse a edi antes de comparar, para ello ejecutamos:
x/s 0x4006d8 
Y vemos que lo que muestra es my_password_to_easy, asi que hay tenemos la password correcta haciendo reversing :) Si teneis curiosidad podeis hacer lo mismo para ver que mensaje muestra si el salto va mal, o si el salto va "bien" haciendo:
x/s 0x4006f8
x/s 0x4006ec
Y vereis los mensajes que printaria si fuera bien o mal! Smiley face