¿Técnicas para evitar clientes no oficiales en juegos de red?


22

En los juegos de red multijugador, ¿qué técnicas existen para tratar de garantizar que los usuarios se conecten con la aplicación cliente oficial y no con alguna aplicación hackeada?

Me doy cuenta de que probablemente no haya una forma segura de hacer esto, sino que me interesan las técnicas que pueden emplearse para mitigar el problema.

Estoy especialmente interesado en cualquier técnica que pueda usarse para juegos basados ​​en la web, pero imagino que la mayoría se puede aplicar en general.

¡Gracias!


Algunos creen que los juegos en la nube generalizados están a la vuelta de la esquina. De alguna manera resuelve esta pregunta por completo.
Laurent Couvidou

Respuestas:


13

Ese es un problema interesante, pero creo que estás haciendo la pregunta incorrecta aquí. Permítanme comenzar por detectar el enfoque de cliente pirateado:

Si su cliente es ejecutado del lado del usuario, puede hacer lo que quiera con su código (hasta que sea demasiado complicado para él, pero siempre habrá alguien más listo en la línea). Todo lo que pueda hacer, como cifrar los mensajes entre el cliente y el servidor, crear certificados de cliente o incluso hacer que el cliente calcule su suma de verificación, puede descomponerse y descifrarse con suficiente tiempo. He visto un software que viene con un dongle, este dongle tenía parte del código de la aplicación, pero para poder ejecutarlo, dongle primero verificó el crc de la aplicación si no estaba templado ... por supuesto, después de algún tiempo el dongle fue pirateado también ... además, si realiza una actualización de software, debe volver a enviar el dongle ...

Además de eso, el usuario puede usar su propio cliente para hacer trampa, simulando el movimiento del mouse y los clics, por ejemplo.

Entonces la pregunta debería ser: ¿cómo detectar un jugador bot?

Aquí tiene algunas opciones: medir el tiempo entre clics, medir la velocidad de los movimientos del mouse: ¿se mueve el mouse exactamente del punto A al punto B varias veces y golpea exactamente las mismas coordenadas? ¿El movimiento del usuario es repetible? Si cuando el recurso que el usuario estaba reuniendo se agotó, ¿el usuario pasa a otra acción o espera en el lugar durante horas? Al final del día, terminas escribiendo códigos de reconocimiento de patrones.


44
Sus técnicas de verificación de bot pueden superarse en minutos agregando algunos ruidos alrededor de la acción del bot.
AsTeR

+1 a esto; dado que la prevención es imposible (y si alguien está realmente decidido, incluso podría ir tan lejos como para hackear sus controladores, lo que debería subrayar ese hecho) su enfoque definitivamente debería estar en la detección. También agregaría que cualquier comunidad razonable que pueda desarrollarse en torno a un juego probablemente terminará vigilando a sí misma, por lo que también puede trabajar para proporcionar herramientas que ayuden en eso.
Maximus Minimus

2
La prevención programática por sí sola es imposible, por eso los juegos como WoW tienen toneladas de administradores que controlan a las personas que hacen cosas repetitivas y les hacen preguntas para demostrar que son humanos.
DampeS8N

1
@AsTeR Estas fueron solo algunas ideas para impulsar en la dirección correcta. Existen numerosos artículos y presentaciones que abordan este problema más profundamente, como este, por ejemplo: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil

55
"Entonces la pregunta debería ser: ¿cómo detectar un jugador bot?" No estoy de acuerdo, hay varias formas de hacer trampa sin tener un bot. Por ejemplo, dejar que el cliente obtenga demasiada información o confiar en el cliente.
Matsemann el

9

En los juegos de red multijugador, ¿qué técnicas existen para tratar de garantizar que los usuarios se conecten con la aplicación cliente oficial y no con alguna aplicación hackeada?

