Como detectar e impedir o abuso (botting) da API de jogos online?

50

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).
Peter
fonte
9
Você não pode fazer o jogo de tal maneira que outras pessoas programando ou comprando bots não arruinem a diversão dos jogadores humanos? E segundo, programar um bot / AI para jogar um jogo pode ser divertido por si só; embora não deva estragar a diversão dos outros.
Kasper van den Berg
27
"automação [...] é veneno para um jogo que é divertido." Discordo fortemente. Se o seu jogo é realmente divertido, por que penalizar os jogadores por pularem partes que não estão tendo? Se os elementos do seu jogo são tão entediantes que os jogadores preferem não jogar e sentem o desejo de que um script assuma o controle, esse é o verdadeiro problema a ser abordado.
Marcks Thomas
6
Seu exemplo tem uma resposta fácil: dê ao jogador as ferramentas para que ele não precise de um bot. por exemplo, permita que eles enfileirem uma ação, em vez de incentivá-los a estar on-line em um momento preciso ou obter / criar uma ferramenta para fazer isso por eles.
4
A principal razão pela qual as pessoas usam bots é porque partes do jogo são entediantes e entediantes para eles (se fossem divertidas, apenas jogariam). Claramente, seus jogadores estão gostando da competição e do desafio, mas não da jogabilidade automatizável. Você pode tentar alterar o design do jogo para remover as partes que as pessoas usam para recuperar ou reequilibrar o jogo para criar decisões mais difíceis e significativas que apenas um jogador humano pode tomar e um bot não (como escolhas estratégicas profundas) . Caso contrário, você estará condenado a uma corrida armamentista, e os botters vencerão.
Superbest
6
tl; dr: As pessoas não vão gostar de competir contra o cara com um alarme e nenhum trabalho mais do que com o cara com um bot - e é isso que os levará a rodar bots.
usar o seguinte código

Respostas:

51

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:

  • Há mais deles do que você
  • Eles têm mais tempo livre em suas mãos (você precisa dividir o tempo entre o desenvolvimento real e a prova de bot, eles podem hackear o código bot o dia todo)
  • À medida que você cria salvaguardas estranhas e desafiadoras, os autores dos bots serão ainda mais incentivados, porque é divertido quebrar sua proteção contra bots
  • Se houver um mercado negro de pessoas lucrando comercialmente com bots, quanto mais você escrever um bot, mais valiosos os bots de trabalho se tornarão, assim você incentivará os bots

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.

Superbest
fonte
4
Selecionei esta resposta porque ela me parece a mais ponderada ao examinar a questão um passo atrás, longe dos detalhes técnicos. Eu pensava muito sobre a escolha de Adam Davis porque ele contém algumas idéias muito boas sobre "como fazer".
Peter
11
@ Alomvar Fico feliz que tenha sido útil. Já que a pergunta recebeu tantos votos, você também pode colocar um link para o seu jogo no seu perfil :) #
3023
2
Ugh, Travian ainda está por aí? Joguei isso há muitos anos e parei quando percebi que a jogabilidade podia ser resumida a "que vença o melhor sociopata".
Mason Wheeler
25

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

    • Quando a construção do X for destruída, reconstrua-a imediatamente.
    • Quando alguém oferece o recurso X por menos de Y dinheiro, compre imediatamente até Z unidades.
    • Venda automaticamente todo o recurso X quando o estoque exceder as unidades Y, mas não por menos de Z dinheiro por unidade.

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.

Philipp
fonte
5
Essa é uma ótima sugestão que também melhora o seu jogo e reduz o risco de ele fazer com que seus jogadores se tornem mais parecidos com bot. ;-) Se ser um bot é um ótimo jogador do seu jogo, talvez o jogo deva envolver um pensamento mais humano. Não concordo que seja a única defesa eficaz, mas concordo que é a melhor no geral. +1
Dronz
7
Embora eu concorde com o espírito disso, infelizmente a premissa de que você pode tornar o jogo não tedioso é uma falácia. E se 10.000 de seus jogadores gostarem do mecânico X, mas 10 o acharem tedioso e escreverem bots, arruinando a diversão dos 10.000? É o que acontece com os aimbots nos FPSs: a solução análoga seria tornar a mira menos importante, mas muitos jogadores adoram aperfeiçoar suas habilidades de mira. São poucos os que sentem a necessidade de aimbot.
Superbest
11
Eu realmente amo sua sugestão, eu desejo mais jogos woukd fazer algo parecido com isso em vez de pedir-lhe para ser em torno de 24/7 para ser eficiente
meneldal
@Superbest, na verdade, eu vejo uma solução na qual você pode projetar com o objetivo de ser mais importante, mas ainda difícil para o bote ser eficaz, por exemplo, se você projetou armas com taxa de tiro lenta e mira precisa mais útil, os jogadores poderiam se unir a um Botter já que ele não pode disparar balas suficientes para cada jogador atacá-lo
Matthew Pigram
2
Este é exatamente o ponto! Se houver um botão fácil e eficaz ao mesmo tempo, X X Bot possível para o seu jogo, escreva você mesmo e entregue a todos! - Deixe um jogador decidir com antecedência, o que deve ser construído quando o tempo estiver pronto ... Diversão nos jogos é sobre decisões!
Falco
23

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.

