¿Cómo detectar y prevenir el abuso (botting) de la API de juegos en línea?

50

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).
Peter
fuente
99
¿No puedes hacer que el juego sea tal que otros que programen o compren bots no arruinen la diversión de los jugadores humanos? Y segundo, programar un bot / IA para jugar un juego puede ser divertido por sí mismo; Sin embargo, no debería arruinar la diversión de los demás.
Kasper van den Berg
27
"La automatización [...] es veneno para un juego que se trata de diversión". Muy en desacuerdo. Si su juego es realmente divertido, ¿por qué penalizar a los jugadores por saltear partes donde no las tienen? Si los elementos de tu juego son tan tediosos que los jugadores prefieren no jugar y sienten el deseo de que se haga cargo de un guión, ese es el verdadero problema a resolver.
Marca Thomas el
66
Tu ejemplo tiene una respuesta fácil: dale al jugador las herramientas para que no necesite un bot. por ejemplo, permítales poner en cola una acción, en lugar de alentarlos a estar en línea en un momento preciso u obtener / hacer una herramienta para hacerlo por ellos.
44
La razón principal por la que las personas usan bots es porque partes del juego son tediosas y aburridas para ellos (si fueran divertidos, simplemente los jugarían). Claramente, tus jugadores disfrutan de la competencia y el desafío, pero no del juego automatizable. Podrías intentar cambiar el diseño del juego para eliminar las partes que las personas usan bots para superar, o reequilibrar tu juego para crear decisiones más difíciles y significativas que solo un jugador humano puede tomar, y un bot no puede (como opciones estratégicas profundas) . De lo contrario, estarás condenado a una carrera armamentista y los botters ganarán.
Excelente
66
tl; dr: A la gente no le va a gustar competir contra el tipo con una alarma y no trabajar más que contra el tipo con un bot, y eso es lo que los llevará a ejecutar bots.
Random832

Respuestas:

51

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:

  • Hay más de ellos que tú
  • Tienen más tiempo libre en sus manos (debe dividir el tiempo entre el desarrollo real y la prueba de bot, pueden piratear su código de bot todo el día)
  • A medida que crea salvaguardas extravagantes y desafiantes, los autores de bot se verán más alentados porque es divertido romper su protección de bot
  • Si hay un mercado negro de personas que se benefician comercialmente de los bots, cuanto más difícil sea escribir un bot, más valiosos serán los bots de trabajo, por lo que incentivará el botting

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.

Superbest
fuente
44
Seleccioné esta respuesta porque me parece la más pensada al mirar la pregunta un paso atrás, lejos de los detalles técnicos. Estuve pensando durante mucho tiempo en seleccionar a Adam Davis porque contiene algunas ideas muy buenas sobre "cómo".
Peter
1
@Alomvar Me alegro de que haya sido útil. Dado que la pregunta obtuvo tantos votos, también podrías poner un enlace a tu juego en tu perfil :)
Excelente el
2
Ugh, ¿todavía está Travian? Jugué eso hace muchos años, luego me detuve cuando me di cuenta de que la jugabilidad podría reducirse básicamente a "que gane el mejor sociópata".
Mason Wheeler
25

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

    • cuando el edificio X se destruye, reconstruirlo de inmediato.
    • Cuando alguien ofrece el recurso X por menos de dinero Y, compre inmediatamente hasta Z unidades.
    • Vende automáticamente todo el recurso X cuando el stock excede las unidades Y, pero no por menos de Z dinero por unidad.

Monitoree su comunidad. Cuando notes que automatizan cualquier otra cosa, roba la idea y agrega la opción para automatizarla en el juego principal.

Philipp
fuente
55
Esta es una gran sugerencia que también mejora su juego y reduce el riesgo de que su juego haga que sus jugadores se vuelvan más parecidos a los bot. ;-) Si ser un bot hace un gran jugador de tu juego, tal vez el juego debería involucrar más pensamiento humano. No estoy de acuerdo con que sea la única defensa efectiva, pero sí estoy de acuerdo con que es la mejor en general. +1
Dronz
77
Si bien estoy de acuerdo con el espíritu de esto, desafortunadamente la premisa de que puedes hacer que el juego no sea tedioso es una falacia. ¿Qué pasa si hay 10,000 de tus jugadores que aman la mecánica X, pero a 10 les resulta tedioso y escriben bots, arruinando la diversión de los 10,000? Esto es lo que sucede con los aimbots en los FPS: la solución análoga sería hacer que la puntería sea menos importante, pero a muchos jugadores les encanta perfeccionar sus habilidades de puntería. Son solo unos pocos los que sienten la necesidad de aimbot.
Excelente
1
Me encanta su sugerencia, me gustaría que más juegos woukd hacer algo como esto en vez de pedir que estar alrededor de 24/7 para ser eficiente
meneldal
@Superbest, de hecho, puedo ver una solución en la que podrías diseñar con el objetivo de ser más importante pero aún así difícil para que el botting sea efectivo, por ejemplo, si diseñaste armas para tener una velocidad de disparo lenta y un objetivo preciso más útil, entonces los jugadores podrían agruparse en un molesto ya que no puede disparar suficientes balas para cada jugador que lo ataca
Matthew Pigram
2
¡Este es exactamente el punto! Si hay un boton fácil y efectivo de un solo clic en el momento X bot posible para tu juego, ¡escríbelo tú mismo y dáselo a todos! - Deje que un jugador decida de antemano, qué se debe construir una vez que el tiempo esté listo ... ¡La diversión en los juegos se trata de decisiones!
Falco
23

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.