No creo que esta sea la forma correcta de abordar esto o al menos no lo único que debería preocuparte.

  1. Asegúrese de enviar solo información específica del cliente a cada cliente (por ejemplo, un cliente no necesita saber qué puede arrojar un monstruo, por ejemplo, simplemente envíe la información después de matarla y solo a los clientes especificados)

  2. Realice la mayoría de los cálculos en el lado del servidor (posicionamiento, etc.). El cliente está haciendo sus propios cálculos, PERO nunca puede enviar sus propios valores solo sus acciones. El servidor tiene que verificar si esta acción es válida y cómo afectará el juego.

  3. 1 y 2 generalmente se combinan con predicciones. El cliente y el servidor intentan predecir ciertos comportamientos. El cliente, por ejemplo, mueve al jugador pero cada x segundos o ms. recibe una corrección por parte del servidor

  4. Cobrar a los usuarios por sus cuentas, no por el cliente, de esta manera un usuario puede obtener una versión descifrada pero no puede jugar sin una cuenta.

Con 2 puedes asegurarte de que no haya hacks de dinero, hacks de posición o hacks de pared, etc. pero los bots siempre han sido un problema para muchas empresas. Incluso los nombres de grandes empresas como ventisca tienen problemas con eso. Lo que podría hacer es limitar el tiempo de reproducción por cuenta, de modo que alguien no pueda estar en línea durante más de 540 horas por mes. Recuerdo un bot que usaba valores de color de monstruos + entrada de mouse para cultivar XP. Otra forma sería proporcionar un programa adicional que verifique otras aplicaciones en ejecución y acceso a la memoria, pero esto trae algunos problemas nuevos.

Editar:

Artículos muy bien escritos para principiantes: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


Sí, estoy de acuerdo en que no es lo único que debería preocuparnos. Ya estamos haciendo la mayoría de estas cosas, pero algunos elementos expuestos en el lado del cliente son inevitables.
UpTheCreek

@UpTheCreek ¿Podría decirnos qué es lo que más le preocupa? Bots, alteración de datos, qué tipo de información se envía al cliente o desde el cliente que debe protegerse. Como ya se ha dado cuenta de que hacer que un cliente sea seguro contra el crack no es una tarea fácil, pero tal vez podamos ayudarlo un poco mejor yendo a las raíces de sus preocupaciones.

Bueno, para nosotros se trata de equilibrar las verificaciones / simulaciones del lado del servidor con los costos del servidor. No podemos incluir todo lo que nos gustaría. He pensado mucho en esto, pero quería ver si había algún truco ingenioso para proteger mejor al cliente :) El cliente está basado en javascript, por lo que puedes imaginar que es aún más fácil de piratear para los usuarios !
UpTheCreek

4

No existe una manera infalible de garantizar que el "cliente oficial" se esté ejecutando; cualquier mecanismo de este tipo dependerá de que el código de validación comunique algún tipo de "secreto" al servidor, que puede ser modificado mediante ingeniería inversa, con tiempo suficiente. Esto es básicamente lo que sucede cuando un software anti-piratería le dice al servidor que el cliente está bien.

Editar: para elaborar un poco sobre lo anterior, considere el código que valida el lado del cliente. Tiene dos tareas muy difíciles: comprobar que se está utilizando el código original (y no hay nada más que pueda interferir dinámicamente con el código original / en tiempo de ejecución (!)), Y comunicar este resultado al servidor, de tal manera que esta comunicación no puede ser falsificada Mientras que la primera parte es increíblemente difícil, la segunda parte es completamente imposible.

Si puede actualizar tanto el cliente como el servidor de forma regular, puede cambiar el secreto de forma regular, con la esperanza de dificultar el mantenimiento de los crackers. Sin embargo, con toda probabilidad, a menos que esté cambiando la forma en que se codifica / implementa el secreto, se puede descifrar muy rápidamente nuevamente. Básicamente, es una carrera armamentista entre usted y quien quiera resolverlo: quién tiene más tiempo y dinero para resolver el problema.

Habiendo aceptado esa parte, ¿hay algo más que podamos hacer? En un mundo perfecto, con un poder de cómputo y un ancho de banda infinitos, simplemente puede transferir continuamente el estado entre el cliente y el servidor, y hacer que el servidor ejecute una simulación perfecta de lo que está sucediendo en el cliente. Este modelo podría usarse para validar las acciones que el cliente afirma estar realizando. Esto no detectará si un humano o un bot está jugando, pero podrá validar si el cliente está reclamando un disparo a través de una pared o alguna otra acción inconcebible.

