Come rilevare e prevenire l'abuso (imbottigliamento) dell'API di giochi online?


50

Nel mio tempo libero ho lavorato su un'idea di gioco in modo occasionale. Il gameplay e il contenuto lo rendono implementato come un gioco multiplayer online costruito con tecnologie web consolidate. Dovresti sapere che rientra nel genere di strategia e simulazione. Ciò significa: non andare in giro con personaggi o simili ma solo azioni atomiche (riguardanti la comunicazione client-server) come "costruire l'oggetto A nella posizione X".

A un certo punto mi sono reso conto che c'è un grosso problema: avere un front-end basato su browser che si basa su un back-end API REST lo rende un obiettivo più che eccellente per i robot. Mentre l'automazione è desiderabile per le imprese, è un veleno per un gioco che è divertente. L'ho sperimentato in prima persona in un browser game in passato dove i giocatori di maggior successo erano i robot che sottomettevano tutti.

Dal mio punto di vista attuale non vedo alcuna possibilità di proteggersi dai robot quando costruisco un gioco online multiplayer basato su un'API REST. Eccezione: renderlo open source in modo che tutti possano ospitare la propria istanza per gruppi privati ​​o anche solo se stessi (per non essere infastiditi dai cretini con i robot).

C'è un modo per distinguere tra un giocatore onesto che ha appena lanciato un allarme per la prossima azione possibile e un bot che coglie automaticamente ogni possibilità al suo aspetto? Oltre a tali tappi per spettacoli come captchas. Altrimenti, penserei a un altro stack tecnologico che rende almeno molto più difficile confondere la comunicazione client-server (protocollo binario crittografato proprietario in un client di codice nativo).

Modifica : grazie, le tue risposte sono stimolanti, ma mi hanno anche fatto capire che non è possibile effettuare contromisure specifiche approfondendo i dettagli del gioco. Tuttavia, sarebbe troppo per una domanda su Stack Exchange. Quindi voglio solo sottolineare i punti più importanti:

  • I giocatori esplorano, sviluppano e gestiscono ogni volta che lo desiderano. Le loro attività continuano a funzionare bene quando sono offline (è un gioco pacifico, senza armi coinvolte). Solo l'espansione e il progresso richiedono l'azione dei giocatori. Tali azioni sono limitate da:
  • il tempo è una delle risorse chiave (come nel training di abilità online EVE). Tutti i processi nel gioco lo richiedono. Non ha senso essere online 24/7. Il giocatore medio dovrebbe già avere successo spendendo non più di un'ora ogni giorno in una o due sessioni ( all'incirca , il concetto è ancora in fase di sviluppo).

9
Non riesci a creare il gioco in modo tale che gli altri programmando o acquistando robot non rovinino il divertimento dei giocatori umani? E in secondo luogo, programmare un bot / AI per giocare può essere divertente da solo; non dovrebbe rovinare il divertimento degli altri però.
Kasper van den Berg,

27
"l'automazione [...] è un veleno per un gioco che è divertente." In forte disaccordo. Se il tuo gioco è davvero divertente, perché penalizzare i giocatori per saltare parti in cui non ne hanno? Se gli elementi del tuo gioco sono così noiosi che i giocatori preferiscono non giocare e sentire il desiderio di farsi prendere una sceneggiatura, questo è il vero problema da affrontare.
Marcks Thomas,

6
Il tuo esempio ha una risposta semplice: dai al giocatore gli strumenti in modo che non abbiano bisogno di un bot. ad esempio, lascia che mettano in coda un'azione, piuttosto che incoraggiarli a essere online in un preciso momento o ottenere / creare uno strumento per farlo per loro.

4
Il motivo principale per cui le persone usano i robot è perché alcune parti del gioco sono noiose e noiose per loro (se fossero divertenti, le farebbero semplicemente). Chiaramente i tuoi giocatori si stanno godendo la competizione e la sfida, ma non il gameplay automatizzabile. Potresti provare a cambiare il design del gioco per rimuovere le parti che le persone usano i robot per superare, o riequilibrare il gioco per creare decisioni più difficili e significative che solo un giocatore umano può prendere, e un bot non può (come le scelte strategiche profonde) . Altrimenti, sarai condannato a una corsa agli armamenti e vinceranno i botter.
Superbo

