viernes, mayo 13, 2005

Historia de una trampa.

Soy un tramposo. No lo puedo evitar. Mi ego se ve siempre muy castigado ante los enigmas, diríamos torturas, que se plantean por estos lares.

Hay que hacer algo.

Nuestro pequeño experimento es engañar al validador para que: o nos dé la respuesta correcta o nos diga cómo hacer para que sin la respuesta correcta, aparezca nuestro nombre como si lo hubiesemos resuelto correctamente.


Un amigo llamado Jorge me enseño hace muchos años (cuando los modems chirriaban al conectarse a infovía), que lo que está en tu pantalla es tuyo y puedes hacer con ello lo que te plazca. Más adelante mis conocimientos se completaron con conceptos como cliente y servidor. Cliente es lo que se ejecuta en tu máquina y lo que se puede trampear. MHAHAHAHA!!!!!!


¿Esto a que viene? a que por motivos que no vienen al caso, el validador de respuestas para zooglea es una aplicación CLIENTE. Así que, el primer paso es guardar el fichero .swf en el disco duro. Mis conocimientos de flash son dos: solo sé que no me gusta y que además en linux (SO que manejo) no hay editores... ¿qué hará nuestro intrépido aprendiz de juaker?

Lo primero ha sido conseguir las utilidades apropiadas, estas se llaman: flasm un desemsamblador de bytecode flash, y flare un descompilador de ActionScript (el lenguaje de programación de Flash). Este último, te escribe el código fuente y las variables aparecen con el nombre que le puso originariamente el programador. Más fácil parece que no puede ser.

No voy a ser tan cabrito de destripar totalmente el comprobador. Bueno, si voy a ser tan cabrito. ;-)

Al final, todos los programas son una serie de instrucciones y toma de decisiones en función de los resultados de las instrucciones anteriores. Así que lo que me interesaba era encontrar el "if" que determinaba si la respuesta del usuario era la misma que la respuesta correcta. La primera linea de investigación es determinar cómo se entera nuestro cliente de la respuesta correcta. Um, resulta que hay un script php en un servidor oculto que con las opciones adecuadas, nos informa de las respuestas válidas. Aunque ¡cosa más extraña!, las respuestas válidas son números.

A priori no hemos sacado nada en claro de esta línea, así que vamos a la segunda línea de investigación, como llega la entrada del usuario a ese 'if' desafiante. Miramos hacia arriba y encontramos un ¡maldición! cálculo de hash sobre la respuesta del jugador. Es decir, la respuesta de entrada es cifrada por una fórmula (¿de donde la sacaste?), de forma que realmente se comparan la respuesta cifrada del jugador con la de la solución (y nosotros nos quedamos sin saber cual es la buen). Así que para terminar el proceso solo falta generar una pseudosolución. No importa que no sea correcta con tal de que su código cifrado sea idéntico al de la solución.

Y con esto nos apuntamos el tanto de la victoria, la satisfacción de vencer a la máquina...

Detalles interesantes:
Lamentablemente, el algoritmo empleado para cifrar no es muy fuerte. Es decir, aunque no se puede obtener la clave original del hash, si que es posible obtener falsas respuestas fácilmente con la misma firma de autentificación que el original. Esto solo se puede evitar buscando un algoritmo más complejo. Los md5 cumplen mejor con esta función, pero lamentablemente fueron hace poco reventados. (los informáticos que digan ahora lo que hay que usar).

En este caso, para conseguir las pseudoclaves, he optado por un algoritmo genético, ya que el espacio de soluciones es continuo y definido (no son condiciones necesarias de uso, pero aumenta la velocidad a la hora de obtener una solución), o quizás hubiese sido más interesante el uso de la fuerza bruta (probar todas las combinaciones posibles).

Esta fechoría quedaría impune salvo por una medida de seguridad implementada por Taliesín. Como medida de control, al escribir en la base de datos de los ganadores, hay un campo que es "la respuesta que escribió el jugador", así que con una inspección visual (o script al canto) se puede comprobar que he hecho trampa. Aún así, he inyectado en la base de datos de ganadores mi nombre (en el código de nuestro cliente viene la secuencia para ello). Posiblemente sin esa precaución, yo no habría escrito esta entrada y en cambio a partir de ahora acertaría TODAS las respuestas ;-)

P.D. El validador no funciona en mi maquina con Linux, posiblemente sea porque se usan funciones modernas de la versión 7 de flash y no son compatibles con la máquina flash que tengo instalada.

1 opiniones:

A las 5/13/2005 02:00:00 p. m., Blogger Alfred-λ dijo que...  

Tu forma de ganar el enigma de esta semana tiene mucho más mérito como lo haz realizado tu que de la manera tradicional. Enhorabuena.

PD: MD5, SHA-0 y SHA-1 fueron reventado y aquí ya se dijo. Solución SHA-256 bits.

Di lo que quieras

<< A la portada