De vez en cuando he estado trabajando en una idea de juego en mi tiempo libre. La jugabilidad y el contenido hacen que se implemente como un juego multijugador en línea creado con tecnologías web bien establecidas. Debes saber que pertenece al género de la estrategia y la simulación. Eso significa: No correr con personajes o similares, sino solo acciones atómicas (con respecto a la comunicación cliente-servidor) como "construir una cosa A en la ubicación X".
En un momento me di cuenta de que hay un gran problema: tener un front-end basado en un navegador que depende de un back-end API REST lo convierte en un objetivo más que excelente para los bots. Si bien la automatización es deseable para los negocios, es un veneno para un juego que se trata de diversión. Lo experimenté de primera mano en un juego de navegador en el pasado donde los jugadores más exitosos eran bots que sometieron a todos.
Desde mi punto de vista actual, no veo ninguna posibilidad de protección contra los bots cuando construyo un juego multijugador en línea basado en una API REST. Excepción: hacer que sea de código abierto para que todos puedan alojar su propia instancia para grupos privados o incluso solo uno mismo (para no molestarse por idiotas con bots).
¿Hay alguna forma de diferenciar entre un jugador honesto que acaba de configurar una alarma para la próxima acción posible y un bot que aprovecha automáticamente cada oportunidad al aparecer? Además de tales tapones de espectáculo como captchas. Si no, pensaría en otra pila de tecnología que hace que sea al menos mucho más difícil meterse con la comunicación cliente-servidor (protocolo binario cifrado patentado en un cliente de código nativo).
Editar : Gracias, sus respuestas son inspiradoras, pero también me hicieron darme cuenta de que no se pueden tomar contramedidas específicas al profundizar en los detalles del juego. Sin embargo, eso sería demasiado para una pregunta en Stack Exchange. Así que solo quiero señalar los puntos más importantes:
- Los jugadores están explorando, desarrollando y gestionando cuando quieran. Sus negocios aún funcionan bien cuando están desconectados (es un juego pacífico, no hay armas involucradas). Solo la expansión y el progreso necesitan la acción de los jugadores. Esas acciones están limitadas por:
- el tiempo es uno de los recursos clave (como en el entrenamiento de habilidades en línea de EVE). Todos los procesos en el juego lo requieren. No tiene sentido estar en línea 24/7. El jugador promedio ya debe tener éxito al pasar no más de una hora todos los días en una o dos sesiones ( aproximadamente , el concepto aún está en desarrollo).
fuente
Respuestas:
Si la gente quiere bot, no creo que realmente puedas detenerlos.
Por supuesto, puede implementar muchas medidas que hagan que el botteo sea más o menos doloroso. Pero solo puede hacer mucho antes de que su base de código se convierta en un desastre gigantesco que es muy difícil de mantener, propenso a errores y molesta a los usuarios legítimos. Mientras tanto, los botters siempre encontrarán una manera de derrotar sus contramedidas:
Básicamente quedarás atrapado en una carrera armamentista con los botters, y según la lógica de los puntos anteriores, así como mi experiencia con tales juegos, no podrás mantenerte al día.
Algunos desarrolladores de juegos emplean medidas anti-trampas extremadamente agresivas: por ejemplo, Steam escaneará la memoria y el sistema de archivos para buscar hacks, y los delincuentes pueden ser castigados perdiendo cuentas por valor de cientos de dólares. Sin embargo, todavía hay bots y otros trucos para los juegos de Steam, y algunos incluso funcionan la mitad del tiempo. A diferencia de ellos, tiene una API abierta para el usuario y no tiene control sobre la computadora del usuario. Es una batalla cuesta arriba desde el principio.
El problema que está tratando de resolver es esencialmente una prueba de Turing: excepto que es una prueba de Turing muy fácil, porque no puede hacer trampa al requerir problemas de IA difíciles como el lenguaje. No importa cuántas heurísticas cree, sería trivial para un botter agregar un poco de aleatoriedad a la acción del bot para que imite casi exactamente a un humano. Ni siquiera sería muy difícil hacer que el bot lo vea jugar un poco y aprender a cronometrar acciones exactamente como usted. Luego, cuando prohibes el bot, el botter publica una gran protesta en el foro sobre cómo es solo un jugador dedicado (y tal vez en realidad es un falso positivo) y tu audiencia principal de jugadores hardcore se levantará en armas contra ti.
Haz que el juego sea demasiado divertido para bot
La razón principal por la que alguien usa un bot es porque hay una parte del juego que quieren omitir. Si disfrutaran el juego y lo encontraran divertido, no tendrían el bot jugando, lo jugarían ellos mismos.
Pero si el juego es tan aburrido, ¿por qué jugarlo? Presumiblemente, algunas partes del juego son aburridas y obligatorias para llegar a partes que son divertidas. Por ejemplo, en los MMO a todos les encanta subir de nivel, pero nadie quiere matar a 42,324 ratas venenosas de muertos vivientes para obtener el XP. Así que dejaron que el bot se muela y caiga para jugar la parte divertida.
Esto no es una crítica de usted o su juego, pero claramente al menos algunos jugadores encuentran tediosas algunas partes de su juego. Debería ver si puede reducir estas partes tediosas y considerar agregar decisiones más difíciles y significativas: los bots no son buenos para la estrategia profunda o el pensamiento lateral en comparación con la inteligencia humana, y además los humanos disfrutan tomando decisiones difíciles del juego.
A partir de su descripción, tengo la impresión de que este es un juego de navegador similar a Travian, donde hay una cola de compilación con un solo mejor orden de compilación y ciertas tareas de "mantenimiento" (como mantener en marcha las redadas agrícolas) que deben realizarse. Dices que no hay conflicto, pero en cualquier drama MMO y las pequeñas políticas son inevitables (IMO es la atracción principal), así que estoy seguro de que tus jugadores encontrarán formas de enfrentarse. Con este tipo de juegos, gran parte del tedio proviene de estas tareas de "mantenimiento": lo que los jugadores realmente quieren hacer es hacer alianzas y jugar el juego de la diplomacia con clanes rivales, el mantenimiento se convierte en una especie de impuesto donde hay que despertarse hasta una alarma en horas impares para poder entrar en esa parte diplomática divertida. Así que corta el tedio:
Este enfoque puede no funcionar siempre, desafortunadamente. No todos los jugadores tienen la misma tolerancia al tedio o el mismo concepto de diversión. Podrías tener una mecánica prominente que el 99% de tus jugadores disfruten, pero el 1% encuentra aburrida. ¿Qué pasa si el 1% comienza a escribir bots, arruinando la diversión para el 99%? Pero en última instancia, es una cuestión de grado. Nunca puedes eliminar los bots por completo, pero puedes minimizar el daño.
Botters socavados
Muchos de los efectos realmente negativos de los bots provienen de los autores que comercializan su trabajo. Si este es el caso para usted, simplemente podría competir con los bots. Muchos juegos en línea basados en tiempo real ya tienen características premium que permiten omitir el tiempo y la automatización (como las colas de compilación extendidas). Estos equivalen a un bot oficial sancionado por el desarrollador. Si tienes estos, y los tasas apropiadamente, los jugadores comprarán tu prima en lugar de comprar bots. La buena noticia es que usted está a cargo de la API, por lo que siempre tiene una gran ventaja en el desarrollo de la automatización de calidad para su propio juego, por lo que esta vez es una batalla perdida para los botters.
Esto no eliminará a los botters aficionados, ni a las personas que sienten que su prima no tiene una buena relación calidad-precio, por lo que nuevamente la efectividad de este enfoque depende de la situación.
Búscalos manualmente
Como dije anteriormente, lo que estás haciendo es esencialmente una prueba de Turing. Dado que la interacción con los humanos es considerada un desafío difícil para la prueba de Turing, puedes intentar aprovecharla.
Inspeccione manualmente los jugadores de nivel superior y vea si encuentra algo sospechoso. Es posible que incluso puedas escapar de vez en cuando sondeándolos de maneras restringidas solo a tu imaginación, para ver si puedes engañar al bot para que haga algo que no haría.
Si bien es difícil escribir un algoritmo que detecte los robots de manera confiable, no es tan difícil para un humano aprender a detectarlos. Creo que muchos juegos de navegador usan esta estrategia, y puede ser bastante efectiva. La desventaja es que o necesitas hacer un trabajo aburrido todo el tiempo, o debes pagar a los maestros del juego para que hagan una patrulla de bot regular.
fuente
La mejor y única defensa efectiva contra los bots es diseñar su juego de manera que los jugadores no sientan la necesidad de automatizar en primer lugar. Cuando sus jugadores automatizan tareas simples que en realidad no requieren habilidad, es una señal de que falta su interfaz de usuario y están sustituyendo una función de IU que les falta.
¿Su juego incluye tareas repetitivas donde el jugador realiza la misma acción una y otra vez para moler?
Haga que estos aspectos de su juego sean menos repetitivos y más interesantes para jugar y volver a jugar.
¿Su juego requiere que los jugadores realicen acciones a veces inconvenientes para ellos, como en medio de la noche o cuando están en el trabajo?
Permítales poner en cola las órdenes (como "compilación X1, luego X2, luego X3, comenzando cada una tan pronto como los recursos estén disponibles") o programar acciones en momentos específicos por adelantado (compilación X a las 3:22 AM).
¿Su juego requiere que los jugadores actúen en eventos en un período de tiempo muy corto?
Permítales configurar el juego de manera que estas acciones se activen automáticamente
Monitoree su comunidad. Cuando notes que automatizan cualquier otra cosa, roba la idea y agrega la opción para automatizarla en el juego principal.
fuente
No hagas que tu juego sea tan vulnerable al esfuerzo de Johnny en el lugar
Primero, asegúrese de que los jugadores que solo juegan su juego durante veinte minutos o una hora al día en una sola sesión no estén en una gran desventaja para los jugadores que lo dejan abierto en el trabajo y juegan 16 horas al día.
Esto puede requerir un cambio en la mecánica de su juego, por ejemplo, una asignación de movimiento que se llena cuando no está jugando y permite a los jugadores ejecutar muchos movimientos rápidos cuando pueden jugar, en lugar de un mecanismo que requiere una tendencia constante.
Esto desincentivará a los fabricantes de bot porque pueden mantenerse al día con el juego y no tienen la necesidad apremiante de hacer un autómata que realice acciones para ellos.
Requerir información del servidor para cada acción y hacer que las respuestas del servidor sean más lentas
Cuando un jugador juega el juego, solicita una página que le presente la interfaz de usuario con la que interactúa para hacer su movimiento. Puede insertar elementos, como elementos de formulario invisibles, que verifiquen que realmente solicitaron primero la página. Un número aleatorio que su servidor almacena junto con la identificación del usuario y qué página solicitó por última vez. Cuando entra una acción, el servidor verifica que este usuario ha devuelto el mismo número aleatorio y está realizando una acción en la página en la que se vio por última vez. Esto no solo significa que el bot tiene que hacer dos llamadas a la API para cada acción, sino que los usuarios habituales no pueden abrir varias páginas y ejecutar acciones rápidas secuenciales (si esto es un problema con su diseño).
Las dos llamadas a la API te brindan una forma de ralentizar los bots más adelante. Eventualmente verá patrones sospechosos y podrá detectarlos. Cuando su servidor detecta un patrón sospechoso, puede retrasar la respuesta de la API en la primera llamada por un segundo, lo que molestará a los usuarios, pero realmente ralentizará los bots. Además, si la segunda solicitud vuelve "demasiado rápido" (lo que sea que eso signifique para su juego), puede rechazarla o volver a cargar la página con algún error en el juego o razón para solicitar una nueva presentación. "No puedes construir tan rápido. Tómate tu tiempo". por ejemplo.
Escuche a sus usuarios y encontrará con qué están bien y qué les molesta.
Hacer que los movimientos y acciones requieran pensamiento
SI el juego es un simple clicker de botón, entonces no puedes hacer mucho con los bots. Considere rediseñar su juego para que el juego mismo realice una prueba de tipo captcha.
Sin saber nada sobre el juego, no puedo sugerir mucho. Si se trata de elegir dónde colocar un edificio, diseñe la interfaz para que el usuario pueda elegir en cualquier lugar, aunque haya ubicaciones obvias que no funcionarían. O tal vez el usuario tiene que hacer coincidir la orientación correctamente para que la ubicación sea exitosa. Si implica elegir una acción, incluya una lista más larga de acciones, algunas de las cuales no tendrían sentido en una situación dada.
Incluye verificaciones de bot muy simples al azar
Agregue un diálogo ocasional, "¿Está seguro?" por ejemplo. Cambie la pregunta y la redacción con frecuencia y úsela como un punto de verificación para bots.
Cambiar la API
Cambie la API con frecuencia, obligándolos a analizar realmente la página web para las variables correctas y cómo se devuelven al servidor web. Si desarrolla su interfaz usando una plantilla, reemplace la plantilla con un código que use un hash salado o un generador de variables aleatorias para cada nombre de variable. Luego comience a usar JavaScript para codificar las respuestas y cambie esa codificación con frecuencia. Probablemente pueda escribir software que haga todo esto por usted, y tener todo al azar todo el tiempo, o simplemente hacer una plantilla estática que cambie ocasionalmente.
fuente
No puedes detenerlos. Pero puedes hacer que sus vidas sean miserables, ya que tienen que pasar mucho tiempo escribiendo sus bots y actualizándolos. Debe usar lo que sea para verificar si el usuario es válido.
fuente
En general, distinguir entre bots y humanos de forma totalmente automática es difícil, alguna forma de proceso de decisión asistida por humanos funciona mejor.
Lo que haría: definir algunas heurísticas que insinúan que el usuario es probablemente un bot: realizar muchas acciones, hacer cosas las 24 horas del día, los 7 días de la semana, ... Luego, si estas heurísticas superan un cierto umbral, realice una verificación invasiva.
Puede escanear manualmente la actividad de los jugadores y ver si parece estar bien. O haces un captcha la próxima vez que el usuario esté en línea. O (aún más fuerte) simplemente envíele un mensaje de chat donde explique que sospecha que es un bot y quiere que responda con algo parecido a un humano para demostrar que no es un bot (¿cómo estuvo su día? ¿Cuál es su película favorita? ... - puedes tener un montón de esos). Si no responde, es probable que sea un bot. Si él responde, usted verifica manualmente las respuestas para la apariencia humana y prohibe los robots. Si sus heurísticas son razonables, solo se interrogará a una pequeña minoría de usuarios y la cantidad de respuestas a la exploración será pequeña. Y si mantiene el conjunto de preguntas privadas y cambiantes, no hay forma de que los robots puedan estar preparados, a menos que alguien invente SkyNet.
fuente
Abraza el botter. Has creado una API tranquila, perfecta para que un codificador experimente con la automatización de tu juego. Diseñe su juego para que el bot no obtenga una ventaja sobre un jugador humano debido a que está automatizado: elimine las ventajas de la velocidad de ejecución, etc. que tiene una máquina; diseñe su juego para que el bot proporcione los mismos ingresos que un jugador humano, si es posible, o al menos proporciona un entorno más rico para atraer a más jugadores humanos.
La pregunta es, ¿por qué las personas crean bots para tu juego y pagarán dinero por el privilegio?
fuente
No estoy en desacuerdo con las respuestas neccessarily ciencias blandas, pero no son cosas técnicas que se pueden hacer para detectar botters y algunas cosas que simplemente hacer la vida más difícil para ellos.
Califique las cuentas según cuánto sospeche que están usando un bot. Esto alimentará varias otras técnicas y protegerá a los usuarios legítimos de su ira.
Rotación de la clave de cookie de sesión. Esto garantiza que el bot conserva sus cookies, pero también hace que sea mucho más difícil para un botter compartir cookies entre el navegador y el bot (lo cual es realmente útil durante el desarrollo y las pruebas).
Limite la velocidad de ciertas acciones. Trabaje lo más rápido que pueda hacer algo y controle la rapidez con que lo hacen estos bots. También podría valer la pena mantener un registro en ejecución y resolver las desviaciones estándar. Incluso si alguien solo hace algo cada 10 segundos, si lo hace exactamente cada 10 segundos, probablemente sea un bot. Modifique su calificación y cierre la sesión.
Haga que el inicio de sesión sea más difícil en cuentas que sospecha que podrían ser un bot. Los CAPTCHA y las preguntas y otras cosas inevitables hacen que las cosas sean mucho más difíciles para que un aspirante a botter escriba las cosas automáticamente.
Monitorear el movimiento del mouse / página. Esto es bastante simple con JavaScript en estos días, pero los bots orgánicamente no tendrán ningún movimiento del mouse. Si no obtiene ninguno entre "clics", podrían ser móviles o podrían ser un bot. Investigar. Sin embargo, hay muchos datos para registrar ... Por lo tanto, es posible que desee reservar esto para cuentas que ya han activado los pasos anteriores.
Cree herramientas para vincular cuentas por comportamiento, IP, secuencias de acción, cadencia de acción. Si va a prohibir a las personas, asegúrese de tener las herramientas para verificar manualmente sus irregularidades.
Gire el esquema de URL, las variables CSRF, etc. y hágalo a menudo. Es un gran paso y probablemente requiera más trabajo inicial de lo que valdrá la pena, pero al menos, cualquier cuenta que de repente simplemente deje de funcionar (o siga martillando las URL antiguas y enviando los nombres de las variables antiguas, ¡regístrelo!) necesitan que su nivel de índice de bot aumente.
fuente
¿Has considerado hacer de los bots una parte integral del juego? Es difícil para los bots arruinar el juego para todos los demás si se anima a todos a crearlos. Agregue soporte para secuencias de comandos y, de repente, la dinámica del juego cambia de estrategias de gestión de recursos manuales a estrategias de diseño de bot.
fuente
Cree un servidor separado solo para bot. Crea una tabla de clasificación y celebra a los ganadores. Mira los datos que esto genera. Prohibir a los usuarios de servidores normales cuyo perfil de comportamiento se parece al de un bot.
fuente
Hagas lo que hagas, recuerda NO hacerlo más molesto para el jugador real. Muchas de las respuestas que he visto (resultados de página más lentos, que no permiten abrir varias páginas para facilitar una entrada más rápida, etc.) también evitarían que los jugadores legítimos hagan las cosas rápidamente, lo que simplemente los frustrará innecesariamente.
En mi opinión, el enfoque más fácil puede ser aplicar ingeniería social al problema: 1) agregue una cláusula explícita NO-BOT a sus TOS, y agregue que detectar la actividad del bot eliminará al jugador de la lista de puntaje alto (o tenga la etiqueta "tramposo" "adjunto, para que la gente no se sienta tan frustrada con ellos; si sigues esa ruta, permite que las personas oculten registros de tramposos".
2) verifique el comportamiento similar a un bot (por ejemplo, pings programados regularmente en el servidor o un tiempo casi perfecto durante muchas horas seguidas), y si es así, ponga la cuenta en "modo bot" - muestre captchas ocasionales y otras cosas . Si se ignoran, pero el jugador sigue jugando activamente, marque al jugador como "bot" y excluirlo de la clasificación. si están dirigidos, márquelo como "jugador poderoso" y retírelo de la lista de bots.
De esta manera, la gran mayoría de los jugadores nunca se ven afectados, los jugadores hardcore se ven afectados por una corta duración y los bots no "arruinan el juego" para nadie más.
fuente