Tener suficientes datos en el servidor también es un primer paso para detectar comportamientos irregulares, tal vez apuntar demasiado rápido para los humanos, etc. Obviamente, la situación de simulación perfecta generalmente no es factible, pero se puede usar algún tipo de modelo estimado a escala reducida. muchas situaciones


+1. Vine aquí para mencionar la idea de cambiar el secreto con frecuencia, lo que significa que los hackers tendrían que repetir su trabajo. Los secretos complejos lo harían aún mejor, por ejemplo. uno que cambia según lo que envía el servidor.
Kylotan el

4

No especificas el tipo de juego, por lo que me inclinaré mucho hacia los juegos RPG / MMO. Pero mucho de esto puede aplicarse a los juegos de FPS, Estrategia y Acción. La forma en que las grandes compañías de juegos multijugador como Blizzard tratan este problema en sus juegos es:

  1. Haga todos los cálculos y las acciones del juego del lado del servidor, el cliente es solo una terminal tonta y un motor gráfico. Entonces, si los jugadores usan un cliente diferente, realmente no importa en términos del juego, no pueden engañar a la física del juego.
  2. Busca programas / clientes de bot obvios buscando acciones obvias de la computadora como la repetición perfecta de eventos de clic y movimientos del mouse.
  3. Comprueba si hay programas / clientes de bot no obvios y alerta a los moderadores del juego sobre el problema.

Luego aparecen en el juego (si es posible, para los mismos juegos como Starcraft 2 no lo es) o de lo contrario miran / hablan con el jugador sobre sus acciones como un "control humano". O al menos así es como debe manejarse. Blizzard es bastante bueno en esto, pero históricamente otras compañías de MMO no lo han sido.

Buscar bots no obvios no es fácil, pero algunas reglas básicas a seguir incluyen

  • Buscando jugadores que, con solo una ligera variación, estén realizando las mismas acciones una y otra vez. Esto podría estar sentado en un nodo de recursos en un MMO y cultivarlo cuando reaparece, o podría estar corriendo en círculos entre los paquetes de salud / munición en un FPS y nunca desviarse de una ruta específica y siempre usando la misma arma. (Los bots subóptimos en los FPS son raros, pero si su juego tiene una escalera para subir donde el número de juegos es más importante que el talento del jugador como algunos FPS modernos, los bots vuelven a ser valiosos)
  • Buscando jugadores que ejecutan la misma carrera o estrategia exacta una y otra vez en un RTS. Hay ciertas órdenes de construcción en Starcraft que pueden ser casi imbatibles cuando las realiza un bot.
  • Buscando jugadores que hayan reunido grandes sumas de recursos y ahora estén trabajando sin parar en un elemento. Este fue un gran problema en Ultima Online.

El problema es que cuanto más popular sea tu juego, y cuanto más fructíferos puedan ser los bots para reducir el tedio en tu juego, más probable será que las personas usen y creen estos bots. Y es trivial restringir la velocidad de movimiento del mouse, agregar variaciones humanísticas aleatorias a los clics, incluso hacer que el bot cometa errores a un ritmo humano, abriendo y cerrando partes del menú, presionando el botón incorrecto y luego cerrando la ventana, cambiando entre el teclado y El ratón funciona como los humanos para reducir la fatiga de las manos. (Ni siquiera te das cuenta de que lo haces)

Entonces, el último paso cuando alguien o un bot está haciendo algo repetitivo durante mucho tiempo realmente tiene que ser un mod humano que se acerque al jugador y le hable. Si están allí y responden con respuestas humanas, son humanos. Por lo general, los mods le pedirán al jugador que se detenga por un tiempo, o los siga a alguna parte y realice otras acciones, los aros se vuelven más complejos con el tiempo.

Tanget

Por supuesto, eventualmente alguien creará un bot que no se puede distinguir de una persona real, pasando la prueba de Turing. Y hay muchos escritores de bots por ahí que pretenden hacer precisamente eso.

