El Comienzo del Mal

Hace algunos meses, leyendo la q2 servers list -una lista de correo para gente que administra servidores- vi un mail de un tipo que reclamaba airosamente de que había visto jugadores en su servidor haciendo cosas que normalmente no se pueden hacer. Obtuvo varias respuestas acerca de la existencia de un programa llamado ZBot, que es un "aiming cheat". Aiming Cheat quiere decir Trampa para Apuntar. Pues bien, esto puede ser entretenido, dije para mí. Hice un par de búsquedas, y ahí estaba.

Bajé la cosa del demonio. La hice andar, me conecté al Coliseo con un nombre nuevo -no recuerdo, pero era algo así como BadAss- y Pum!. Increíble. Te dedicas a pasear al medio de cualquier nivel con una rail y escuchas como mueren tipos. Incluso no necesitas mirarlos, sólo ves que el arma realiza el movimiento del disparo y el tiro sale hacia atrás. Me reí mucho de ver como caían los pajaritos, pero al final de la segunda etapa la cosa se vuelve sabor agrio. Es de risa, pero aburre. Simpático, y lo guardé al baúl de los recuerdos.

Pensando un poco más -a veces hay que pensar también- llegué a la conclusión de que esto podía ser una verdadera molestia para quienes jugamos Quake2. Me dediqué a investigar por ahí y supe del funcionamiento del artilugio éste.

Funcionamiento

Existen varios tipos de bots. Están los server side bots, que sirven para entrenar, o como una suerte de "vigilantes" para ciertos servidores (tenemos Eraser, CR), están los client side bots, que hacen las veces de un programa cliente que juega de verdad en un servidor, pero no es controlada por un humano (Pandora puede ser un buen ejemplo) y están los Client Side Proxy Bots. Éstos sirven para hacer trampa. Estos programas funcionan como intermediario entre el servidor y el cliente (en este caso el juego). Este proxy intercepta los mensajes del servidor, responde automáticamente ante ciertos eventos y el resto se los envía normalmente al cliente.

¿Confuso?

No es tan complicado. En una sesión normal de Quake, el servidor le envía al cliente toda la información de lo que ocurre alrededor. Cuantas entidades andan por ahí, hacia que parte apunta -vector-, dirección, velocidad, que arma lleva; el cliente le envía de vuelta al servidor nuestras acciones también. Hacia donde nos movemos, aceleración, facing -donde miras-, etc; y si has disparado o no. Esto es pura magia y gozo, donde todos nos enfrentamos unos a otros felices de ser convertidos en pulpa.

Acá es donde entra el proxy.

En una sesión usando uno de estos proxy bots, es el proxy el que se conecta al servidor. Entonces, el cliente se conecta al proxy -¿¡qué!?- y se inicia una sesión. Entonces, el servidor le envía los mensajes al proxy y el proxy los redirige al cliente. Cuando se activa la trampa, el proxy interpreta los mensajes, y si tiene a una entidad cerca de su FOV (Field Of Vision, Campo de Visión), engaña al server diciéndole "Hey, server, estoy mirando directamente a este pelao", y luego "Hey, server, he disparao". El server calcula el vector desde el punto donde el proxy le dijo que estaba mirando y claro, al momento de disparar, el bicho le ha acertado con un rail justo entre las cejas al pobre pelao. En el siguiente frame, el proxy le dice al servidor que está mirando justo donde estaba mirando antes de matar al infortunado pelado.

La gracia de todo esto es que el tiempo entre un frame y otro es de unas pocas décimas de segundo, por lo que se produce el efecto de que el jugador que usa el bot disparase por la espalda.

Solución

Dado el extraño comportamiento del cliente cuando se está usando el ZBot, el servidor puede detectar cuando un jugador está usando un proxy bot. Afortunadamente, Lithium incorporó esta detección como parte de sus características. O sea, una solución simple sería instalar Lithium.

Hay otra solución algo más complicada. El código de detección y expulsión de jugadores usando ZBot está disponible, por lo que un administrador machaca puede bajar las fuentes desde Id Software, agarrar un Visual C++ 5.0 y recompilar el server con el código de detección incorporado. Esto lo considero como un buen remedio.

Ahora, hay que considerar cual código de protección usar. Hay algunos que usan la característica del bot que no procesa comandos con "!" al principio, otra que se basa en el puerto -patea jugadores con zBot realmente estúpidos, que al parecer son mayoría- y la más complicada es evaluar los paquetes que el cliente envía. Buéh, no he investigado más a fondo en esto. En cuanto tenga más información la publico.

Leus[DS]

   Links