Adam Davis
fonte
Se o seu jogo navegador, API mudar e tudo isso não importa. A menos que você esteja disposto a alterar todo o texto no cliente sempre (isso seria horrível para os jogadores. A interface do usuário muda o tempo todo ... ugh ..) e se os Textos não estão mudando, é muito trivial encontrar o texto. Mesmo com apenas jQuery. Quando joguei o Travian e eu estava prestes a atacar, abri enormes quantidades de guias, coloquei todas as informações prontas e, quando o tempo acabou, rolei por tudo clicando em enviar. Não botando, apenas rápido, mas seus atrasos na API teriam me atingido com força.
Katu
11
@Katu Dependendo do jogo, muitos dos elementos da interface do usuário já podem ser imagens. Alterar os nomes das imagens, alterar ligeiramente os hashes do arquivo de imagem, etc., o tornará mais desafiador. No mínimo, você está forçando-os a baixar todos os elementos apenas para descobrir com o que lidar. Eles podem usar o javascript para encontrar qual elemento está no topo em um determinado local na tela e tentar ativá-lo, mas mesmo assim você pode dificultar o fato de o cliente javascript relatar as localizações dos cliques do mouse em vez dos cliques dos elementos.
Adam Davis
@Katu Você está certo, em última análise, pode ser resolvido, mas se você fizer o esforço necessário grande o suficiente, reduzirá o número de pessoas dispostas a ir para o esforço, o que pode ser suficiente.
Adam Davis
2
O problema com a "transferência de lote" é que você está dizendo a todos os seus jogadores que eles só podem jogar por 30 minutos por dia ou por quanto tempo leva para usá-lo, o que os incomoda, limita a receita do anúncio e cria uma tentação enorme para permitir que comprem mais por meio de microtransações.
usar o seguinte código
Concordo com a colocação e orientação do edifício! Isso é ao mesmo tempo um plus para usuários legítimos e um negativo para bots.
precisa saber é
13

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.

  • Verifique os cabeçalhos das solicitações e rejeite solicitações com valores inválidos. Defina o cabeçalho personalizado ou verifique se existe um agente do usuário. Claro que é fácil superar, mas é ainda mais fácil verificar. Se o botwriter é inexperiente, pode demorar um pouco para pensar sobre isso! Sua tarefa é forçar o maior número deles a desistir, certo?
  • Você provavelmente tem algum tipo de assinatura de hash ou algo em suas solicitações, que é gerado no lado do cliente com alguma função. Bem, então continue mudando! Torne-o como script não armazenável em cache separado e altere-o em intervalos aleatórios. Faça alguns deles, ou edite em tempo real, adicionando sal aleatório ao processo de hash. Embora seja fácil de superar, isso os forçará a ficar de olho em sua função. Eles também podem precisar de algum tipo de pipeline de implantação constante para manter os usuários atualizados. Senão, seus bots começarão a enviar solicitações de hash incorretas. Você pode até banir usuários que fazem isso com muita frequência. Os usuários válidos moverão seu cliente de qualquer maneira, para buscar novamente a função de hash de vez em quando. Lembre-se de atualizar o lado do servidor também (o back-end baseado em script realmente ajudará aqui).
  • Acompanhe a eficiência do uso de recursos. Se eles gastam instantaneamente, depois que algo se torna acessível, ou se novos ataques são sempre enviados dentro de 1 a 2 segundos do último, 24/7, você está lidando com algum jogador hardcore ou um bot. Você solicita o captcha a essa pessoa e força o logout dele. Se ele continua fazendo pedidos depois de sair (bots mal escritos!), Então é um bot. Se ele tentar fazer login várias vezes sem sucesso, provavelmente é um bot. Se ele demorar algumas horas para registrar novamente, ele pode ser um bot (o bot pode solicitar assistência humana a essa altura e o proprietário pode estar dormindo).
  • IP. Este pode eliminar a venda de bot. Se alguém escreve um bot com $$$ em mente, talvez não queira compartilhar a fonte. Eles venderão tempo de bot. Se eles são gananciosos, eles podem usar uma única máquina, com ips únicos / poucos. Isso significa que muitos usuários começarão a compartilhar IP. Isso é arriscado, porque o mesmo caso é para pessoas que estão compartilhando uma rede. Você terá que verificar se alguma das verificações anteriores é bem-sucedida em determinado IP e decidir manualmente se é um grupo de usuários legítimos ou um exército de bots.