6
tl; dr: alla gente non piacerà competere contro il ragazzo con un allarme e nessun lavoro più che contro il ragazzo con un bot - e questo è ciò che li spingerà a eseguire i robot.
Casuale 832,

Risposte:


51

Se la gente vuole bot, non penso che tu possa davvero fermarli.

Ovviamente puoi attuare molte misure che rendono il imbottigliamento più o meno doloroso. Ma puoi fare così tanto prima che la tua base di codice si trasformi in un pasticcio gigantesco che è un inferno da mantenere, soggetto a errori e che infastidisce gli utenti legittimi. Nel frattempo i botter troveranno sempre un modo per sconfiggere le tue contromisure:

  • Ce ne sono più di te
  • Hanno più tempo libero a disposizione (devi dividere il tempo tra lo sviluppo effettivo e la correzione dei bot, possono hackerare il loro codice per tutto il giorno)
  • Man mano che crei strabilianti salvaguardie, gli autori dei bot saranno ulteriormente incoraggiati perché è divertente rompere la protezione dei bot
  • Se esiste un mercato nero di persone che traggono profitto commercialmente dai robot, più diventa difficile scrivere un bot, più i robot di lavoro diventano preziosi, quindi incentivi il botting

Fondamentalmente rimarrai intrappolato in una corsa agli armamenti con i botter e, basandoti sulla logica lungo i punti di cui sopra, così come sulla mia esperienza con tali giochi, non sarai in grado di tenere il passo.

Alcuni sviluppatori di giochi adottano misure anti-cheat estremamente aggressive: ad esempio, Steam eseguirà la scansione della memoria e del file system per cercare hack e i trasgressori possono essere puniti perdendo account del valore di centinaia di dollari. Eppure ci sono ancora robot e altri hack per i giochi Steam, e alcuni di loro funzionano anche metà del tempo. A differenza di loro, hai un'API che è completamente aperta all'utente e nessun controllo sul computer degli utenti. È una battaglia in salita dall'inizio.

Il problema che stai cercando di risolvere è essenzialmente un test di Turing: tranne che è un test di Turing molto semplice, perché non puoi imbrogliare richiedendo problemi di IA difficili come il linguaggio. Non importa quante euristiche crei, sarebbe banale per un botter aggiungere un po 'di casualità all'azione del bot per farlo imitare quasi esattamente un essere umano. Non sarebbe nemmeno molto difficile avere il robot che ti guarda per un po 'e imparare a programmare le azioni esattamente come te. Quindi quando bandisci il bot, il botter pubblica sul forum un enorme rantolo su come sia solo un giocatore dedicato (e forse in realtà è un falso positivo) e il tuo pubblico principale di giocatori hardcore si alzerà in braccio contro di te.

Rendi il gioco troppo divertente per il bot

Il motivo principale per cui qualcuno usa un bot è perché c'è una parte del gioco che vuole saltare. Se il gioco gli fosse piaciuto e lo trovasse divertente, non lo farebbero giocare al robot, lo farebbero da soli.

Ma se il gioco è così noioso, perché giocarci? Presumibilmente, alcune parti del gioco sono noiose e obbligatorie per arrivare a parti divertenti. Ad esempio, negli MMO a tutti piace salire di livello, ma nessuno vuole uccidere 42.324 topi velenosi non morti per ottenere l'XP. Così hanno permesso al robot di macinarsi e lasciarsi coinvolgere per interpretare la parte divertente.

Questa non è una critica a te o al tuo gioco, ma chiaramente almeno alcuni giocatori trovano noiose alcune parti del tuo gioco. Dovresti vedere se riesci a ridurre queste parti noiose e cercare di aggiungere decisioni più difficili e significative: i robot non sono bravi nella strategia profonda o nel pensiero laterale rispetto all'intelligenza umana, e oltre agli umani si divertono a prendere decisioni di gioco difficili.

Dalla tua descrizione, ho l'impressione che si tratti di un browser game simile a Travian, in cui esiste una coda di build con un singolo ordine di build migliore e alcune attività di "manutenzione" (come mantenere attive le incursioni agricole) che devono essere eseguite. Dici che non c'è conflitto, ma in ogni film drammatico MMO e la politica meschina è inevitabile (l'IMO è l'attrazione principale), quindi sono sicuro che i tuoi giocatori troveranno il modo di sfondare la testa. Con questo tipo di giochi, gran parte del tedio deriva da questi compiti di "manutenzione" - ciò che i giocatori vogliono davvero fare è stringere alleanze e giocare al gioco della diplomazia con clan rivali, la manutenzione diventa quindi una sorta di tassa in cui devi svegliarti fino a un allarme nelle ore dispari per poter entrare in quella divertente parte diplomatica. Quindi tagliare il tedio:

