martes, 7 de enero de 2014

Como ganar siempre al juego Preguntados



Bienvenidos al primer post del 2014! Estas Navidades he estado trabajando sobre la presentación que Pablo y yo daremos en Shmoocon, llamada Malicious Threats, Vulnerabilities and Defenses in WhatsApp and Mobile Instant Messaging Platforms, y he tenido que dejar un poco de lado hacer el mal, hasta que un amigo me propuso echar una partidita a un juego para móvil llamado Preguntados y decidí que era momento de hacer un descanso y ponerme a otra cosa.

Preguntados, de los creadores de Apalabrados, es un juego de preguntas y respuestas de seis categorías diferentes: Geografía, Historia, Arte y Literatura, Ciencia y Tecnología, Entretenimiento y Deportes. Para ganar, tienes que conseguir los personajes correspondientes a cada una de las categorías. Giras la rueda y el azar decidirá las preguntas que tendrás que responder. Si caes en la casilla especial, podrás jugar para conseguir el personaje que tú elijas. Una especie de Trivial vitamidado :P

Según los creadores, ya hay más de 90.000 preguntas que se van actualizando continuamente, pero la pregunta más importante es, ¿podríamos ganar siempre cualquier partida de Preguntados?. Eso me aposté, y ahora tocaba conseguirlo...

Después de descargar e iniciar el juego, nos propondrá contrincantes contra los que poder jugar. Cada jugador tiene un identificador interno de 8 dígitos para realizar las peticiones y al que van asociados valores como vidas restantes, monedas, tiempo hasta la siguiente partida etc. En principio estos valores no se almacenan en el teléfono, si no que son consultados al servidor con la siguiente petición a api.preguntados.com:
        GET /api/users/num_usuario/dashboard?app_config_version=valor_numerico

Lo interesante aparece a la hora de jugar. De la misma forma que cada jugador tiene asignado un valor numérico, las partidas tiene asignadas otro valor numérico (en este caso de 7 dígitos). Para obtener información de la partida, participantes, última conexión, preguntas contestadas, marcador etc. se realiza la siguiente petición:


El servidor nos devolverá los valores solicitados:


Como veréis en la siguiente captura, la situación mejora al iniciar la partida. Las peticiones las realiza por HTTP, por lo que son visibles en claro y tan sólo haría falta capturar el tráfico de red para poder ver la futura pregunta y la respuesta, ya que vienen en formato JSON a la petición que realiza el juego desde el móvil.

En este caso, y por comodidad, he utilizado Burp para interceptar y visualizar las peticiones:

Dentro de la respuesta, además de los valores conocidos de los participantes, podremos encontrar las preguntas que pueden salir(dependiendo del tipo de reto), así como las respuestas correspondientes.

Si no queréis ir visualizando cada petición de la partida para saber la respuesta correcta, podéis enviar la consulta al Repeater de Burp, y llamarla cuando lo consideréis necesario.

Recordad que ésto es hacer trampas! Yo me acordaré de que a mi me deben unas cervezas por ganar la apuesta... }:)