Adam Davis
fuente
Si su juego de navegador, API cambia y todo eso no importará. A menos que también esté dispuesto a cambiar todo el texto en el cliente (eso sería horrible para los jugadores. La interfaz de usuario cambia todo el tiempo ... ugh ...) y si los textos no cambian, entonces es muy trivial encontrar el texto. Incluso con solo jQuery. Cuando jugué a Travian y estaba a punto de atacar, abrí una gran cantidad de pestañas, preparé toda la información y, cuando se acabó el tiempo, recorrí todo haciendo clic en Enviar. No estoy molestando, solo rápido, pero tus retrasos en la API me habrían golpeado mucho.
Katu
1
@Katu Dependiendo del juego, muchos de los elementos de la interfaz de usuario pueden ser imágenes. Cambiar los nombres de las imágenes, alterar ligeramente los valores hash del archivo de imagen, etc., lo hará más difícil. Como mínimo, los está obligando a descargar cada elemento solo para descubrir con qué lidiar. Pueden usar JavaScript para encontrar qué elemento está en la parte superior de una ubicación determinada en la pantalla, y luego intentar activarlo, pero incluso así puede hacerlo más difícil si el cliente de JavaScript informa las ubicaciones de los clics del mouse en lugar de los clics de los elementos.
Adam Davis
@Katu En última instancia, tiene razón, puede solucionarse, pero si realiza el esfuerzo lo suficientemente grande, reducirá la cantidad de personas dispuestas a realizar el esfuerzo, lo que puede ser suficiente.
Adam Davis
2
El problema con la "asignación de movimientos" es que les está diciendo a todos sus jugadores que solo pueden jugar durante 30 minutos al día o el tiempo que tarden en usarlo, lo que los molesta, limita sus ingresos publicitarios y crea una tentación masiva para que puedan comprar más a través de microtransacciones.
Random832
Estoy de acuerdo con la ubicación y orientación del edificio. Eso es al mismo tiempo un plus para usuarios legítimos y un negativo para bots.
miva2
13

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.

  • Verifique los encabezados de solicitud y rechace las solicitudes con valores no válidos. Establezca el encabezado personalizado o compruebe si existe como agente de usuario. Claro que es fácil de superar, pero es aún más fácil de verificar. Si el redactor de bot no tiene experiencia, ¡podría llevarle un tiempo pensarlo! Su tarea es obligar a tantos de ellos a rendirse, ¿verdad?
  • Probablemente tenga algún tipo de firma hash o algo en sus solicitudes, que se genera en el lado del cliente con alguna función. Bueno, entonces sigue cambiando! Conviértalo en un script separado que no se pueda almacenar en caché y cámbielo a intervalos aleatorios. Haga algunos de ellos o edítelos sobre la marcha, agregando sal aleatoria al proceso de hash. Si bien es nuevamente fácil de superar, esto los obligará a vigilar su función. También podrían necesitar algún tipo de canalización de implementación constante para mantener actualizados a los usuarios. De lo contrario, sus bots comenzarán a enviar solicitudes hash incorrectamente. Incluso puede prohibir a los usuarios que lo hacen con demasiada frecuencia. Los usuarios válidos se moverán alrededor de su cliente de todos modos, por lo que volverán a buscar la función de hash de vez en cuando. Solo recuerde actualizar el lado del servidor también (el backend basado en script realmente ayudará aquí).
  • Realice un seguimiento de la eficiencia del uso de los recursos. Si se gastan al instante, después de que algo se vuelve asequible, o si siempre se envían nuevas redadas dentro de 1-2 segundos desde la última, 24/7, entonces se trata de un jugador hardcore o un bot. Solicitas captcha a esa persona y lo obligas a cerrar sesión. Si sigue haciendo solicitudes después de haber sido desconectado (¡bots mal escritos!), Entonces es un bot. Si intenta iniciar sesión varias veces sin éxito, entonces probablemente sea un bot. Si le toma algunas horas volver a iniciar sesión, entonces podría ser un bot (el bot podría solicitar asistencia humana en este momento y el propietario podría estar durmiendo).
  • IP. Este podría eliminar la venta de bots. Si alguien escribe un bot con $$$ en mente, es posible que no quiera compartir la fuente. Venderán tiempo de bot en su lugar. Si son codiciosos, podrían usar una sola máquina, con solo / pocos ips. Eso significa que muchos usuarios comenzarán a compartir IP. Esto es arriesgado, porque el mismo caso es para las personas que comparten una red. Tendrá que verificar si alguna de las verificaciones anteriores fue exitosa en cierta IP y decidir manualmente si es un grupo de usuarios legítimo o un ejército de bots.
