¿Dónde está Wally? Solución del reto

En este nuevo reto, partíamos de la siguiente imagen:

NmQ3OTc5NzUyYTM4NDYzNDM0MjUzNzQzMjUzNzQzMjUzNzQzMzM3ODZhNjg3YTc3NmU3OTI1Mzc0NTY2Nzc3OTI1Mzc0Mzc0Nzc3MDMzNmE3ODM0MjUzNzQzNzUzMjY4NzQ3Mzc5NmE3Mzc5MzQ3YTc1NzE3NDY2Njk3ODM0MjUzNzQ1NjY2NDcxNzE2YTZjNjY3MzY0NzE2Njc4NjQyNTM3NDI2NjY4NjY2ODZlNzQ3MzZhNzgzNDI1Mzc0MzY2NzE3MTcxMjUzNzQ1MzM2YzZlNmIzNQ==

Analizando el campo «alt» de la imagen, vemos que se corresponde a una cadena codificada en base64:

NmQ3OTc5NzUyYTM4NDYzNDM0MjUzNzQzMjUzNzQzMjUzNzQzMzM3ODZhNjg3YTc3NmU3OTI1Mzc0NTY2Nzc3OT
I1Mzc0Mzc0Nzc3MDMzNmE3ODM0MjUzNzQzNzUzMjY4NzQ3Mzc5NmE3Mzc5MzQ3YTc1NzE3NDY2Njk3ODM0MjUz
NzQ1NjY2NDcxNzE2YTZjNjY3MzY0NzE2Njc4NjQyNTM3NDI2NjY4NjY2ODZlNzQ3MzZhNzgzNDI1Mzc0MzY2Nz
E3MTcxMjUzNzQ1MzM2YzZlNmIzNQ==

Así que al decodificarla obtenemos lo siguiente:

6d7979752a3846343425374325374325374333786a687a776e79253745667779253743747770336a78342
537437532687473796a7379347a75717466697834253745666471716a6c66736471667864253742666866
686e74736a783425374366717171253745336c6e6b35

Si nos fijamos en el resultado obtenido vemos que únicamente contiene números y algunas letras del abecedario (concretamente las primeras), así que podemos pensar que se encuentra en hexadecimal. Por lo que si lo convertimos a caracteres ASCII obtenemos:

myyu*8F44%7C%7C%7C3xjhzwny%7Efwy%7Ctwp3jx4%7Cu2htsyjsy4zuqtfix4%7Efdqqjlfsdqfxd%7Bfh
fhntsjx4%7Cfqqq%7E3lnk5

Llegados aquí, no es tan fácil continuar decodificando el enlace, ya que no se trata de un codificado “básico”. Pero teniendo en cuenta la primera pista que se dio, seguramente se trata de un enlace web, lo más lógico es que empiece por “http://”, así que podemos pensar que los primeros caracteres de la cadena se corresponden con ese inicio. Por lo tanto, si “myyu” se corresponde a “http”, esto nos dice que se está utilizando un cifrado Cesar con desplazamiento de 5 hacia la derecha. El problema viene con el abecedario utilizado, ya que no sabemos que serie de número y/o símbolos se han utilizado para realizar la codificación.

Si observamos bien el enlace e intentamos descifrar algo más, obtenemos algunas cadenas nuevas como “xjhzwny” que pasa a ser “securit”, “fwy” que pasa a ser “art”, y “twp” que se convierte en “ork”. Esto forma “securit?art?ork”, lo que parece demostrar que sí que se ha utilizado un desplazamiento de 5 para codificar el enlace.

Analizando más detalladamente el enlace codificado y sabiendo como está formada una URL, podemos llegar a la conclusión de que se han utilizado los valores unicode de los caracteres, y se les ha aplicado el desplazamiento al valor de los mismos.

Utilizando un script como por ejemplo el siguiente: “codifica_decodifica.txt” (renombrar a html y ejecutarlo en el navegador) y sabiendo que el último carácter de la cadena cifrada indica el desplazamiento utilizado, obtendremos el resultado final:

https://www.securityartwork.es/wp-content/uploads/ya_llegan_las_vacaciones/wallly.gif

Para aquellos que tengan curiosidad por el método utilizado, podréis encontrar una explicación más detallada en el siguiente enlace: http://scriptasylum.com/tutorials/encode-decode.html.

Una vez llegados hasta aquí, si seguimos el enlace ahora decodificado, encontramos una imagen prácticamente igual a la inicial, pero con la pequeña diferencia de que parece que ésta se encuentre un poco desplazada respecto a la anterior.

Abriendo las imágenes con un editor hexadecimal no apreciamos ninguna diferencia entre ellas a simple vista, pero si realizamos una comparación carácter a carácter de ambas imágenes y obtenemos los bytes que diferencian cada una de ellas (con el siguiente código por ejemplo: “comparador.c”), conseguimos dos resultados diferentes. Los cuales resultan ser un cadena con caracteres no imprimibles y la cadena “_721_PaS5Gu0rD_208_”.

Utilizando la segunda cadena obtenida, abrimos el archivo comprimido correspondiente a la segunda parte del reto. El cual contiene un único archivo, que a pesar de tener la extensión “jpeg”, se corresponde a una imagen PGM.

Si abrimos la imagen, vemos que contiene el logo del blog de SecurityArtWork pero no se observa nada más a simple vista.

Estudiando como funciona el formato PGM, vemos que posee una cabecera la cual indica el tipo de fichero (P5 en este caso), un posible comentario seguido de una almohadilla (#), el tamaño de la imagen (721 x 71) y el número de tonalidades de gris utilizado (155). Si observamos los comentarios, a parte de ver “created by fikih888”, podemos encontrar la cadena “– check_the_PaS5Gu0rD – ” un poco más para abajo, la cual podría ser la contraseña que estábamos buscando. Pero si la probamos, vemos que no podemos abrir el archivo comprimido, así que toca seguir buscando ;)

Si entendemos esta pista, nos está diciendo que debemos comprobar “PaS5Gu0rD”, cadena la cual coincide con el resultado de la prueba anterior. Así que si la analizamos, vemos que contiene los números “721” y “208”, los cuales nos indican el tamaño de la imagen del logo de SecurityArtWork. Así que poniendo estos valores como tamaño de la imagen (cambiando el valor “71” por “208” con el editor hexadecimal) obtenemos una imagen más grande que la anterior, pero aun y así no somos capaces de conseguir nada. Por lo tanto, lo último que queda por probar es ampliando el rango de tonalidades de gris al máximo (cambiando el “155” por el “255”) y de esta manera obtenemos la siguiente imagen:

Donde en la esquina inferior derecha podemos ver “Congratulations! You’ve got the “SeCR3t” ”, donde “SeCR3t” se corresponde al token que estábamos buscando, ya que con él podemos abrir el archivo comprimido que servía como validador :)

Y hasta aquí la solución del reto ^^ Espero que hayáis disfrutado con él y aquellos que no habéis logrado pasarlo hayáis aprendido nuevas técnicas de ocultación de información en imágenes ;)