Questo approccio potrebbe non funzionare sempre, sfortunatamente. Non tutti i giocatori hanno la stessa tolleranza al tedio o lo stesso concetto di divertimento. Potresti avere una meccanica di spicco che piace al 99% dei tuoi giocatori, ma l'1% trova noioso. Cosa succede se l'1% inizia a scrivere bot, rovinando il divertimento al 99%? Ma alla fine, è una questione di laurea. Non è mai possibile rimuovere completamente l'imbottigliamento, ma è possibile ridurre al minimo il danno.

Botters sottosquadro

Molti degli effetti veramente negativi dei robot provengono da autori di bot che commercializzano il loro lavoro. Se questo è il tuo caso, potresti semplicemente competere con i robot. Molti giochi online basati in tempo reale dispongono già di funzionalità premium che consentono il time-skipping e l'automazione (come le code di build estese). Questi equivalgono a un bot ufficiale sanzionato dallo sviluppatore. Se li possiedi e li giudichi adeguatamente, i giocatori compreranno il tuo premio invece di comprare i robot. La buona notizia è che sei responsabile dell'API, quindi hai sempre un grande vantaggio nello sviluppo dell'automazione di qualità per il tuo gioco, quindi questa volta è una battaglia persa per i botter.

Questo non eliminerà i botter dilettanti o le persone che ritengono che il tuo premio non abbia un buon rapporto qualità-prezzo, quindi ancora una volta l'efficacia di questo approccio dipende dalla situazione.

Cercali manualmente

Come ho detto sopra, quello che stai facendo è essenzialmente un test di Turing. Poiché l'interazione con l'uomo è notoriamente considerata una difficile sfida del test di Turing, puoi provare a sfruttarla.

Ispeziona manualmente i giocatori di livello superiore e vedi se trovi qualcosa di sospetto. Potresti anche riuscire a cavarsela di tanto in tanto sondandoli in modi limitati solo alla tua immaginazione, per vedere se riesci a ingannare il robot nel fare qualcosa che non farebbe.

Sebbene sia difficile scrivere un algoritmo che rilevi i robot in modo affidabile, non è così difficile per un essere umano imparare a individuarli. Penso che molti giochi per browser utilizzino questa strategia e possa essere piuttosto efficace. Lo svantaggio è che o devi fare un sacco di lavoro noioso tutto il tempo, oppure devi pagare i maestri di gioco per fare pattuglie regolari.


4
Ho scelto questa risposta perché mi sembra la più pensata guardando la domanda un passo indietro, lontano dai dettagli tecnici. Ho pensato a lungo a selezionare Adam Davis perché contiene alcune ottime idee su "come fare".
Peter,

1
@Alomvar Sono contento che sia stato utile. Dato che la domanda ha ottenuto così tanti voti, potresti anche inserire un link al tuo gioco nel tuo profilo :)
Superbo

2
Ugh, Travian è ancora in giro? Ci ho giocato molti anni fa, poi mi sono fermato quando ho capito che il gameplay poteva essere sostanzialmente ridotto a "vinca il migliore sociopatico".
Mason Wheeler,

25

La migliore e unica difesa efficace contro i robot è progettare il tuo gioco in modo tale che i giocatori non sentano il bisogno di automatizzare in primo luogo. Quando i tuoi giocatori automatizzano attività semplici che in realtà non richiedono abilità, è un segno che manca la tua interfaccia utente e stanno sostituendo una funzionalità UI che mancano.

  • Il tuo gioco include compiti ripetitivi in ​​cui il giocatore esegue la stessa azione più e più volte per macinare?

    Rendi questi aspetti del tuo gioco meno ripetitivi e più interessanti da giocare e ripetere.

  • Il tuo gioco richiede ai giocatori di eseguire azioni a volte scomode per loro, come nel cuore della notte o quando sono al lavoro?

    Consenti loro di mettere in coda gli ordini (come "build X1, quindi X2, quindi X3, avviandoli non appena le risorse sono disponibili") o pianifica le azioni in orari specifici in anticipo (build X alle 3:22).

  • Il tuo gioco richiede ai giocatori di agire sugli eventi in tempi molto brevi?

    Consenti loro di configurare il gioco in modo che queste azioni vengano attivate automaticamente

    • quando l'edificio X viene distrutto, ricostruiscilo immediatamente.
    • Quando qualcuno offre la risorsa X per meno di Y soldi, acquista immediatamente fino a Z unità.
    • Vendi automaticamente tutte le risorse X quando lo stock supera Y unità, ma non per meno di Z soldi per unità.

