security artificial-intelligence poker

security - Derrotando un Poker Bot



artificial-intelligence (12)

Hay un nuevo bot de póquer de código abierto llamado PokerPirate . Me interesan las formas creativas en que una aplicación web pueda detectar / frustrar / derrotar a un robot de póker. (Esta es una discusión puramente académica, en el mismo espíritu con el que se escribió PokerPirate).


¿El problema con los bots es que juegan mejor que los jugadores humanos decentes, o que pueden esperar 24/7 para que los malos jugadores aparezcan y luego intenten ordeñarlos?

Además, ¿sería "legítimo" o "engañar" que alguien tuviera una computadora junto a él mientras jugaba al póker, consultando a esa otra computadora para que lo asesorara?

No estoy seguro de cómo se puede afirmar que el espacio de solución para el límite del póquer está "resuelto" cuando la estrategia óptima para un jugador estará influenciada por lo que se sabe sobre los oponentes. ¿Cómo puede un intento de análisis de jugadores ser tan perfecto que no se puede mejorar?


Eche un vistazo a Ajax Control Toolkit NoBot :

NoBot emplea algunas técnicas diferentes de anti-bot:

* Forcing the client''s browser to perform a configurable JavaScript calculation and verifying the result as part of the postback. (Ex: the calculation may be a simple numeric one, or may also involve the DOM for added assurance that a browser is involved) * Enforcing a configurable delay between when a form is requested and when it can be posted back. (Ex: a human is unlikely to complete a form in less than two seconds) * Enforcing a configurable limit to the number of acceptable requests per IP address per unit of time. (Ex: a human is unlikely to submit the same form more than five times in one minute)


Hay formas mucho más fáciles. sí. muchas de las sugerencias son correctas y necesarias. pero alrededor del 90% de los fraudes se detectan de manera muy simple.

si alguien deja que un robot trabaje para él, después de un tiempo querrá que un segundo robot funcione para él. (otra máquina o lo que sea) pero: usará la misma contraseña, ya que es difícil de recordar 2 (<--- sarcástico)

lo que queda: verifica las cuentas con el mismo comportamiento de juego y el mismo hash de contraseñas.


Hay tres áreas separadas para considerar. El bot debe averiguar el estado de la tabla, tomar una decisión y enviar la decisión al host.

Averiguar el estado de la tabla es mucho más fácil si se envía a través del cable de alguna forma reconocible o se muestra al usuario como texto estándar. Primero, haz que el reconocimiento de imágenes sea la única opción, luego haz que sea lo más difícil posible. Visualice las tarjetas en 3D y cambie lentamente la orientación y la posición de las tarjetas. Anima pequeños parpadeos o fuegos artificiales frente a las cartas, por lo que cualquier captura de pantalla puede ser ilegible, pero lleva un tiempo incluso determinarlo.

No hay nada que hacer al tomar la decisión. Tratar de decidir si una decisión fue tomada por un ser humano o no es como una prueba de turing con casi ninguna información.

Volver a enviar la decisión puede ser difícil al usar 3D nuevamente. Hace que sea difícil enviar paquetes directamente o enviar una decisión por cualquier otro medio que no sea hacer clic en un botón con el mouse. Mueva los botones ligeramente con cada acción o haga que flote lentamente alrededor del área de juego mientras espera una decisión. Deshabilite cualquier característica de tipo de accesibilidad que permita encontrar o manipular botones.


Idealmente, la única solución válida es crear una lógica de honeypot que atraiga a un robot comprometido al proporcionar la tentación de una condición lógica más favorable que favorezca las respuestas conductuales más ideales del robot. Una vez que el bot está involucrado en el honeypot debes alimentar continuamente las condiciones del bot que prefiere presumir que el bot no tiene un tiempo de espera establecido. Entonces el bot puede medirse, registrarse y estudiarse. Además del bot, también tendrías los datos de la red y de la sesión aislados para el estudio siempre que el bot no se conecte a través de TOR.

En esta situación, las consideraciones determinísticas adecuadas para diferenciar un bot de un humano son menos severas, sin embargo, la consideración determinista sobre la identificación del comportamiento del bot se vuelve más severa. Lamentablemente, el propietario del robot puede realizar cambios en el robot para evitar dicha identificación si ese propietario conoce la condición del honeypot, o la consideración lógica de la misma.