Polan
fonte
5
Embora essas idéias sejam inteligentes, elas não são apenas fáceis de derrotar, mas eu ficaria tentado a escrever um bot simplesmente porque parece tão divertido derrotá-las, mesmo que eu não me importei muito em me sair bem no jogo.
Superbest
11
A maioria dos pontos é inútil. Você está pensando ao contrário. Não importa o que você faça com todos os hashes, cabeçalhos, etc., o "link para comprar a atualização para minha taverna" deve funcionar, certo? Agora, eu crio um bot que encontra esse link, a cada 2 horas clica nele. Não me importo com a mágica que você faz por trás disso, mas meu bot clica exatamente como o usuário faria. O uso de recursos é bom, mas pode gerar muitos falsos positivos, o que requer trabalho humano. IP .. Por exemplo, o travian bots (não livre) é um navegador personalizado, que envia tudo do seu ip.
Katu
@Superbest sim, é fácil vencer essa segurança uma vez. Mas se mudar um pouco, você precisará acompanhar essas mudanças e atualizar seu bot. Isso significa gastar mais tempo escrevendo um bot para gastar menos tempo jogando :). Sem sentido.
Polan
@ Katu, você está certo, meus métodos não vão parar o bot, que é um plugin para um navegador e está apenas clicando no cliente. Mas qualquer coisa lá fora, pode ter problemas. Apenas encontrar um link e atacar novamente não funcionará, porque o hash pode exigir registro de data e hora e conhecer uma chave semi-secreta. A função hash muda de vez em quando; portanto, se você não tem intérprete javascript, terá que reescrever seu bot o tempo todo para incluir essas alterações. Esses métodos não impedem as pessoas de escreverem um bot. Isso exigirá apenas manutenção constante, assim você não economizará muito tempo usando um bot :).
Polan
2
@ Polan Não é um problema se escrever o bot é mais divertido do que jogar em primeiro lugar.
Superbest
8

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.

Martin Modrák
fonte
8
Quando a Skynet se tornou consciente, todos supuseram que tentaria dominar as forças militares do mundo. Mal sabiam que seu único objetivo era dominar a economia de seu MMO favorito. Assim, foram evitadas as grandes guerras entre humanos e IA, direcionando suas ambições agressivas para um local onde danos limitados poderiam ser causados.
Dan Bryant
11
O problema com as mensagens é que um botter pode facilmente fazer login para jogar todos os dias e executar o bot na mesma conta para cuidar do trabalho ocupado. O bot ignoraria a mensagem, o humano responderia na manhã seguinte, e é difícil punir um jogador por responder algumas horas tarde demais a uma mensagem enviada no meio da noite.
Superbest
@Superbest Se o bot continua tentando jogar enquanto o humano dorme, você tem uma boa indicação de que é um bot. O problema de fazer perguntas é o que acontece se o jogador não fala inglês?
Loren Pechtel 29/04
@LorenPechtel Bem, como você vai saber quando eles estão dormindo? Há muitas pessoas com horários de sono muito incomuns por aí. Só porque eles não responderam não significa que era um bot, talvez eles não tivessem vontade de responder e decidiram fazer isso mais tarde. Quanto ao idioma, presumivelmente o jogador fala o idioma em que o jogo está, caso contrário, como eles concordariam com as regras ou ToS? Não que seja difícil distinguir bot de estrangeiro em uma conversa.
Superbest
@Superbest Minha impressão foi de que o jogo não continuaria enquanto a pergunta permanecesse sem resposta. Se eles continuam enviando comandos fúteis, é bem aparente que é um bot fazendo isso.
Loren Pechtel
8

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?

MatthewToday
fonte
4

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.

Oli
fonte
3

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.

Kenneth Cochran
fonte
3

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.

conjecturas
fonte
2

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.

TI Troll
fonte
E se um jogador de poder decidir bot? Não acho que 'marcar' o jogador como algo faz muito sentido, é muito explorável. Basta jogar um monte por alguns dias, em seguida, uma vez que você começar a bandeira, fogo-se o bot e nunca ser pego
Dan Pantry