Monitora la tua community. Quando noti che automatizzano qualsiasi altra cosa, ruba l'idea e aggiungi l'opzione per automatizzarla nel gioco principale.


5
Questo è un ottimo suggerimento che migliora anche il tuo gioco e riduce il rischio che i tuoi giocatori diventino più simili a loro stessi. ;-) Se essere un bot è un grande giocatore del tuo gioco, forse il gioco dovrebbe coinvolgere più pensiero umano. Non concordo sul fatto che sia l'unica difesa efficace, ma concordo sul fatto che sia la migliore in assoluto. +1
Dronz,

7
Mentre sono d'accordo con lo spirito di questo, purtroppo la premessa che puoi rendere il gioco non noioso è un errore. E se 10.000 dei tuoi giocatori adorassero il meccanico X, ma 10 lo trovassero noioso e scrivessero robot, rovinando il divertimento dei 10.000? Questo è ciò che accade con i mirini negli sparatutto in prima persona: la soluzione analoga sarebbe quella di rendere la mira meno importante, ma molti giocatori adorano perfezionare le proprie capacità di mira. Sono solo pochi quelli che sentono il bisogno di mirare.
Superbo

1
Adoro il tuo suggerimento, vorrei che più giochi facessero qualcosa del genere invece di chiederti di essere efficiente 24 ore su 24, 7 giorni su 7
meneldal

@Superbest in realtà vedo una soluzione in cui è possibile progettare con l'obiettivo di essere più importanti ma ancora difficili perché il botting sia efficace, ad esempio se si progettano armi con una bassa velocità di fuoco e una mira precisa più utile, allora i giocatori potrebbero unirsi a un dato che non può sparare abbastanza proiettili per ogni giocatore che lo attacca
Matthew Pigram,

2
Questo è esattamente il punto! Se c'è un efficace semplice clic con un pulsante alla volta X bot possibile per il tuo gioco, allora scrivilo tu stesso e consegnalo a tutti! - Lascia che un giocatore decida in anticipo, cosa dovrebbe essere costruito una volta che il tempo è pronto ... Il divertimento nei giochi riguarda le decisioni!
Falco,

23

Non rendere il tuo gioco così vulnerabile agli sforzi di johnny-on-the-spot

Innanzitutto, assicurati che i giocatori che giocano solo venti minuti o un'ora al giorno in una singola seduta non siano in svantaggio enorme per i giocatori che lo lasciano aperto al lavoro e giocano 16 ore al giorno.

Ciò potrebbe richiedere un cambiamento nella meccanica del tuo gioco, ad esempio un'assegnazione di mosse che si riempie quando non stai giocando e consente ai giocatori di eseguire molte mosse rapide quando possono giocare, piuttosto che un meccanismo che richiede un costante mantenimento.

Questo disincentiverà i produttori di bot perché possono tenere il passo con il gioco e non hanno bisogno urgente di creare un automa che esegua azioni per loro.

Richiedi informazioni sul server per ogni azione e rallenta le risposte del server

Quando un giocatore gioca, richiede una pagina che gli presenta l'interfaccia utente con cui interagisce per fare la sua mossa. È possibile inserire elementi, ad esempio elementi di modulo invisibili, che verificano prima di aver effettivamente richiesto la pagina. Un numero casuale che il server memorizza insieme all'ID dell'utente e all'ultima pagina richiesta. Quando arriva un'azione, il server verifica che l'utente abbia restituito lo stesso numero casuale e stia eseguendo un'azione sulla pagina in cui è stata vista l'ultima volta. Questo non significa solo che il bot deve effettuare due chiamate API per ogni azione, ma che gli utenti normali non possono aprire più pagine ed eseguire azioni rapide sequenziali (se questo è un problema con il tuo progetto).