La derrota de los bots de póker puede tomar dos formas: puedes tratar de identificarlos y prohibirlos en el sistema, o puedes vencerlos en el póker. Vencerlos en el póquer es la pregunta académica más interesante. :-)

Vea aquí algunos artículos sobre cómo derrotar a los robots de póker: http://www.cs.cmu.edu/~sganzfri/


Otro pensamiento sobre jugar con la pantalla para que sea difícil de escanear:

Haga que la tarjeta salga de una gran cantidad de colores diferentes, en términos humanos pero no iguales. Esto haría más difícil elegir las cosas para leer. Por otro lado, ponga la escritura falsa en la tarjeta en colores que el ojo humano no separará del fondo.


PokerPirate, como casi todos los bots de póquer que se han escrito, funciona mediante el raspado de la pantalla y la simulación de clics del mouse en una aplicación de póquer de Windows. Por lo tanto, el pin de linchamiento para el sistema es su capacidad de reconocer objetos en el juego y realizar acciones en la ventana. Tan inteligente como puede ser en el póquer, es probable que todavía tenga problemas con estas operaciones básicas.

Por lo tanto, formas obvias de frustrar este bot incluirían:

  1. Implementa un CAPTCHA, ya sea antes del juego, o cuando otros factores sugieren que un jugador puede ser un bot.
  2. Haga que los gráficos de la mesa sean más complicados o cambie el tema a lo largo del juego.
  3. Detecta movimientos y clics del mouse inusualmente rápidos y / o robóticos (un humano nunca moverá un mouse en una línea matemáticamente perfecta).

Si tiene acceso a muchas coincidencias, puede tomar un enfoque de minería de datos. La fuerza de juego de una IA debe ser bastante constante, mientras que probablemente haya patrones simples para los humanos, más débiles en las primeras rondas de calentamiento y la fuerza se deteriora después de jugar durante mucho tiempo. Además, los tiempos de decisión humana probablemente aumentan cuando hay más dinero en juego.

Si tiene acceso a movimientos de mouse (o al menos hace clic en ubicaciones que son ciertas incluso para aplicaciones web), debería ser bastante sencillo reconocer los bots, excepto los más sofisticados. Los seres humanos no mueven el mouse en una línea recta exacta, tienen períodos de aceleración y desaceleración, distribuciones de ubicación de clics estadísticamente descriptibles, etc.


Una solución al 100% es imposible, lo que me propongo es una solución que ahorrará dinero al usar la IA contra sí misma. Tenga una instancia de AI de PokerPirate ejecutándose en el lado del servidor y jugando como un jugador invisible en cada juego. Si un jugador realiza demasiadas acciones idénticas, probablemente estén ejecutando una instancia de PokerPirate. Este es un tipo de Honeypot o trampa en la que el atacante puede caer. El atacante puede defenderse contra este honeypot haciendo que su bot sea menos exitoso. Por lo tanto, esto está creando un "gato y ratón" en el que el atacante siempre puede robar algo de dinero y el defensor siempre puede ahorrar algo de dinero.