Polan
fuente
55
Si bien estas ideas son ingeniosas, no solo son fáciles de derrotar, sino que estaría tentado a escribir un bot simplemente porque parece muy divertido derrotarlas, incluso si no me importara mucho hacerlo bien en el juego.
Excelente
1
La mayoría de los puntos son inútiles. Estás pensando al revés. No importa lo que haga con todos los hashes, encabezados, etc., el "enlace para comprar una actualización para mi taberna" tiene que funcionar, ¿verdad? Ahora, creo un bot, que encuentra ese enlace, cada 2 horas hace clic en eso. No me importa qué magia hagas detrás de eso, pero mi bot hace clic como lo haría el usuario. El uso de recursos es bueno, pero puede generar muchos falsos positivos, que requieren trabajo humano. IP .. Por ejemplo, travian bots (no gratuito) es un navegador web personalizado, que envía todo desde su ip.
Katu
@ Superbest sí, es fácil superar esta seguridad una vez. Pero si cambia un poco, tendrá que realizar un seguimiento de esos cambios y actualizar su bot. Eso significa pasar más tiempo escribiendo un bot para pasar menos tiempo jugando :). Inútil.
Polan
@Katu tienes razón, mis métodos no detendrán el bot que es un complemento para un navegador y solo está haciendo clic en el cliente. Pero cualquier cosa afuera, podría tener problemas. Solo encontrar un enlace y volver a atacar no funcionará, porque el hash puede requerir una marca de tiempo y conocer una clave semisecreta. La función de cambio cambiará de vez en cuando, por lo que si no tiene un intérprete de JavaScript, tendrá que volver a escribir su bot todo el tiempo para incluir esos cambios. Esos métodos no impedirán que las personas escriban un bot. Solo requerirá un mantenimiento constante, por lo que no ahorrará tanto tiempo al usar un bot :).
Polan
2
@Polan No hay problema si escribir el bot es más divertido que jugar en primer lugar.
Superbest
8

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.

Martin Modrák
fuente
8
Cuando Skynet se hizo consciente de sí misma, todos habían asumido que trataría de hacerse cargo de las fuerzas militares del mundo. Poco sabían que su único objetivo era dominar la economía de su MMO favorito. Así se evitaron las grandes guerras entre humanos y IA, al dirigir sus ambiciones agresivas a un lugar donde se podía hacer un daño limitado.
Dan Bryant
1
El problema con los mensajes es que un botter podría iniciar sesión fácilmente para jugar todos los días y ejecutar el bot en la misma cuenta para ocuparse del trabajo ocupado. El bot ignoraría el mensaje, el humano respondería a la mañana siguiente, y es difícil castigar a un jugador por responder unas horas demasiado tarde a un mensaje enviado en medio de la noche.
Superbest
@Superbest Si el bot sigue intentando jugar mientras el humano duerme, tienes una muy buena indicación de que es un bot. El problema con hacer preguntas es ¿qué pasa si el jugador no habla inglés?
Loren Pechtel
@LorenPechtel Bueno, ¿cómo vas a saber cuándo están durmiendo? Hay muchas personas con horarios de sueño muy inusuales. El hecho de que no respondieron no significa que era un bot, tal vez simplemente no tenían ganas de responder y decidieron hacerlo más tarde. En cuanto al idioma, presumiblemente el jugador habla el idioma en el que se encuentra el juego, de lo contrario, ¿cómo aceptarían las reglas o ToS? No es que sea difícil distinguir a un bot de un extranjero en una conversación.
Superbest
@Superbest Mi impresión fue que el juego no continuaría mientras la pregunta permaneciera sin respuesta. Si siguen enviando comandos inútiles, es bastante evidente que lo está haciendo un bot.
Loren Pechtel
8

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?

MatthewToday
fuente
4

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.

Oli
fuente
3

¿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.

Kenneth Cochran
fuente
3

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.

conjeturas
fuente
2

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.

TI Troll
fuente
¿Qué pasa si un jugador poderoso decide bot? No creo que 'marcar' al jugador como algo tenga mucho sentido, es muy explotable. Solo juegue mucho durante unos días y luego, una vez que obtenga la bandera, encienda el bot y nunca sea atrapado
Dan Pantry