Le due chiamate API ti offrono un modo per rallentare i robot in seguito. Alla fine vedrai schemi sospetti e sarai in grado di captarli. Quando il tuo server rileva un modello sospetto, può ritardare di un secondo la risposta API nella prima chiamata, il che disturberà gli utenti, ma rallenterà davvero i robot. Inoltre, se la seconda richiesta ritorna "troppo rapidamente" (qualunque cosa ciò significhi per il tuo gioco), puoi rifiutarla o ricaricare la pagina con qualche errore di gioco o motivo per richiedere una nuova sottomissione. "Non puoi costruirlo così velocemente. Per favore, prenditi il ​​tuo tempo." per esempio.

Ascolta i tuoi utenti e scoprirai cosa stanno bene e cosa li infastidisce.

Fai le mosse e le azioni richiedono pensiero

Se il gioco è un semplice clicker sui pulsanti, non puoi fare molto con i robot. Valuta di riprogettare il tuo gioco in modo che il gioco stesso esegua un test simile a captcha.

Non sapendo nulla del gioco, non posso suggerire molto. Se si tratta di scegliere dove posizionare un edificio, progettare l'interfaccia in modo che l'utente possa scegliere ovunque, anche se ci sono posizionamenti ovvi che non funzionerebbero. O forse l'utente deve abbinare correttamente l'orientamento verso l'alto affinché il posizionamento abbia successo. Se si tratta di scegliere un'azione, includere un elenco più lungo di azioni, alcune delle quali non avrebbero senso in una determinata situazione.

Includi controlli casuali su bot molto semplici

Aggiungi una finestra di dialogo occasionale, "Sei sicuro?" per esempio. Cambia frequentemente la domanda e il testo e usalo come controllo a campione per i robot.

Cambia l'API

Modificare frequentemente l'API, costringendoli a analizzare effettivamente la pagina Web per le variabili corrette e come vengono restituiti al server web. Se sviluppi l'interfaccia utilizzando un modello, sostituisci il modello con un codice che utilizza un hash salato o un generatore di variabili casuali per ciascun nome di variabile. Quindi inizia a utilizzare JavaScript per codificare le risposte e cambia frequentemente quella codifica. Probabilmente puoi scrivere un software che fa tutto questo per te e avere tutto a caso in ogni momento o semplicemente fare un modello statico che cambi occasionalmente.


Se il suo browser game, l'API cambia e tutto ciò non ha importanza. A meno che tu non sia disposto a cambiare tutto il testo nel client anche ogni volta (Sarebbe orribile per i giocatori. L'interfaccia utente cambia sempre .. ugh ..) e se i testi non cambiano, è molto banale trovare il testo. Anche con solo jQuery. Quando ho giocato a Travian e stavo per attaccare, ho aperto enormi quantità di schede, impostato tutte le informazioni pronte e quando il tempo era scaduto, scorrevo tutto facendo clic su Invia. Non in fondo, solo in fretta, ma i tuoi ritardi api mi avrebbero colpito duramente.
Katu,

1
@Katu A seconda del gioco, molti elementi dell'interfaccia utente potrebbero essere già immagini. Cambiare i nomi delle immagini, alterare leggermente gli hash dei file di immagini, ecc. Renderà più difficile. Almeno li stai costringendo a scaricare ogni elemento solo per capire cosa affrontare. Possono usare javascript per trovare quale elemento si trova in cima a una determinata posizione sullo schermo e quindi provare ad attivarlo, ma anche in questo caso puoi renderlo più difficile facendo in modo che il client javascript riporti indietro le posizioni dei clic del mouse anziché i clic dell'elemento.
Adam Davis,

@Katu Alla fine hai ragione, può essere affrontato, ma se fai lo sforzo richiesto abbastanza grande, ridurrai il numero di persone disposte ad andare allo sforzo, il che potrebbe essere sufficiente.
Adam Davis,

2
Il problema con "mossa assegnazione" è che stai dicendo a tutti i tuoi giocatori che possono giocare solo per 30 minuti al giorno o per quanto tempo ci vuole per usarlo, il che li infastidisce, limita le tue entrate pubblicitarie e crea una grande tentazione per consentire loro di acquistare di più attraverso microtransazioni.
Casuale 832,

Sono d'accordo con il posizionamento e l'orientamento dell'edificio! Questo è allo stesso tempo un vantaggio per gli utenti legittimi e un aspetto negativo per i robot.
miva2,

13