Derrota de un bot desde la perspectiva del servidor

  1. Muchos sitios de póquer en línea usan entradas emergentes de Captcha que se desencadenan por actividad sospechosa.

  2. Algunos sitios de póquer monitorean los tiempos y patrones de juego (es decir, el peor escenario es un jugador que juega 24x7 y 16 mesas continuamente, hay una pequeña posibilidad de que se trate de un humano real. Sin embargo, algunos jugadores tienen la habilidad de jugar una mano muy grande volúmenes que para el ojo inexperto parecerían ser un bot)

  3. Lanza fallas técnicas. Si sospechas que un jugador es un bot, cambia todas las posiciones de la tarjeta de juego de unos pocos píxeles en la pantalla, crea diferentes colores / diseños / patrones para 1/100 manos y mira si los lanza. Si no puede capturar la pantalla, se suspenderá el tiempo de espera en todas sus decisiones y esa es una evidencia de bot bastante concluyente.

  4. Timing dice que si un jugador de la computadora responde a las opciones en milisegundos a la vez sin pausa para pensar en grandes decisiones, esto podría ser sospechoso.

  5. Autocontrol Los datos de pokertableratings.com del sitio web de póker tienen muchos sitios grandes. Se ha recibido con una recepción mixta, algunos aman la transparencia, otros lo odian . El beneficio es, sin embargo, que ha habido casos en que las estadísticas de jugadores sospechosos (porcentajes de VPIP, porcentajes de PFR son algunas de las numerosas estadísticas cuantificables que pueden registrarse) han llevado a conclusiones de trampas

  6. Las redes de clasificación artificialmente inteligentes podrían monitorear estadísticas cuantificables para clasificar a los jugadores robados o fraudulentos.

  7. Cuando el póquer en línea era una entidad bastante nueva, hubo rumores y conversaciones con pruebas limitadas de que algunos software de cliente de póquer capturaban capturas de pantalla de los jugadores sospechosos para ver si estaban ejecutando programas que los ayudaban. Sin embargo (incluso si esto fuera cierto) al ejecutar dos computadoras para realizar las dos tareas de forma independiente se solucionaría esto.

  8. Compartir información entre infractores reincidentes entre sitios múltiples sería beneficioso para la industria, si solo fueran honorables y estuvieran dirigidos por personas responsables competentes.

  9. Algunos bots probablemente serían bastante simples por diseño, si pudieras descubrir su estilo de juego y ver cómo actúan en situaciones idénticas (ten en cuenta que esto solo es posible con robots poco sofisticados que juegan una estrategia muy básica) podrías descubrirlos razonablemente rápido.

  10. El uso inconsistente de las características del programa se inclinaría hacia un jugador siendo genuino. Tomemos por ejemplo que muchos sitios de póker en el juego tienen un botón ''Doblar cuando es mi turno''. Si recibes una mano mala y estás esperando que otro jugador decida qué hacer, muchos jugadores comprobarán este botón. Un bot puede usar estos botones. La diferencia es que un bot estaría en los extremos de la frecuencia de uso, probablemente los usaría todo el tiempo, o no lo haría en absoluto. Cuando un jugador puede presionar ''autofold'', algunas veces hará clic en fold incluso en las condiciones más favorables. Por ejemplo, un jugador genuino generalmente presiona el plegado automático, pero esta vez no lo hacen. Está doblado alrededor de ellos sin que ningún otro jugador actúe, ahora se les ha presentado la condición más favorable posible. Ahora, si presionan fold, habrían estado muy inclinados a presionar autofold desde el principio. Esto es un comportamiento inconsistente / no optimizado / aleatorio, consistente con ser humano. El momento en que se informa cuando se hacen clic en estas características son otros indicadores. Es importante reconocer que estos son todos indicadores y pruebas no concluyentes. Todos estos indicadores de comportamiento se pueden simular fácilmente.

Derrota de un robot desde la perspectiva de los jugadores

  1. Intenta ingresar y recopilar tantos datos como sea posible usando software como PokerTracker

  2. Intentar identificar patrones en su estilo de juego

  3. Intenta encontrar relaciones entre el tamaño de la apuesta en proporción a los jugadores pot / # y la fuerza de la mano

  4. Intenta calcular sus rangos de mano . Un robot de apuestas bajas probablemente no hará farol con la frecuencia suficiente como para ser una preocupación estratégica importante, por lo que la construcción de rangos de mano altamente precisos para él no debería ser demasiado complicado.

  5. Intente encontrar leaks en su juego a través del análisis de datos y prueba y error Una vez que se han encontrado las fugas / patrones, intente explotarlos repetidamente y evite cualquier otra situación.

Donde un ser humano es capaz de adaptation , los bots probablemente no lo son tanto, y cuando los humanos son pesados ​​por las cadenas de tilt , los resultados orientados al pensamiento y la frustrations , los bots no lo son. Puedes usar esto a tu favor.