Yo mismo tenía una fascinación pasajera con la idea cuando comencé a programar y creé bots inútiles para Ultima Online que se pararía en la ciudad e imitaría a los NPC. Los comandos eran súper simples, por lo que eran fáciles de hacer, solo presionando las teclas para avanzar en diferentes direcciones, y mirando el registro del chat por su propio nombre y enviando los mensajes a ALICE a través de una versión web de la IA. No recuerdo cuál y probablemente ya no exista.

/Tangente

El punto es que debes decidir dónde dibujar la línea. Si no puede permitirse el lujo de un ejército de moderadores para hablar con las personas que su sistema identifica como bots, probablemente sea mejor dejar que la comunidad marque a las personas como bots, y luego, cuando sea suficiente, patear al jugador durante aproximadamente una hora. No prohibir, solo patear. El verdadero problema para la mayoría de los jugadores es que los bots acaparan recursos que otros jugadores humanos podrían estar usando. Si las turbas son escasas, como era el problema con Ragnarok Online, entonces los bots que deambulan y limpian áreas enteras de enemigos mientras recogen objetos (o no) son comunes, y arruinan el juego para otras personas. Para que pueda evitar el costo de los ejércitos administrativos de esa manera.

Finalmente, también puedes vivir con bots como una realidad de tu espacio de juego y fomentar su uso. Esto requiere diseñar su juego alrededor del uso eventual y común de bots, entrenadores y programas de ayuda. Quiero decir que hubo un MMO que hizo esto hace unos 10 años, pero no recuerdo cuál era. Deletreó el final del juego, porque los MMO son muy pesados ​​y significa que el 95% de los jugadores nos alejamos de sus teclados en cualquier momento y destruyeron la comunidad. Si sigues esta ruta, ten cuidado.


3
En su último párrafo, Star Wars Galaxies de SOE fue un ejemplo de un MMO con un lenguaje de scripting / macro bastante robusto en el juego, pero no tenía un gran problema de bot. Lo que terminó sucediendo fue que algunas de las necesidades más tediosas del juego estaban escritas (la mayoría de los puertos estelares tenían una fila de jugadores frente a un bot de curación de sanador totalmente automatizado, por ejemplo), y la molienda de XP de bajo nivel a menudo se hacía de esta manera. también. En mi opinión, todo esto se agregó masivamente al juego, lo que lo mató fueron algunas decisiones increíblemente malas y cambios en el juego, con poca o ninguna advertencia o comunicación.
GAThrawn

3

evite tener características de juego de las que un usuario pueda ganar haciendo tareas repetitivas , especialmente en juegos similares a los del navegador. Las características del juego que causan tareas repetitivas no solo hacen que otros usuarios se enojen porque no tienen tiempo para hacerlas, sino que también hacen que el juego sea mucho más fácil de arrancar (¡y mucho menos divertido!)

Si una característica del juego puede ser arrancable, ¿por qué hay esa característica en el juego de todos modos? Esa característica claramente llama al usuario a construir un bot.

El juego debe jugarse dando al jugador una cantidad razonable de entretenimiento, normalmente mediante un conjunto de opciones no triviales. La capacidad de decidir enfrentar opciones no triviales separa a un humano de un bot. En última instancia, en lugar de buscar bots, busque en su juego dónde se podría implementar un bot, e impleméntelo usted mismo para que todos lo usen. Al hacerlo, ahorras tiempo a un jugador evitando que realice tareas aburridas, mientras luchas contra los bots desde la raíz: si no hay características de juego arrancables, ¿cómo puede haber bots?

Mi conclusión es: diría que hay un umbral en la cantidad mínima de complejidad que un juego necesita para que no se pueda arrancar. Haga que su juego supere ese umbral agregando opciones no triviales que finalmente aumentarán la experiencia del usuario.

De todos modos, tal vez este paradigma ya no se aplique en los días actuales ... pero todavía creo que esto es lo que hace un buen juego.


1
+1 La única forma efectiva contra las trampas es diseñar el juego de manera que las trampas no sean efectivas en primer lugar.
API-Beast el

Mi última oración fue correcta porque me sorprendió que nadie lo hubiera considerado como una posibilidad ...
Jorge Leitao

