25/02/09

Geek Puzzle II: Solución Reto 0x03, Hidden Data

La prueba proporciona la siguiente información.

1. Un fichero formado por un texto separado claramente por 3 segmentos de texto

0#OmAyyumvdbynutgjwumjgvgogbdzgmallupkdabyubgbkuyngyjgvbuhumtclnyupewgvoctukdtpvkgbywg.....
1#FaSjjnahmqjindpxenaxphpfpqmcpasrrnlzmsqjnqpqznjipjxphqnwnadtrijnluephftdnzmdlhzp....
2#MjXwwrjsyvworqzeprjezszmzvyizjxttrcnyxvwrvzvnrwoz....

2. Una cadena a desencriptar 30#LAMKBZZREUQVEUGMILWMCMWHZZNZLHLNLHEG.
3. Una pista, Think in english

Tanto por los datos de entrada como por la pista, podemos deducir que se trata de una clarísima prueba de criptografía.

Comienza el análisis de los datos.

1. Las tres secciones, 0,1, y 2, tienen exactamente el mismo número de caracteres.
2. El juego de caracteres se encuentra comprendido entre los imprimibles en las 3 secciones.
3. Analizando la relación entre los 3 mensajes encontramos que para los mismos caracteres siempre existe la misma equivalencia

  0#O m A y y
  1#F a S j j
  2#M j X w w

Tras este ligero análisis podemos deducir que nos encontramos ante un cifrado clásico, con 3 alfabetos del mismo mensaje.

Procedemos a la búsqueda del algoritmo de encriptación para el primer mensaje, el 0.

Usando la herramienta cryptool copiamos el texto correspondiente a la sección 0 y probamos el criptoanálisis de los algoritmos más frecuentes, entre ellos, el algoritmo de sustitución, al aplicar el critoanálisis obtenemos el siguiente texto.   
 MrUttersonthelapyerpasamanofaruggedcountenancethatpasneverlightedb
 yasmilecoldscantyandembarrassedindiscoursebackpardinsentimentleanl
 ongdustydrearyandyetsomehoplovableAtfriendlymeetingsandphenthepine
 pastohistastesomethingeminentlyhumanbeaconedfromhiseyesomethingind
 eedphichneverfounditspayintohistalkbutphichswokenotonlyinthesesile...

El alfabeto de sustitución que nos propone es GEKPUZLNCRITOBDJQMVYAHFSWX
Una búsqueda en google nos indicará que el texto que estamos analizando es el primer capítulo de Dr. Jekyll and Mr Hide. 

Ajustamos un poco las letras al texto original y encontramos el alfabeto correspondiente al primer texto.

Realizamos la misma operación con el resto de secciones. 

0 --> GEKPUZLNCRITOBDFQMVYAHJSWX
1 --> PUZLNCRITOBDFQMVYAHJSWXGEK
2 --> ZLNCRITOBDFQMVYAHJSWXGEKPU

Analizando un poco esta salida, observamos un desplazamiento en las letras, podemos generar todos los posibles alfabetos aplicando un cifrado cesar, o calcular el desplazamiento 3,5,7 es decir 0,(2^n) + 1. 

Generamos el alfabeto correspondiente al 30#BDFQMVYAHJSWXGEKPUZLNCRITO y bingo, ya tenemos la clave.



 

     
      


Geek Puzzle II: Solución Reto 0x05

Aparece una página donde sólo aparece la palabra "Slot Machine" y
un botón "Go". Al pinchar se sustituye por la frase "Insert Coin".

Viendo el código fuente rapidamente advertimos la presencia de un parámetro oculto:

<input type="hidden" name="credits" value="0" />

Alterando el valor a un numero entero mayor de 0 mediante, por ejemplo, un proxy local o mismamente un plugin de firefox (Web Developer) y pulsando en "Go" nos aparece una tabla emulando una máquina tragaperras, con imágenes de 3 frutas.

Si pulsamos varias veces podemos observar la aletoriedad de aparición de estas frutas, contabilizando un total de 6 tipos de frutas diferentes.

También aparece un mensaje: "Try Again" Matches: 0

El código fuente muestra como única cosa reseñable que la tabla donde se pintan las frutas es de 3 columnas x 2 filas y la segunda fila está vacía. Evidentemente, algo más tiene que haber.
Ya que no se hacen referencias a parámetros y toda entrada en el campo "hidden" que no sea un número no deja realizar la "tirada" podemos pensar que hay cookies involucradas.

Si intentamos ver las cookies lo más probable es que no veamos ninguna, salvo que hayamos sido extremadamente rápidos o, más lógicamente, hayamos interceptado el tráfico mediante, por ejemplo, un proxy local.

Comprobamos que efectivamente hay 3 cookies (slot1, slot2, slot3) pero que expiran en tan sólo 2 segundos.

Los valores de las cookies son una ristra de números (cGluZWFwcGxl).
Si continuamos la ejecución con estos valores en las cookies (evitando que expiren) vemos que en la segunda fila de la tabla aparece la palabra "pineapple" en cada celda.

Podemos comprobar que "pineapple" es la codificación en base64 de "cGluZWFwcGxl".

Si alteramos el contenido de las cookies observamos que se muestra en las celdas el resultado de codificar en base64 dicho contenido.

Está claro que hay que conseguir incrementar los "matches" de alguna manera relacionado con esto. Cada casilla con frutas tiene en el campo 'alt' de su imagen el nombre de dicha fruta en texto claro.

Si hacemos que aparezca en las casillas de abajo el mismo texto que en las de arriba (como ya hemos dicho, poniendo en las cookies el valor "descodificado" en base64) y tenemos la suerte de que coincide la fruta de una casilla con el texto de la casilla de abajo veremos que el contador de "matches" se incrementa.

