lunes, 17 de noviembre de 2008

Huevos de pascuas

Alien [blackhat4all@gmail.com]

Todos jugamos, algunos más (like Yordan), otros menos (like me), pero al final, al menos una vez en la vida, todos hemos abierto un juego aunque sea para ver de que se trata. El hecho es que, como todos ya deben saber, un juego no es más que un programa, un software, una aplicación programada en un lenguaje específico que, en lugar de servir para optimizar/arreglar la PC, crear hojas de cálculo o para escuchar un archivo de música, está destinado a generar entretenimiento y relajación (aunque hay jueguitos que… ni lo uno ni lo otro)


Siendo entonces no más que aplicaciones programadas por los seres humanos, los juegos tampoco están librados de errores, errores que pueden ser graves como el “colgado” de Windows por no tener una tarjeta específica o más ligeros como una simple instrucción mal programada que impide que en determinada posición el “muñequito” salte como debería hacerlo.

Hay otros errores que son dejados a propósito por los programadores y que son conocidos entre estos como huevos de páscua (lo que nosotros llamamos comúnmente “secretos” o “claves”). Estos no son más que instrucciones dejadas con la intención de ayudar a quien la “descubra” a realizar determinada acción con lo que ganará más puntos o llevará una ventaja por encima de los demás competidores.

En este artículo trataré de demostrar como realizar, descubrir y utilizar estos “secretos”.

Realizar

Como dije anteriormente estas claves no son más que cosas que, o bien son productos del olvido o bien cosas dejadas a conciencia, el caso es que en la mayoría de las veces consiste en una simple condicional: Si haces esto, entonces actúa de esta forma

Un ejemplo perfecto en pseudos código podría ser este:
Supongamos que estamos jugando a los “pistoleros” y cada 10 segundos se nos recarga la pistola de forma automática; este juego debería tener un código similar a:

    Si time=10 entonces reload

No obstante, una línea adicional podría especificar algo como:
    Si Mouse(x)=0 y Mouse(y)=0 entonces reload

De esta forma, incluso por encima de la primera condición estaría la segunda, y para aplicar el truco lo único que deberíamos hacer es poner en ratón en la posición (0, 0) o sea en la parte superior izquierda de la pantalla, con lo que obtendríamos un reload adicional y por lo tanto más balas que nuestro oponente.

Encontrar

Por lo general cosas como estás se encuentran de dos maneras, o bien por ser un jugador extremo de dicho juego, o por que un amigo se lo sabía y se lo dijo a otro, y a otro, y a otro….. y ese otro a ti.

Descubrir uno de estos trucos puede llevar mucho tiempo de juego y quizás jamás se encuentre. No obstante existe otra forma, más rápida y quizás con mejores posibilidades de acertar, y es tratar de pasarle al juego parámetros que no está preparado para recibir en un momento determinado. Por lo general ese tipo de cosas que parecen ilógicas son las que los programadores suelen olvidar pues no piensan que alguien pudiera tratar de hacerlas.

Ej: Tratar de saltar cuando se está agachado
Ej: Disparar desde abajo del agua
Ej: Subir una escalera caminando para atrás.

La semana pasada publiqué un código en el que avisaba que existía un error, el caso es que:
Pseudocódigo:
    Si tecla=Enter entonces
    Si texto_escrito = lista_primer_elemento entonces
    Aumenta Cantidad_correcta
    Aumenta velocidad
    Quita lista_primer_elemento

Pero ¿y si la lista está vacía y se presiona Enter?, pues bien, en ese caso se estará comparando un texto vacío con el primer elemento de la lista que como está vacía es “” y por lo tanto “”=””, así que actuará como si se hubiese escrito una palabra correcta cuando en verdad no se ha escrito nada.

Ejemplos como este existen miles, por lo general en juegos creados de forma rápida y que no son probados durante el tiempo necesario.

Explotación

La forma de explotación es fácil y depende de cuanto se necesite ganar dicho juego. Pero en caso que se descubra una vulnerabilidad o bugs en un juego y este sea lo suficientemente complejo, podría darse el caso de que tuviera más, por lo que sería una buena práctica buscar otras.

Ejemplos concretos

En el Winlinez jamás se coloca una bola en la última fila y columna mientras exista otro espacio para ponerla. En Delta Force existe una misión en la que el hombre se sube en una especie de rampa, cuando se está ahí, si se manda a saltar desde la posición de acostado, el hombre se introduce dentro de la pared haciendo imposible que las balas le den pero dándole la posibilidad de disparar (la única forma de salir de ahí es matándose uno mismo con una granada)

Nota: Lamentablemente no son muchos los juegos con los que he interactuado, pero se que habrán muchos más.


Artículos relacionados


No hay comentarios: