Hace unos días os propusimos un reto sobre esteganografía, en el cual debíais encontrar cual era el videojuego del cual se había realizado una nueva versión. Para esto se proporcionaba un archivo comprimido el cual se creía que tenía información privilegiada sobre este juego.
Al intentar abrir el archivo, se nos pedía una contraseña, la cual sabíamos (gracias a la pista proporcionada en un comentario del reto) que sólo era de caracteres numéricos y de no más de cuatro caracteres, así que necesitábamos obtener esa contraseña.
Para este paso, como sabemos que es una contraseña sencilla, podemos utilizar algún software de recuperación de contraseñas como por ejemplo rarcrack.
Después de un ratito (este ratito depende de la máquina utilizada y el programa elegido, todo hay que decirlo, aunque en este caso se acotaron mucho los caracteres posibles y la longitud para que se obtuviese más rápido) obtendríamos nuestro password, el cual era “4567”, y podríamos abrir el archivo.
Una vez extraemos el contenido del rar, nos encontramos con dos fichero más. Uno con el nombre “juego.txt” y otro con el nombre “final_challenge”.
En “juego.txt” nos encontramos el siguiente contenido:
Así que toca seguir buscando ya que si no efectivamente sería demasiado fácil sí. El otro archivo no tiene extensión y si hacemos un file observamos que es un archivo RAR, pero al intentar abrirlo no muestra ningún archivo. Así que decidimos abrirlo con un editor hexadecimal para ver si efectivamente se corresponde a un archivo .rar. Si nos fijamos en la cabecera, parece que efectivamente sí que se trata de un archivo rar, pero hay un “?” (0x3F) que llama la atención, ya que éste no aparece en la cabecera original de este tipo de ficheros.
Si buscamos en la documentación de los archivos RAR, vemos que en vez de 0x3F, debe ir 0x07, así que procedemos a realizar dicha modificación y ya podemos ver el contenido.
Una vez extraídos los archivos, vemos que hay otros dos nuevos (otra vez), “token” y “codigo_des”. Ninguno de ellos tiene extensión, pero rápidamente vemos que uno de los dos es una imagen PNG y el otro un data:
Si abrimos la imagen, obtenemos un fondo negro con rayas verticales blancas, algo que parece ser un código de barras:
Si intentamos decodificarlo, vemos que no obtenemos ningún resultado, así que procedemos a realizar un pequeño análisis manual de la imagen. A simple vista, en la imagen sólo observamos dos colores, pero si la abrimos con GIMP por ejemplo, observamos que en realidad existen tres colores distintos.
Esto quiere decir que hay un tercer color, el cual nosotros no vemos, pero que existe en la imagen. Como se sabe, cada color puede tener diferentes tonalidades, desde el valor 0 (negro) hasta el 255 (blanco), pero el ojo humano no es capaz de diferenciar todos ellos, así que esto debe ser lo que sucede en este caso. Para poder ver este color, podemos utilizar GIMP de nuevo y seleccionar el color blanco con un umbral de 0. Al hacer esto, observamos que existen tres barras más en la imagen que están de color negro, pero que no se han seleccionado con nuestra selección, lo cual quiere decir que es un negro diferente (¡!).
Si procedemos a pintar estas barras de blanco, obtenemos un nuevo código de barras, el cual sigue sin tener significado. Si nos fijamos bien, es un código de barras un tanto extraño, ya que normalmente las barras negras son las que indican la información, pero en este caso son barras blancas. Partiendo de esto, invertimos los colores de la imagen y vemos que ahora sí que se parece más a un código de barras de “toda la vida”, y está vez sí que tiene significado. Concretamente “p4ssw0rDd3s”.
Una vez hemos acabado con este archivo, analizamos el código hexadecimal del siguiente archivo para intentar descubrir de qué tipo es. Fijándonos en la cabecera podemos ver que se corresponde a un archivo cifrado con OpenSSL, pero para aquellos que nunca hubiesen trabajado con este tipo de archivos, se puso una pista en la imagen anterior, ya que si la abríamos con un editor hexadecimal, podíamos ver al final de todo “0p3nSSL rUl3S!”, lo cual nos mencionaba dicho programa.
Como todos sabemos para descifrar un archivo cifrado es necesaria una contraseña. En este caso, no disponemos de esa contraseña, pero hemos obtenido del código de barras anterior la palabra “p4ssw0rDd3s”, la cual encaja bastante con lo que estamos buscando en este momento. Así que vamos a ello.
Al ejecutar OpenSSL vemos que puede utilizar diferentes algoritmos de encriptación, pero si nos fijamos en el nombre de la imagen “codigo_des” y en el password obtenido “ p4ssw0rDd3s”, vemos que aparece la palabra “des”, la cual pertenece a un algoritmo utilizado por OpenSSL (Mira tú por donde…). Así que parece ser que todas nuestras piezas encajan y por fin podemos obtener el contenido del fichero “token”.
Escribimos la orden de OpenSSL para descifrar el archivo y probamos suerte:
Vemos que no obtenemos ningún error y que en nuestro directorio ha aparecido un nuevo archivo, el cual corresponde a una imagen. Así que la abrimos y obtenemos lo siguiente:
La cual nos indica que hemos llegado al final del reto, ya que la respuesta del famoso juego esperado es “SUPER MARIO BROS”. Así que hasta aquí la solución del reto propuesto.
Esperamos que haya sido de vuestro agrado y a aquellos que lo hayáis conseguido, felicidades, y a los que no, espero que al menos hayáis aprendido un poco más sobre algunas técnicas de esteganografía y de los usos que se pueden dar de ella a la hora de esconder información.
Como mención destacada, comentar que tan sólo unas horas tras la publicación del reto, recibíamos la primera respuesta correcta de Kachakil, quien está más que experimentado en este tipo de retos :)
Me ha gustado mucho, aunque yo me quedé en el código de barras. Para un novato como yo, como se llega a la conclusión de que ese código de barras significa “p4ssw0rDd3s” ?
Hola Anónimo. Me alegro que te gustase el reto :)
Existen diferentes programas que ayudan a codificar/decodificar códigos de barras. Un ejemplo puede ser esta web, en la cual puedes subir una imagen y te devuelve el mensaje codificado: http://www.onlinebarcodereader.com
Espero que con eso se haya aclarado tu duda ;)
Saludos
Muy bueno Rafa!
¡Enhorabuena por el reto, muy completo y divertido!
Enhorabuena Rafa, muy chulo! :)