Ya queda claro que hay que hacer coincidir las tres casillas. El problema es que la aparición de las frutas es totalmente aleatoria, ya que no se puede observar patrón alguno.

Tenemos 6 frutas diferentes. Puesto que aparecen en grupos de 3 y admiten repeticiones tenemos unas Variaciones Con Repetición de 6 elementos tomados de 3 en 3, es decir 6^3=216 combinaciones posibles en cada tirada.

Confiar en la suerte es mucho pedir (aunque no es imposible) pero lo suyo es programarse algo para resolver el problema.

En este punto hay muchas opciones posibles de resolución.
Se puede crear un pequeño programa o script que abra un socket contra la página de las frutas, enviando "a mano" las cabeceras, los parámetros por POST y las cookies con una combinación de frutas fija (ojo con el Content-lenght de las cabeceras).

Este script almacenará la respuesta del servidor, por ejemplo, en un archivo de texto. Si hacemos las suficientes peticiones acabaremos por "acertar" la combinación, momento en que se gana el jackpot y aparece la clave: Sl0TzMach1neZ.

Se pueden pedir un número razonable de conexiones (teniendo en cuenta que hay 216 posibilidades, podríamos probar con grupos de 1000) y analizar el archivo, donde, si hemos acertado, aparecería una respuesta distinta con la clave. Otra opción sería hacer peticiones y analizar la línea en donde pinta el número de matches hasta que tenga valor distinto de "Try Again" Matches: 0, "Try Again" Matches: 1 o "Try Again" Matches: 2. Como digo, posibilidades hay muchas...

Enhorabuena a los que superaron el reto y a los que no, espero que esto os despeje todas vuestras dudas.

9/02/09

Geek Puzzle II: Solucion Reto 0x04

Seguimos publicando soluciones a las retos de Geek Puzzle II.
En esta ocasión le toca al reto 0x04, nombre clave Fast-Track ;)

5/02/09

Geek Puzzle II: Solucion Reto 0x02

Ya tenéis disponible mi solucionario para el reto 0x02.

Tenéis a vuestra disposición los comentarios para cualquier tema que queráis que tratemos con respecto a este reto.

22/12/08

Geek Puzzle II: FINALIZADO

Hoy damos por finalizada oficial y definitivamente esta segunda edición de Geek Puzzle. Muchas gracias a todos por participar y por los comentarios que nos habéis hecho llegar hasta el momento.

Por supuesto, en este post merecen mención especial nuestros jugadores más activos: Kachakil, Metalamin y Juanan P.

Felicidades a Kachakil por quedar en primer lugar, habiendo resuelto todos los retos en el menor tiempo. Por lo que nos ha dicho ya ha recibido nuestro kit de plantas carnivoras, y ha prometido que nos enviará una foto para que se conviertan en las mascotas oficiales de Geek Puzzle III dentro de unos meses :)

Metalamin, ha quedado en segundo lugar, habiendo resuelto todos los retos tambien, aunque habiendo invertido algo más de tiempo que Kachakil. Su premio es el mensaje al espacio - por cierto, mándanos el mensaje que aún lo tienes pendiente - ;)

Mención honorífica a Juanan P. quien obtiene un muy merecido tercer puesto en nuestro ranking. Parece que el último reto se le atragantó un poco :)

En breve, entre turrón y polvorón, iremos publicando nuestras propuestas de resolución de los retos a lo largo de las próximas semanas.

Os animamos a que participéis con algún reto de vuestra propia cosecha para la próxima edición de Geek Puzzle. Ya la estamos preparando... así que animaos a diseñar alguna prueba junto a nosotros.

Esperamos vuestro feedback respecto a esta edición, para ir mejorando lo que no os haya gustado de cara a las próximas.

Muchas gracias a todos de parte del Geek Puzzle Team y... ¡Feliz Navidad! :)

17/12/08

El 2º puesto ya ha sido concedido

Parece que el llamamiento de ayer ha sido efectivo :)

Metalamin nos ha remitido la solución al reto 0x07 a las 2:42 GMT+1 con lo que consigue, de forma definitiva, el 2º puesto en esta edición de Geek Puzzle. Felicidades! :)

Como comentábamos ayer, Kachakil cede el mensaje al espacio a Metalamin, que ha resuelto el último reto dentro de la última semana de concurso.

16/12/08

Premio para el 2º puesto

Como ya sabéis, en esta 2ª edición de Geek Puzzle que está a punto de concluir oficialmente teniamos dos premios para el ganador:

  • Un envío real de mensaje al espacio, con su certificado de envío incluyendo el texto enviado y un juego de tarjetas de diseño con información sorprendente sobre ls estrellas, cortesía de http://diseloalasestrellas.com
El ganador de esta edición ya sabemos que es Daniel Kachakil, ya que es quien ha resuelto todos los retos, puntuando el máximo de puntuación en cada uno de ellos, e invirtiendo el menor tiempo en su resolución.

Ahora bien, Dani nos ha comentado que cede el mensaje al espacio a quien quede en 2ª lugar, con una condición: deberá resuelver el último reto antes del próximo lunes a las 00:00 GMT+1, momento en el que dará por concluido oficialmente el concurso.

Optan a este segundo puesto tanto Metalamin como Juanan P. quienes por puntuación tienen posibilidades de quedar en segundo lugar, aunque para obtener el premio deberán resolver el reto 0x07.

¿Quién lo conseguirá?... el tiempo corre... ya solo quedan 5 días ;)