Ocasionalmente, tenho trabalhado em uma ideia de jogo no meu tempo livre. A jogabilidade e o conteúdo o tornam implementado como um jogo multiplayer online, construído com tecnologias da web bem estabelecidas. Você deve saber que ele se enquadra no gênero de estratégia e simulação. Isso significa: Não é possível andar por aí com caracteres ou similares, mas apenas ações atômicas (relacionadas à comunicação cliente-servidor) como "criar coisa A no local X".
A certa altura, percebi que havia um grande problema: ter um front-end baseado em navegador que dependesse de um back-end da API REST faz dele um alvo mais do que excelente para bots. Embora a automação seja desejável para os negócios, ela é venenosa para um jogo divertido. Eu experimentei isso em primeira mão em um jogo de navegador no passado, pois os jogadores mais bem-sucedidos eram os bots que subjugavam a todos.
Do meu ponto de vista atual, não vejo a possibilidade de me proteger contra bots ao criar um jogo online para vários jogadores baseado em uma API REST. Exceção: Tornando-o de código aberto para que todos possam hospedar sua própria instância para grupos privados ou mesmo para si próprio (para não se incomodar com idiotas com bots).
Existe alguma maneira de diferenciar entre um jogador honesto que acabou de acionar um alarme para a próxima ação possível e um bot automaticamente tendo todas as chances de aparecer? Além de tais rolhas, como captchas. Caso contrário, eu pensaria em outra pilha de tecnologia que torna pelo menos muito mais difícil mexer na comunicação cliente-servidor (protocolo binário criptografado proprietário em um cliente de código nativo).
Edit : Obrigado, suas respostas são inspiradoras, mas também me fizeram perceber que contramedidas específicas não podem ser feitas indo mais longe nos detalhes do jogo. No entanto, isso seria demais para uma pergunta no Stack Exchange. Então, eu só quero destacar os pontos mais importantes:
- Os jogadores estão explorando, desenvolvendo e gerenciando sempre que quiserem. Seus negócios ainda funcionam bem quando estão offline (é um jogo pacífico, sem armas envolvidas). Somente expansão e progresso precisam da ação dos jogadores. Essas ações são limitadas por:
- o tempo é um dos principais recursos (como no treinamento de habilidades do EVE Online). Todos os processos no jogo exigem isso. Não há nenhum ponto em estar online 24/7. O jogador médio já deve ter sucesso gastando não mais de uma hora todos os dias em uma ou duas sessões ( aproximadamente , o conceito ainda está em desenvolvimento).
fonte
Respostas:
Se as pessoas querem bot, eu não acho que você possa realmente pará-las.
É claro que você pode implementar muitas medidas que tornam a botagem mais ou menos dolorosa. Mas você só pode fazer muito antes que sua base de código se transforme em uma bagunça gigantesca que é um inferno para manter, propensa a erros e irrita usuários legítimos. Enquanto isso, os botters sempre encontrarão uma maneira de derrotar suas contramedidas:
Você basicamente ficará preso em uma corrida armamentista com os botters e, com base na lógica ao longo dos pontos acima, assim como na minha experiência com esses jogos, você não será capaz de acompanhar.
Alguns desenvolvedores de jogos empregam medidas anti-trapaça extremamente agressivas: por exemplo, o Steam verifica a memória e o sistema de arquivos em busca de hacks, e os infratores podem ser punidos com a perda de contas no valor de centenas de dólares. No entanto, ainda existem bots e outros hacks para jogos Steam, e alguns deles funcionam até a metade do tempo. Ao contrário deles, você tem uma API aberta ao usuário e nenhum controle sobre o computador do usuário. É uma batalha difícil desde o início.
O problema que você está tentando resolver é essencialmente um teste de Turing: exceto que é um teste de Turing muito fácil, porque você não pode trapacear exigindo problemas difíceis de IA, como a linguagem. Não importa quantas heurísticas você crie, seria trivial para um botter adicionar um pouco de aleatoriedade à ação do bot para imitar quase exatamente um humano. Nem seria muito difícil ter o bot observando você jogar um pouco e aprender a cronometrar ações exatamente como você. Então, quando você bane o bot, o botter publica um enorme discurso no fórum sobre como ele é apenas um jogador dedicado (e talvez ele seja realmente um falso positivo) e seu público principal de jogadores hardcore se opõe a você.
Torne o jogo muito divertido de bot
A principal razão pela qual alguém usa um bot é porque existe uma parte do jogo que eles querem pular. Se eles gostassem do jogo e o achassem divertido, eles não teriam o bot jogando, eles jogariam eles mesmos.
Mas se o jogo é tão chato, por que jogá-lo? Presumivelmente, algumas partes do jogo são chatas e obrigatórias para chegar a partes divertidas. Por exemplo, nos MMOs, todo mundo adora subir de nível, mas ninguém quer matar 42.324 ratos venenosos para obter o XP. Então eles deixaram o bot triturar e aparecer para fazer a parte divertida.
Isso não é uma crítica a você ou ao seu jogo, mas claramente pelo menos alguns jogadores acham algumas partes do seu jogo tediosas. Você deve ver se consegue reduzir essas partes tediosas e tentar adicionar decisões mais difíceis e significativas: os bots não são bons em estratégia profunda ou pensamento lateral em comparação à inteligência humana e, além disso, os humanos gostam de tomar decisões difíceis no jogo.
Pela sua descrição, tenho a impressão de que este é um jogo de navegador semelhante ao Travian, onde há uma fila de compilação com uma única melhor ordem de compilação e determinadas tarefas de "manutenção" (como manter as operações agrícolas) que devem ser executadas. Você diz que não há conflito, mas em qualquer drama MMO e política mesquinha é inevitável (IMO é a principal atração), então eu tenho certeza que seus jogadores encontrarão maneiras de atacar. Com esses tipos de jogos, muito do tédio vem dessas tarefas de "manutenção" - o que os jogadores realmente querem fazer é fazer alianças e jogar o jogo da diplomacia com clãs rivais, a manutenção se torna uma espécie de imposto onde você precisa acordar até um alarme em horários estranhos para poder entrar nessa divertida parte diplomática. Então corte o tédio:
Infelizmente, essa abordagem nem sempre funciona. Nem todos os jogadores têm a mesma tolerância ao tédio ou o mesmo conceito de diversão. Você poderia ter um mecânico de destaque que 99% dos seus jogadores gostam, mas o 1% acha chato. E se o 1% começar a escrever bots, arruinando a diversão dos 99%? Mas, finalmente, é uma questão de grau. Você nunca pode remover completamente as bots, mas pode minimizar os danos.
Undercut botters
Muitos dos efeitos realmente negativos dos bots vêm de autores de bot que comercializam seu trabalho. Se este for o seu caso, você pode simplesmente competir com os bots. Muitos jogos online baseados em tempo real já possuem recursos premium que permitem pular o tempo e automação (como filas de criação estendidas). Isso equivale a um bot oficial sancionado pelo desenvolvedor. Se você os tiver, e os precificar adequadamente, os jogadores comprarão seu prêmio em vez de comprar bots. A boa notícia é que você é o responsável pela API e, portanto, sempre tem uma grande vantagem no desenvolvimento de automação de qualidade para seu próprio jogo; dessa vez, é uma batalha perdida para os botters.
Isso não elimina botters amadores ou pessoas que acham que seu prêmio não é um bom valor pelo dinheiro, então novamente a eficácia dessa abordagem depende da situação.
Procure-os manualmente
Como eu disse acima, o que você está fazendo é essencialmente um teste de Turing. Como a interação com humanos é famosa por ser um desafio difícil para o teste de Turing, você pode tentar aproveitá-lo.
Inspecione manualmente os jogadores de nível superior e verifique se há algo suspeito. Você pode até conseguir escapar ocasionalmente de maneiras restritas à sua imaginação, para ver se consegue enganar o bot a fazer algo que não faria.
Embora seja difícil escrever um algoritmo que detecte bots de maneira confiável, não é tão difícil para um ser humano aprender a identificá-los. Eu acho que muitos jogos de navegador usam essa estratégia, e pode ser bastante eficaz. A desvantagem é que você precisa fazer muito trabalho chato o tempo todo ou precisa pagar mestres de jogos para fazer patrulhas de bot regulares.
fonte
A melhor e única defesa eficaz contra bots é projetar seu jogo de uma maneira que os jogadores não sintam a necessidade de automatizar em primeiro lugar. Quando seus jogadores automatizam tarefas simples que na verdade não exigem habilidade, é um sinal de que sua interface com o usuário está ausente e estão substituindo um recurso de interface do usuário que está faltando.
O seu jogo inclui tarefas repetitivas em que o jogador executa a mesma ação repetidamente para triturar?
Torne esses aspectos do seu jogo menos repetitivos e mais interessantes para jogar e reproduzir novamente.
Seu jogo exige que os jogadores realizem ações às vezes inconvenientes para eles, como no meio da noite ou quando estão no trabalho?
Permita que eles enfileirem pedidos (como "build X1, X2 e X3, iniciando cada um assim que os recursos estiverem disponíveis") ou programe ações em horários específicos com antecedência (build X às 3:22 da manhã).
Seu jogo exige que os jogadores participem de eventos dentro de um prazo muito curto?
Permita que eles configurem o jogo de forma que essas ações sejam acionadas automaticamente
Monitore sua comunidade. Quando você perceber que eles automatizam qualquer outra coisa, roube a ideia e adicione a opção de automatizá-la no jogo principal.
fonte
Não torne seu jogo tão vulnerável ao esforço de johnny-on-the-spot
Primeiro, verifique se os jogadores que jogam seu jogo apenas por vinte minutos ou uma hora por dia em uma única sessão não estão em grande desvantagem para os jogadores que o deixam em aberto no trabalho e jogam 16 horas por dia.
Isso pode exigir uma alteração na mecânica do jogo - por exemplo, uma colocação de movimento que é preenchida quando você não está jogando e permite que os jogadores executem muitos movimentos rápidos quando podem jogar, em vez de um mecanismo que requer atenção constante.
Isso irá desincentivar os criadores de bots, porque eles podem acompanhar o jogo e não precisam urgentemente de criar um autômato que execute ações para eles.
Exija informações do servidor para cada ação e torne as respostas do servidor mais lentas
Quando um jogador joga o jogo, ele solicita uma página que apresente a interface do usuário com a qual ele interage para fazer a sua jogada. Você pode inserir elementos, como elementos invisíveis do formulário, para verificar se eles realmente solicitaram a página primeiro. Um número aleatório que seu servidor armazena junto com o ID do usuário e a página que eles solicitaram pela última vez. Quando uma ação entra, o servidor verifica se esse usuário retornou o mesmo número aleatório e está executando uma ação na página em que foram vistos pela última vez. Isso não significa apenas que o bot precisa fazer duas chamadas de API para cada ação, mas que usuários comuns não podem abrir várias páginas e executar ações rápidas sequenciais (se isso for um problema com o seu design).
As duas chamadas de API oferecem uma maneira de retardar os bots mais tarde. Eventualmente, você verá padrões suspeitos e poderá detectá-los. Quando o servidor detecta um padrão suspeito, pode atrasar a resposta da API na primeira chamada em um segundo - o que irrita os usuários, mas realmente desacelera os bots. Além disso, se o segundo pedido retornar "muito rápido" (o que isso significa para o seu jogo), você poderá rejeitá-lo ou recarregar a página com algum erro no jogo ou motivo para solicitar um reenvio. "Você não pode construir tão rapidamente. Por favor, tome seu tempo." por exemplo.
Ouça seus usuários e você encontrará com o que eles estão bem e o que os incomoda.
Faça com que os movimentos e ações exijam reflexão
Se o jogo for um simples clicker de botão, você não poderá fazer muito sobre bots. Considere redesenhar seu jogo para que o próprio jogo execute um teste semelhante ao captcha.
Não sabendo nada sobre o jogo, não posso sugerir muito. Se envolver a escolha de onde colocar um edifício, projete a interface para que o usuário possa escolher em qualquer lugar, mesmo que haja canais óbvios que não funcionariam. Ou talvez o usuário precise corresponder corretamente à orientação para que o canal seja bem-sucedido. Se envolver a escolha de uma ação, inclua uma lista mais longa de ações, algumas das quais não faria sentido em uma determinada situação.
Incluir verificações aleatórias de bot muito simples
Adicione uma caixa de diálogo ocasional, "Tem certeza?" por exemplo. Altere a pergunta e o texto com frequência e use-a como verificação pontual de bots.
Alterar a API
Altere a API frequentemente, forçando-os a analisar a página da Web para as variáveis corretas e como elas são retornadas ao servidor da Web. Se você desenvolver sua interface usando um modelo, substitua o modelo pelo código que usa um hash salgado ou gerador de variável aleatória para cada nome de variável. Em seguida, comece a usar o javascript para codificar as respostas e altere essa codificação frequentemente. Provavelmente, você pode escrever um software que faça tudo isso para você e ter tudo aleatório o tempo todo ou simplesmente criar um modelo estático que você altera ocasionalmente.
fonte
Você não pode detê-los. Mas você pode tornar a vida deles miserável, pois eles precisam gastar muito tempo escrevendo seus robôs e atualizando-os. Você precisa usar o que tiver para verificar se o usuário é válido.
fonte
Em geral, é difícil distinguir entre bots e humanos de forma totalmente automática; alguma forma de processo de decisão assistida por humanos funciona melhor.
O que eu faria: definir algumas heurísticas que sugerem que o usuário provavelmente é um bot - fazendo muitas ações, fazendo coisas 24/7, ... Então, se essas heurísticas ultrapassarem um determinado limite, faça uma verificação invasiva.
Você pode verificar manualmente a atividade dos jogadores e ver se parece OK. Ou você faz um captcha na próxima vez que o usuário estiver online. Ou (ainda mais forte), envie-lhe uma mensagem de bate-papo, onde você explica que suspeita que ele é um bot e deseja que ele responda com algo humano para provar que ele não é um bot (como foi o seu dia? Qual é o seu filme favorito? ... - você pode ter um monte deles). Se ele não responder, provavelmente é um bot. Se ele responder, você verifica manualmente as respostas quanto à semelhança com humanos e bane robôs. Se suas heurísticas forem razoáveis, apenas uma pequena minoria de usuários será questionada e a quantidade de respostas a serem varridas será pequena. E se você mantiver o conjunto de perguntas em sigilo e em mudança, não há como os robôs estarem preparados, a menos que alguém invente a SkyNet.
fonte
Abrace o botter. Você criou uma API repousante, perfeita para um codificador experimentar a automação do seu jogo. Projete sua jogabilidade para que o bot não obtenha vantagem sobre um jogador humano devido à automação - elimine as vantagens da velocidade de execução, etc., que uma máquina possui; projete seu jogo para que o bot forneça a mesma receita que um jogador humano, se possível - ou pelo menos forneça um ambiente mais rico para atrair mais jogadores humanos.
A questão é: por que as pessoas estão criando bots para o seu jogo e pagarão pelo privilégio?
fonte
Eu não neccessarily não concordar com as respostas de ciências suave, mas não são coisas técnicas que você pode fazer para detectar botters e algumas coisas que simplesmente tornar a vida mais difícil para eles.
Classifique as contas pelo quanto você suspeita que elas estejam usando um bot. Isso irá alimentar várias outras técnicas e proteger os usuários legítimos da sua ira.
Girando a chave de cookie da sessão. Isso garante que o bot preserve seus cookies, mas também torna muito mais difícil para um botter compartilhar cookies entre o navegador e o bot (o que é realmente útil durante o desenvolvimento e o teste).
Limite de taxa de determinadas ações. Trabalho fora o mais rápido que você pode realmente fazer alguma coisa, e monitorar a rapidez com que estes bots estão fazendo isso. Também pode valer a pena manter um registro em execução e calcular os desvios padrão. Mesmo se alguém estiver fazendo algo apenas a cada 10 segundos, se estiver fazendo exatamente a cada 10 segundos, provavelmente será um bot. Modifique sua classificação e efetue logout.
Torne o login mais difícil em contas que você suspeita serem um bot. CAPTCHAs e perguntas e outras coisas inevitáveis tornam as coisas muito mais difíceis para um aspirante a botter criar scripts automaticamente.
Monitorar o movimento do mouse / página. Hoje em dia isso é bastante simples com javascript, mas os bots não terão organicamente nenhum movimento do mouse. Se você não receber nenhum "clique", eles podem ser móveis ou podem ser um bot. Investigar. Embora haja muitos dados para registrar ... Portanto, convém reservar isso para contas que já acionaram as etapas anteriores.
Crie ferramentas para vincular contas por comportamento, IP, seqüências de ação, cadência de ação. Se você for banir pessoas, verifique se você possui as ferramentas para verificar manualmente suas irregularidades.
Gire o esquema de URL, variáveis CSRF, etc. e faça-o com frequência. É um grande passo e provavelmente requer mais trabalho inicial do que jamais valerá a pena, mas, no mínimo, qualquer conta que de repente pare de funcionar (ou continue martelando os URLs antigos e enviando os nomes das variáveis antigas - registre-os!) precisam aumentar seu nível de índice de bot.
fonte
Você já pensou em fazer bots como parte integrante do jogo? É difícil para os bots arruinarem o jogo para todo mundo se todos são incentivados a criá-los. Adicione suporte para scripts e, de repente, a dinâmica do jogo muda de estratégias manuais de gerenciamento de recursos para estratégias de design de bot.
fonte
Crie um servidor separado apenas para bot. Crie uma tabela de classificação e comemore os vencedores. Veja os dados que isso gera. Banir usuários de servidores normais cujo perfil de comportamento se parece com o de um bot.
fonte
Faça o que fizer, lembre-se de NÃO torná-lo mais irritante para o jogador real! Muitas das respostas que eu vi (resultados mais lentos da página, não permitindo a abertura de várias páginas para facilitar a entrada mais rápida, etc.) também impediriam que jogadores legítimos fizessem as coisas rapidamente, o que os frustraria desnecessariamente.
A abordagem mais fácil pode ser aplicar a engenharia social ao problema: 1) adicione uma cláusula explícita NO-BOT aos seus TOS e adicione que a detecção de atividade de bot removerá o jogador da lista de melhores pontuações (ou terá o rótulo "trapaceiro" "anexado, para que as pessoas não fiquem tão frustradas com elas; se você seguir esse caminho, permita que as pessoas ocultem os registros de trapaceiros).
2) verifique se há comportamento semelhante a um bot (por exemplo, pings regularmente cronometrados no servidor ou tempo quase perfeito por muitas horas seguidas) e, em caso afirmativo, coloque a conta no "modo bot" - exiba captchas ocasionais e outros enfeites . se eles forem ignorados, mas o jogador continuar jogando ativamente, marque o jogador como "bot" e exclua-o da classificação. se forem abordados, marque-o como "jogador poderoso" e tire-o da lista de bot.
Dessa forma, a grande maioria dos jogadores nunca é afetada, os jogadores hardcore são afetados por um período curto e os bots não "estragam o jogo" para mais ninguém.
fonte