Non puoi fermarli. Ma puoi rendere la loro vita miserabile, poiché devono passare molto tempo a scrivere i loro robot e aggiornarli. Devi usare tutto ciò che devi verificare se l'utente è valido.

  • Controlla le intestazioni delle richieste e rifiuta le richieste con valori non validi. Impostare l'intestazione personalizzata o verificare l'esistenza di un simile user-agent. Certo, è facile da superare, ma è ancora più facile da controllare. Se il botwriter non ha esperienza, potrebbe volerci un po 'di tempo per pensarci! Il tuo compito è forzare il maggior numero di loro a rinunciare, giusto?
  • Probabilmente hai una sorta di firma hash o qualcosa nelle tue richieste, che viene generata sul lato client con una funzione. Bene, allora continua a cambiarlo! Renderlo come script separato non memorizzabile nella cache e modificarlo a intervalli casuali. Creane alcuni o modifica al volo aggiungendo sale casuale al processo di hashing. Anche se è di nuovo facile da superare, questo li costringerà a tenere d'occhio la tua funzione. Potrebbe anche aver bisogno di una sorta di pipeline di distribuzione costante per mantenere gli utenti aggiornati. Altrimenti, i loro robot inizieranno a inviare richieste con hash errate. Puoi persino vietare agli utenti che lo fanno troppo spesso. Gli utenti validi si sposteranno comunque sul tuo client, quindi ogni tanto recupereranno la funzione di hashing. Ricorda solo di aggiornare anche il lato server (il backend basato su script aiuterà davvero qui).
  • Tieni traccia dell'efficienza nell'uso delle risorse. Se vengono spesi all'istante, dopo che qualcosa è diventato conveniente, o se i nuovi raid vengono sempre inviati entro 1-2 secondi dall'ultimo, 24 ore su 24, 7 giorni su 7, allora hai a che fare con qualche giocatore hardcore o un bot. Richiedete captcha da tale persona e forzate il logout. Se continua a fare richieste dopo essere stato disconnesso (bot scritti male!) È un bot. Se tenta di accedere più volte senza successo, probabilmente è un bot. Se gli occorrono alcune ore per la registrazione, potrebbe essere un bot (a questo punto il bot potrebbe richiedere assistenza umana e il proprietario potrebbe dormire).
  • IP. Questo potrebbe eliminare la vendita di bot. Se qualcuno scrive un bot pensando a $$$, potrebbe non voler condividere la fonte. Invece venderanno tempo per i bot. Se sono avidi, potrebbero usare una sola macchina, con single / pochi ips. Ciò significa che molti utenti inizieranno a condividere l'IP. Questo è rischioso, perché lo stesso caso è per le persone che condividono una rete. Dovrai verificare se uno dei controlli precedenti ha esito positivo su un determinato IP e decidere manualmente se si tratta di un gruppo di utenti legittimo o di un esercito di robot.

5
Mentre queste idee sono intelligenti, non sono solo facili da sconfiggere, ma sarei tentato di scrivere un bot semplicemente perché mi sembra così divertente sconfiggerle, anche se non mi importava molto di fare bene nel gioco.
Superbo

1
La maggior parte dei punti sono inutili. Stai pensando al contrario. Indipendentemente da ciò che fai con tutti gli hash, le intestazioni ecc., Il "link per acquistare l'aggiornamento per la mia taverna" deve funzionare, giusto? Ora, creo un bot, che trova quel link, ogni 2 ore fa clic su quello. Non mi interessa quale magia fai dietro, ma il mio bot fa clic proprio come farebbe l'utente. La cosa dell'uso delle risorse è buona, ma può sollevare molti falsi positivi, che richiedono lavoro umano. IP .. Ad esempio, travian bots (non gratuito) è un browser Web personalizzato che invia tutto dal tuo IP.
Katu,

@Superbest sì, è facile battere questa sicurezza una volta. Ma se cambia un po ', dovrai tenere traccia di tali cambiamenti e aggiornare il tuo bot. Ciò significa passare più tempo a scrivere un bot per dedicare meno tempo a giocare :). Inutile.
Polan,

@Katu hai ragione, i miei metodi non fermeranno il bot che è un plugin per un browser e fa semplicemente clic sul client. Ma qualsiasi cosa al di fuori, potrebbe avere problemi. Il solo trovare un collegamento e l'attacco replay non funzionerà, perché l'hash potrebbe richiedere il timestamp e conoscere una chiave semi-segreta. La funzione di hashing cambia di tanto in tanto, quindi se non si dispone di un interprete javascript, è necessario riscrivere il bot continuamente per includere tali modifiche. Questi metodi non impediranno alle persone di scrivere un bot. Richiederà solo una manutenzione costante, quindi non risparmierai molto tempo usando un bot :).
Polan,