2

Las respuestas existentes ya son buenas, pero quería señalar que si sus cheques son caros (por ejemplo: ejecutar todo el lado del servidor del juego para asegurarse de que el cliente no esté haciendo trampa), puede elegir hacerlo solo algunos de el tiempo .

Por ejemplo, solo puede verificar acciones en una región en particular o por jugadores particulares (cambiando aleatoriamente después de un tiempo), o simplemente tener una cola de acciones y elegir aleatoriamente cuáles validar (e ignorar a los demás). Tal vez invente una heurística de quién es probable que haga trampa (básicamente busque a las personas que tienen más éxito) y valide sus acciones en el servidor.

Asegúrese de que el servidor no ceda cuando está validando acciones y cuando no lo está. Envíe siempre su respuesta estándar hasta que esté listo para tomar medidas (y no la entregue tardando más en enviar una respuesta cuando esté validando y cuando no lo esté).

De esta manera, puede obtener una protección bastante buena contra las trampas, utilizando solo la potencia del servidor que puede ahorrar (aunque obviamente cuanto más cerca esté de validar cada acción, mejor protección contra las trampas).


1

Bueno, no creo que haya una "solución de Ultiamte". Puede codificar los paquetes de datos y darle algunas reglas al servidor que recibe los paquetes. Por ejemplo, podría establecer que el mayor movimiento realista / permitido es +1 y no como un tramposo / pirata informático que lo establecería en 5 o más para ser más rápido. Solo piensa en lo que podría hacer un hacker para ser mejor que otros jugadores y establece reglas para ello.


0

La forma más simple es, en esencia, hacer del cliente una terminal tonta. Todo se hace en el servidor, y el cliente solo envía comandos al servidor. De esta manera, el servidor tiene el control total de todo.

Sin embargo, este probablemente no sea el caso más adecuado para usted, porque el servidor tiene que realizar más cálculos y la experiencia del usuario será mediocre. Por lo tanto, cuanto más lógica deje al cliente para realizar, mejor será la experiencia del usuario, pero menor será la seguridad. Entonces tendrá que encontrar un punto medio que sea aceptable para usted.

Además, solo envíe al cliente lo que "debería" saber. Por ejemplo, si un jugador enemigo está detrás de un muro, no envíe esa información a un cliente, o un cliente pirateado podrá discernir esta información (lea: wallhack).


-1

EDITAR: no entendí la pregunta. Lo interpreté como "evitar la clave pirateada / pirateada" en lugar de "software pirateado que puede enviar un mensaje para generar mil millones de oro para el jugador".

La mayoría de los juegos en estos días tienen un valor vinculado a una cuenta en una base de datos, ya que todo lo que un cliente puede enviar a un servidor puede modificarse. Este es probablemente el método más simple y efectivo.

Con el predominio de Internet de alta velocidad y transferencia de archivos P2P, las compañías han cambiado de claves de CD que se almacenan localmente en el cliente a claves que están vinculadas a una cuenta en sus servidores. No hay más software de cliente "oficial" o "no oficial" ya que cualquiera puede descargar el cliente. Pero solo puedes jugar si tienes una cuenta con acceso para jugar.

Esto también tiene un beneficio para la empresa, ya que no necesitan gastar tanto en producir copias físicas del software.


Yo no fui el que te rechazó, pero para mí esto realmente no proporciona ninguna protección. Parece que estás hablando de solo permitir que los usuarios autorizados se conecten, eso es fácil de resolver. Pero el problema es que no habría nada que impidiera que alguien con una cuenta válida aplicara ingeniería inversa al mensaje y escribiera mi propio cliente pirateado.
UpTheCreek

-1 esto no responde a la pregunta, tener una cuenta en línea no impide que alguien se conecte con un cliente pirateado que, por ejemplo, automatiza las acciones en el juego. wow está completamente en línea y todavía se piratea constantemente. para evitar esta tormenta de nieve, utiliza su software anticaídas "guardián", que es un ejemplo de cómo abordar el problema en cuestión
Dreta

Arg, tienes razón. No entendí la pregunta.
Orin MacGregor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.