Entonces, en esencia, no hay nada que pueda hacer para detenerlo si el robot es lo suficientemente inteligente como para simular demoras de tiempo reales durante las decisiones, así como para crear patrones de juego razonables y realistas. Incluye algunas condiciones al azar y una simple conversación (el léxico de los jugadores de póquer suele ser bastante limitado ) y tienes un jugador de IA que será bastante difícil de detectar.

Qué pueden hacer los bots para evitar la detección

La clave para evitar la detección sería pensar en el problema desde todos los ángulos posibles. Está intentando simular el comportamiento humano inteligente en un mundo muy pequeño y restrictivo. La mayoría de las simulaciones de comportamiento que puede ejecutar son bastante obvias, pero cuanto más inconsistente e impredecible sea su robot, es menos probable que se descubra.

  1. Cree cronogramas de juego realistas (es decir, 3-5 veces por semana, 4 horas por sesión con la semana impar aquí y allá durante el año).

  2. Ejecuta programas para tomar decisiones en una computadora separada, controlando una computadora zombie en caso de que se capture una pantalla en algún sitio.

  3. Aleatorice los tiempos de acción (no actúe inmediatamente, espere 0.5-2 segundos por acción)

  4. Dedica tiempo a las grandes decisiones. Si una decisión está en el límite, calcule la decisión y espere un momento para simular el pensamiento.

  5. Uso aleatorio de las características del software del cliente. Simula las pausas para ir al baño haciendo clic en el botón "repartirme" en todas las mesas y disfruta de un descanso de 5 minutos de vez en cuando.

  6. El chat simulado, el chat de póquer es a menudo muy simple, nunca suele ser una discusión o debate. Diga cosas como "desafortunado" o "stfu" en los momentos detectables apropiados. O incluso hacer que el codificador monitorice su bot y participe en el chat durante la ejecución.

  7. Asegúrese de que los movimientos del mouse sean realistas. Si las tablas están en tiled , no tome una decisión en la tabla superior izquierda y luego haga clic instantáneamente en la tabla inferior derecha. La mayoría de los sitios de software ahora ofrecen atajos de teclado, estos pueden ser preferibles para usar como se supone para el movimiento de mouse.

  8. Haz cosas que simplemente los clasificadores de IA no esperarán. Por ejemplo, una vez al año los llama por teléfono con una simple consulta no compleja ("¡No puedo iniciar sesión hoy!" O "¡Internet no funciona!") Es poco probable que haga mucha diferencia, pero si la persona que trabaja para el la compañía de póquer es lo suficientemente inteligente como para haberlo reconocido como un indicador confiable.

  9. Sesiones esporádicas perdedoras. Se puede simular Tilt y el bot puede jugar mal y perder algo de dinero de vez en cuando. Todos se inclinan en algún momento.

La preocupación también es que los sitios web de póker no se preocupan particularmente si los bots se ejecutan en sus redes, cada jugador vale una gran cantidad en comisión y teóricamente desde un punto de vista puramente cínico. El único inconveniente sería una mala impresión si se descubriera .

Incluso cuando se descubrieron exploraciones flagrantes, (búsqueda en Google por escándalos de red Cereus o Absolute Poker Scandal , es bastante impactante), el negocio parece sobrevivir y mantenerse sano, perdiendo solo jugadores educados y ganadores (de los cuales no hay muchos). Esto aumenta la proporción de jugadores menos habilidosos en la red, lo que a su vez atrae a los buenos jugadores. Es una buena captura pasada de moda 22. Un excelente argumento para una regulación adecuada del mercado.

Es importante tener en cuenta que para cada juego existe un equilibrio de nash. El poker en línea tiene una línea de tiempo tal como funciona ahora, tendrá que pasar a algo más social (webcam / voip) para que cualquiera pueda confiar en él en el futuro (si la gente confía en él) ya que los bots se harán cargo eventualmente como matemáticamente superior, y psicológicamente inmune. La comunidad de IA de póker es muy activa , alimentada por la academia y / o el beneficio de capital.

Versiones más sencillas de póquer, como el límite de póquer, han sido casi resueltas en pequeños espacios de búsqueda. Es solo cuestión de tiempo antes de que las versiones más complejas del juego (variaciones sin límites / Pot Limit Omaha, etc.) se vuelvan inaccesibles para los jugadores artificiales.

Conclusión

