Nivel 7 del Hack It 2008 (Euskal Encounter 16)
Este es uno de los tres niveles que desarrollé para el Hack It de este año en la Euskal Encounter y que Txipi incorporó como nivel 7 del concurso. Paso a continuación a explicar cuál sería la solución “oficial” que tenía en mente cuando diseñé el reto.
Accediendo a la página del nivel, se nos indica que descarguemos este fichero. Una vez descargado y descomprimido, obtenemos un único fichero, de nombre LOADME.
Lo primero es ver de qué tipo de fichero se trata este LOADME, ¿es un ejecutable?, ¿son datos?, ¿es texto?, ¿está cifrado?… los dos primeros pasos que se pueden dar en estos casos, suponiendo que estamos trabajando sobre un sistema de tipo Unix, es hacer uso de los comandos del sistema strings, xxd y file para recabar algo más de información y obtener un volcado de cadenas de texto y un volcado hexadecimal del fichero.
El comando strings y xxd nos desvelan una interesante cadena de texto dentro del fichero, se trata de la cadena “Codigo-QR”. Esto es una pista reveladora de lo que puede ser el contenido del fichero.
El comando file es el más revelador, ya que nos aporta información extremadamente útil para avanzar en el reto:
$ file LOADME LOADME: Spectrum .TAP data "Codigo-QR " - memory block (screen)
Como se puede observar en la salida del comando, se indica que es un fichero TAP de Spectrum. De nuevo aparece la cadena “Codigo-QR” que resulta ser un campo de comentario dentro del fichero TAP. Por último se indica que los datos almacenados en el fichero TAP de Spectrum es una pantalla.
El formato TAP es uno de los formatos que se desarrollaron para almacenar en ficheros programas de Spectrum que originalmente se guardaban en cintas de audio. Precisamente lo de TAP viene por “tape”. Los emuladores de Spectrum tienen una funcionalidad que suele ser la de reproductores de cintas virtual, en donde se pueden usar este tipo de ficheros para cargarlos en el ordenador emulado.
Usando el comando file se obtiene la descripción del fichero, si bien analizando los primeros bytes de la cabecera se puede llegar a la misma conclusión. Podemos sacar un volcado hexadecimal con el comando xxd y analizar los primeros bytes. Una búsqueda en google por los primeros bytes de la cabecera “13 00 00 03″ ya nos apunta directamente en los primeros resultados al formato .TAP de Spectrum.
Llegados a este punto lo único que se necesita para avanzar es un emulador de Spectrum, en el que poder cargar el fichero TAP y ver qué se obtiene. Dependiendo de la plataforma se podrá usar un emulador u otro. En mi caso particular, el emulador que he usado es Fuse para OSX, si bien cualquier emulador en cualquier plataforma es válido ya que el formato del fichero es estándar.
Dependiendo del emulador usado, el procedimiento para cargar el fichero cambiará, en cualquier caso tendremos que dar el comando adecuado dentro del Spectrum emulado. Podemos optar por intentar un comando LOAD “” o bien un LOAD “” SCREEN$
Atendiendo a la información de la que se dispone, el comando correcto es un LOAD “” SCREEN$ ya que lo que se nos está proporcionando en el fichero de datos es una pantalla, no un programa ejecutable. Se puede llegar a la conclusión de que es una pantalla y no un programa ejecutable en base a la información que nos aporta el comando file que directamente nos dice que es una screen o, si somos más detallistas y analizamos el fichero de acuerdo al formato TAP, se puede ver que el tipo de fichero es 0×03 con dirección de comienzo 16384(0×4000) y longitud 6912 (0×1B00), lo cual es indicativo de que lo que nos traemos entre manos es un fichero SCREEN$
0000000: 1300 0003 436f 6469 676f 2d51 5220 001b ....Codigo-QR .. 0000010: 0040 0080 ff02 1bff ffff ffff ffff ffff .@.............. 0000020: ffff ffff ffff ffff ffff ffff ffff ffff ................
Una vez cargado el fichero aparece en la pantalla del emulador de Spectrum lo siguiente:

Esto es un código QR, que debe ser decodificado para seguir avanzando. El mecanismo que se use para decodificarlo puede ser variado. Si se dispone de un lector de códigos QR en la PDA o el teléfono móvil, es la forma más rápida de obtener la información textual codificada en el grafico. Una buena opción es usar el lector de Quickmark, disponible para una gran variedad de dispositivos móviles, tanto WIndows Mobile como Symbian. Otra opción muy versátil es la aplicación iMatrix para el iPhone. La decodificación en este caso se puede hacer directamente sobre el código mostrado en la pantalla, usando la cámara de la PDA o el teléfono móvil.
Si no se dispone de esta posibilidad, una alternativa es realizar una captura de pantalla, generar un fichero en formato GIF, PNG o BMP y usar algún software que realice el análisis del código. Existen varias aplicaciones Java como esta perfectas para realizar el trabajo.

El resultado, siguiendo uno u otro camino, es la cadena de texto buscada, clave para avanzar al siguiente nivel ;)
Comments
One Response to “Nivel 7 del Hack It 2008 (Euskal Encounter 16)”
Leave a Reply
El nivel mas friki del hackit, sin duda te lo has currado, y es super original!! :-)
Seguro que más de uno se txinó con el fichero TAP y el tipo concreto del mismo (SCREEN).
Creo que en la siguiente tanda vamos a tener que meter una de ASM de Z80 un poco loka!