«Hay ‘hackers’ en todos lados.», «En este servidor todos usan ‘hacks’.», «Si no usas ‘hacks’ no tienes posibilidad de ganar»; ésas y más frases siempre se han escuchado, a mayor o menor medida, en servidores de vídeo-juegos en línea. Esta batalla (Entre desarrolladores y los «hacks») es y será una eterna contienda la cual siempre llevará la ventaja el bando atacante (Desarrolladores de «hacks») y sólo unas pocas compañías logran mantenerse un paso adelante en este tema; mientras que, por otro lado, hay empresas que parecen no tener interés en la integridad de sus servicios en línea.
Pero ¿por qué ocurre esto? ¿Qué provoca que unos juegos tengan más hacks que otros? Éste tema tiene una explicación técnica, así que primero he de explicarles, de forma breve, el funcionamiento de los juegos en línea:
LA ARQUITECTURA CLIENTE – SERVIDOR
Primero que nada, hay que entender a los dos actores en los juegos de Internet (Y, en general, todo el funcionamiento de la Red).
CLIENTE SERVIDOR
- El cliente: Es la computadora del usuario, el jugador; en donde se ejecuta el juego y se conecta con el servidor, la funcionalidad de éste es enviar al servidor todas las acciones que el usuario realiza y mostrar al jugador el resultado de éstas.
- Servidor: Es el responsable de recibir todas las conexiones de los clientes, procesar las peticiones (acciones que el usuario realiza) y enviar una respuesta al cliente correspondiente. Su principal trabajo es sincronizar a cada cliente y «poner el orden» en el juego.
Sencillo ¿no? Pero entonces ¿Qué es lo que falla? En términos generales, fallan los programadores y, en menor medida, la arquitectura de la red (Cliente – servidor). Cuando un usuario tiene en su computadora el programa cliente (El vídeo-juego ejecutable) el programador poco o nada puede hacer para que éste sea modificado (Si el usuario tiene algunos conocimientos de informática y programación); por ejemplo, el caso «estrella de este artículo»: minecraft, podemos ver cómo existen múltiples modificadores (MODS) que alteran las funciones del juego, agregan más y, lo importante, permiten acciones que el juego no permite de forma natural, así también existen múltiples versiones no oficiales del «Launcher» que van desde usar el juego sin tener un registro legítimo hasta los conocidos «HACKS».
Paren un minuto ¿Qué es un hack?; aunque su traducción literal significa «cortar» o «hachazo», el término se refiere a una reconfiguración o reprogramación de un código, siempre de una forma no esperada por el desarrollador y/o diseñador legítimo, en la mayoría de los casos de una forma creativa. De una forma resumida, un «hack» es una alteración en el funcionamiento de un programa, ya sea «benigna» o «maligna» pero que permita al programa seguir en funcionamiento, siempre hecho por un experto con conocimientos superiores a los básicos.
Así pues, cualquier alteración no planeada por el programador legítimo se cuenta como un Hack y, como mencioné anteriormente, si un programa cae en manos de cualquier usuario no hay nada que el programador pueda hacer para que éste (El programa/juego) sea modificado. Entonces ¿de qué forma algunos desarrolladores logran evitar, en mayor medida, las alteraciones en sus juegos en línea? Justamente en el otro elemento de la arquitectura «cliente – servidor» la cual el usuario no puede acceder directamente: El servidor.
Como expliqué al inicio, el servidor es el encargado de recibir, procesar y responder cada acción de los jugadores a la vez que sincroniza a todos los clientes para que contengan la misma información al mismo tiempo así pues, la única solución para el programador es enfocar su solución de seguridad en el servidor, haciendo que el servidor no sea únicamente quien recibe las órdenes de los usuarios y las ejecute enviando respuesta de forma inmediata, sino todo lo contrario: convirtiendo al servidor en quien «toma las decisiones finales». ¿A qué me refiero con esto? Volveré a tomar como ejemplo el juego en cuestión, Minecraft:
La forma tradicional de funcionar para este juego dentro de un servidor en línea es:
- El usuario ejecuta la acción de comer una manzana dorada del inventario.
- El juego (cliente) revisa si el jugador contiene una manzana dorada en el espacio del inventario indicado.
- De tener la manzana dorada, se envía la acción el servidor de «comer la manzana dorada».
- El servidor procesa la acción de «comer manzana dorada» y avisa, tanto al usuario solicitante como al resto de los usuarios, el efecto que tiene actualmente el jugador que comió la manzana.
Y… ¿qué es lo que falla? La parte en la cual el servidor procesa la acción, no realiza ninguna validación y delegó esa tarea al cliente; así, de forma sencilla, el usuario puede modificar su juego para que éste envíe la acción de «comer la manzana dorada» presionando una tecla aunque el jugador no contenga ninguna manzana en su inventario, de esa forma el servidor recibiría la acción «realizada», la procesaría e informaría al resto de los clientes que el jugador «x» ha comido una manzana dorada (Siendo esto algo falso).
Entonces, el funcionamiento por parte del servidor debe ser el siguiente:
- Mantener siempre la información total y actualizada de cada jugador en el juego.
- Por cada solicitud recibida por un jugador, validar la «legitimidad» de ésta y la posibilidad de que pueda ser realizada; en el caso anterior:
- El usuario ejecuta la acción de comer una manzana dorada del inventario.
- El juego (cliente) revisa si el jugador contiene una manzana dorada en el espacio del inventario indicado.
- De tener (o considerar que tiene, tomando en cuenta que puede estar modificado) la manzana dorada, se envía la acción al servidor de «comer la manzana dorada».
- El servidor recibe la acción «comer manzana dorada» del jugador «Y».
- El servidor revisa que el jugador «y» (En la información que el servidor contenga) tenga una manzana en el inventario y se encuentre en el slot correcto.
- De pasar la verificación de existencia de la manzana, se le quita al jugador la manzana en la información que el servidor posee, y avisa al resto de los jugadores el efecto de quien comió la manzana.
- De no contener una manzana o no estar en la posición del inventario correspondiente, la acción es negada.
De ésta forma siempre se garantizará (en teoría) que cada acción realizada por los jugadores sea legítima estén o no modificados los juegos clientes; y, por el contrario, mientras existan esos «agujeros» en la validación de los servidores, sin importar las modificaciones, parches y actualizaciones que se apliquen en los juegos, siempre que haya algo que se supone no se pueda hacer en el juego y el servidor no lo valide, habrá algún «hack» que lo haga realidad.
Como último, tengo que aclarar que no todo es «miel sobre hojuelas» ya que, como dice la ley de equivalencia de intercambio «Para obtener algo debes sacrificar otra cosa de igual valor», el agregarle esas validaciones de «integridad» al servidor se estará aumentando los recursos requeridos por el servidor: memoria RAM, procesamiento y tiempo (traducido finalmente como LAG) justo y como ocurre con los «plugins» para servidores: llegan a dar un nivel de seguridad extra en el juego a costa de consumir más recursos ; sin embargo, una comunidad madura siempre elegirá un ambiente amigable y competitivo en un juego, así pues cualquier pretexto por parte de los desarrolladores para evitar mantener la integridad del juego siempre vendrá sobrando.