Los robots sofisticados simplemente no se pueden detectar hasta que la industria cambie a una configuración de juego en línea más social. Esto no resolverá el problema, pero ciertamente hará que sea más difícil para los bots ganar en los niveles inferiores. Ya hemos visto un ligero cambio con el lanzamiento de PKR , 3D y una versión más interactiva , menos manos por hora de los otros sitios donde el multitabling es bastante difícil de lograr para un jugador.

El problema también se resiente de la naturaleza de la industria, una razón más para apegarse a los sitios web más grandes y de mayor reputación donde la reputación se ha integrado cada vez más en su modelo comercial. La falta de transparencia y la simulación de transacciones no ayudan a la causa.

El verdadero desafío actualmente para los desarrolladores de bot es escribir un algoritmo ganador, esto no es tan trivial como parece. Todos los que juegan al poker se consideran buenos, ganadores o un jugador de equilibrio, lo que simplemente no es cierto. Es por eso que las personas continúan jugando, incluso cuando pierden dinero, ya que están bajo la ilusión de que simplemente tienen mala suerte, o se malinterpreta su estilo de juego. Esta arrogancia y debilidad en la psicología humana le ha costado a los jugadores perder mucho dinero y es la razón fundamental por la que el póker puede ser rentable.

El póquer es un juego muy complicado que lleva años para ser bueno (El viejo adagio sigue siendo cierto, "Diez minutos para aprender, una vida para dominar"). El elemento suerte es extremadamente limitado a largo plazo.

Como cualquier otra profesión, para ser bueno, necesitas estudiar durante cientos y cientos de horas, y jugar por muchos miles. Comprenderá cosas que los jugadores menos experimentados no entenderán, detectarán las cosas que los menos experimentados no detectarán. El aprendizaje continúa por mucho tiempo, tal vez más de lo que podemos vivir. Es un juego complicado.

¡Cuántas veces ha visto un juego de altas apuestas en efectivo en la televisión y escuchó a alguien gritarle "¡Es una decisión fácil!" lo que demuestra que los aficionados realmente no entienden o no reconocen la sofisticación en el juego, y realmente creen que el juego en ese nivel sigue siendo en última instancia simple. No lo es Esos jugadores de alto riesgo (muchas veces) están en la televisión porque son realmente realmente buenos. También es probable que se juegue un meta juego complicado, que nuestro amauer no puede reconocer la existencia de. El amatuer no se pararía frente a un maestro de ajedrez y les gritaría que movieran a su caballero, sin embargo, debido a la dinámica del poker como información imperfecta, su psicología les hace creer realmente lo que están diciendo. Al igual que en el ajedrez, las decisiones pueden ser intrincadas, sensibles y extremadamente importantes para el juego en general. A medida que el juego aumenta en complejidad, las decisiones triviales ya no son tan triviales, porque tu oponente las espera.

Una vez que mueves tu bot o tu juego por los niveles, inevitablemente encontrarás una mayor cantidad de jugadores más habilidosos. Entonces, la complejidad de su estrategia va a tener que pasar al siguiente nivel, teniendo en cuenta las imágenes de la mesa , el equilibrio de rango , el farol sofisticado e inteligente (IE no solo fanfarroneando en debilidad, faroleando en los rangos y faroleando en la imagen, etc.) con un análisis de rango de mano más detallado. Realmente es un juego diferente a medida que avanzas.

Una vez que se ha escrito un bot ganador, sin duda el codificador tendrá suficiente habilidad, conocimiento y sentido común para aplicar el bot de una manera indetectable. Esto es trivial para ellos.

Entonces realmente no hay nada que puedas hacer. Si quieres jugar en línea, comprende los riesgos. Nunca arriesgue más dinero de lo que puede permitirse, e intente mantener registros precisos de los gastos para que no tenga una estimación desorientada, poco realista y perjudicial en última instancia de su propia capacidad. ¡Pida pérdidas y abandone la mesa si no tiene ventaja, o si no está seguro si tiene ventaja! Por supuesto, si todos hicieran eso, nadie ganaría, esa es la naturaleza depredadora y explotadora del juego, de ahí viene la competencia y eso es lo que la hace divertida.