2
@Polan Non è un problema se scrivere il bot è più divertente che giocare in primo luogo.
Superbo

8

In generale, distinguere tra robot e umani in modo completamente automatico è difficile, una qualche forma di processo decisionale assistito dall'uomo funziona meglio.

Cosa farei: definire alcune euristiche che suggeriscano che l'utente è probabilmente un bot - che fa molte azioni, che fa cose 24 ore su 24, 7 giorni su 7 ... Quindi se queste euristiche superano una certa soglia, fai un controllo invasivo.

Puoi scansionare manualmente l'attività dei giocatori e vedere se sembra OK. Oppure fai un captcha la prossima volta che l'utente è online. O (ancora più forte) basta inviargli un messaggio di chat in cui spieghi che sospetti che sia un bot e vuoi che risponda con qualcosa di simile a un essere umano per dimostrare che non è un bot (com'è stata la tua giornata? Qual è il tuo film preferito? ... - puoi averne un sacco di quelli). Se non risponde affatto, è probabilmente un robot. Se risponde, controlli manualmente le risposte per somiglianza umana e bandisci i robot. Se la tua euristica è ragionevole, solo una piccola minoranza di utenti verrà messa in discussione e la quantità di risposte da scansionare sarà piccola. E se mantieni la serie di domande private e in evoluzione, non è possibile preparare i robot, a meno che qualcuno non inventi SkyNet.


8
Quando Skynet divenne per la prima volta autocosciente, tutti presumevano che avrebbe cercato di impadronirsi delle forze militari del mondo. Non sapevano che il suo unico obiettivo era quello di dominare l'economia del suo MMO preferito. Così furono impedite le grandi guerre umano-AI, indirizzando le loro ambizioni aggressive in un luogo dove si potevano fare danni limitati.
Dan Bryant,

1
Il problema con i messaggi è che un botter potrebbe facilmente accedere per giocare ogni giorno ed eseguire il bot sullo stesso account per occuparsi del lavoro occupato. Il robot ignorerebbe il messaggio, l'essere umano risponderà la mattina dopo ed è difficile punire un giocatore per aver risposto con poche ore di ritardo a un messaggio inviato nel cuore della notte.
Superbo

@Superbest Se il bot continua a provare a giocare mentre l'umano dorme, hai una buona indicazione che si tratta di un bot. Il problema con le domande è cosa succede se il giocatore non parla inglese?
Loren Pechtel,

@LorenPechtel Bene, come farai a sapere quando dormono? Ci sono molte persone con programmi di sonno molto insoliti là fuori. Solo perché non hanno risposto non significa che fosse un bot, forse non avevano voglia di rispondere allora e hanno deciso di farlo in seguito. Per quanto riguarda la lingua, presumibilmente il giocatore parla la lingua in cui si trova il gioco, altrimenti come sarebbero d'accordo con le regole o ToS? Non che sia difficile distinguere un bot da uno straniero in una conversazione.
Superbo

@Superbest La mia impressione è stata che il gioco non sarebbe continuato mentre la domanda rimaneva senza risposta. Se continuano a inviare comandi inutili è abbastanza evidente che lo sta facendo un bot.
Loren Pechtel,

8

Abbraccia il botter. Hai creato un'API riposante, perfetta per un programmatore per sperimentare l'automazione del tuo gioco. Progetta il tuo gameplay in modo che il bot non ottenga un vantaggio rispetto a un giocatore umano a causa dell'automazione: elimina i vantaggi della velocità di esecuzione ecc. Di una macchina; progetta il tuo gioco in modo che il bot fornisca le stesse entrate di un giocatore umano, se possibile - o almeno fornisca un ambiente più ricco per attirare più giocatori umani.

La domanda è: perché le persone creano bot per il tuo gioco e pagheranno soldi per il privilegio?


4

Non sono assolutamente in disaccordo con le risposte della scienza leggera, ma ci sono cose tecniche che puoi fare per rilevare i botter e alcune cose che rendono la vita più difficile per loro.

  • Valuta i conti in base a quanto sospetti stiano utilizzando un bot. Ciò alimenterà diverse altre tecniche e proteggerà gli utenti legittimi dalla tua ira.

  • Rotazione della chiave del cookie di sessione. Ciò garantisce che il bot conservi i suoi cookie, ma rende anche molto più difficile per un botter condividere i cookie tra browser e bot (il che è molto utile durante lo sviluppo e il test).

  • Limitare il tasso di determinate azioni. Calcolare il più veloce si potrebbe effettivamente fare qualcosa, e monitorare quanto velocemente questi bot stanno facendo. Potrebbe anche valere la pena tenere un registro corrente ed elaborare deviazioni standard. Anche se qualcuno fa qualcosa ogni 10 secondi, se lo fa esattamente ogni 10 secondi è probabilmente un robot. Modifica la loro valutazione e disconnettiti.

  • Rendi l'accesso più difficile sugli account che sospetti possano essere un bot. CAPTCHA e domande e altre cose inevitabili rendono le cose molto più difficili per un aspirante botter per scrivere automaticamente le cose.

  • Monitora il movimento del mouse / della pagina. Questo è abbastanza semplice con javascript al giorno d'oggi, ma i robot non avranno alcun movimento organico del mouse. Se non si ottiene alcun valore tra "clic", potrebbero essere mobili o potrebbero essere un bot. Indagare. Ci sono molti dati da registrare però ... Quindi potresti voler prenotare questo per gli account che hanno già attivato i passaggi precedenti.

  • Costruisci strumenti per collegare gli account per comportamento, IP, sequenze di azioni, cadenza di azioni. Se hai intenzione di vietare le persone, assicurati di disporre degli strumenti per verificare manualmente la loro trasgressione.

  • Ruota lo schema URL, le variabili CSRF, ecc. E fallo spesso. È un grande passo e probabilmente richiede più lavoro anticipato di quanto non varrà mai la pena, ma per lo meno, tutti gli account che smettono improvvisamente di funzionare (o continuano a martellare i vecchi URL e inviare i vecchi nomi delle variabili - registralo!) hanno bisogno di aumentare il loro livello di indice bot.


3

Hai mai considerato di fare dei robot parte integrante del gioco? È difficile per i robot rovinare il gioco per tutti gli altri se tutti sono incoraggiati a crearli. Aggiungi il supporto per gli script e all'improvviso la dinamica del gioco cambia dalle strategie di gestione delle risorse manuali alle strategie di progettazione dei bot.


3

Creare un server solo bot separato. Crea una classifica e celebra i vincitori. Guarda i dati che questo genera. Escludere gli utenti dai server normali il cui profilo di comportamento è simile a quello di un bot.


2

Qualunque cosa tu faccia, ricorda di NON renderlo più fastidioso per il vero giocatore! Molte delle risposte che ho visto (risultati di pagine più lente, che non consentono l'apertura di più pagine per facilitare input più rapidi, ecc.) Impedirebbero anche ai giocatori legittimi di fare le cose velocemente, il che li frustrerà inutilmente.

Imho l'approccio più semplice potrebbe essere quello di applicare il social engineering al problema: 1) aggiungere una clausola NO-BOT esplicita al tuo TOS e aggiungere che il rilevamento dell'attività del bot rimuoverà il giocatore dall'elenco dei punteggi migliori (o avrà l'etichetta "imbroglione" "allegato, quindi le persone non sono così frustrate con loro; se segui questa strada, consenti alle persone di nascondere i record degli imbroglioni).

2) verifica il comportamento simile a un bot (ad esempio ping periodicamente periodici al server o tempistiche quasi perfette per molte ore di seguito) e, in tal caso, imposta l'account in "modalità bot" - visualizza captcha occasionali e quant'altro . se questi vengono ignorati ma il giocatore continua a giocare attivamente, contrassegnalo come "bot" ed escludilo dalle classifiche. se sono indirizzati, contrassegnalo come "power player" e togliilo dalla lista dei bot.

in questo modo la stragrande maggioranza dei giocatori non viene mai influenzata, i giocatori hardcore sono interessati per una breve durata e i robot non "rovinano il gioco" per nessun altro.


Cosa succede se un giocatore di potere decide di bot? Non penso che 'segnare' il giocatore come qualcosa abbia molto senso, è molto sfruttabile. Gioca molto per qualche giorno, poi una volta che ottieni la bandiera, accendi il robot e non farti mai catturare
Dan Pantry,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.