W wolnym czasie od czasu do czasu pracowałem nad pomysłem na grę. Rozgrywka i zawartość sprawiają, że jest on implementowany jako gra online dla wielu graczy zbudowana z wykorzystaniem dobrze znanych technologii internetowych. Powinieneś wiedzieć, że należy do gatunku strategii i symulacji. Oznacza to: brak biegania z postaciami lub podobnymi, ale tylko akcje atomowe (dotyczące komunikacji klient-serwer), takie jak „buduj rzecz A w lokalizacji X”.
W pewnym momencie zdałem sobie sprawę, że istnieje ogromny problem: posiadanie interfejsu opartego na przeglądarce opartego na interfejsie API REST sprawia, że jest to więcej niż doskonały cel dla botów. Automatyzacja jest pożądana w biznesie, ale jest trucizną dla gry, która jest zabawą. Doświadczyłem tego z pierwszej ręki w grze przeglądarkowej, w której najbardziej udanymi graczami były boty, które podbiły wszystkich.
Z mojego obecnego punktu widzenia nie widzę żadnej możliwości ochrony przed botami podczas budowania gry online dla wielu graczy opartej na interfejsie API REST. Wyjątek: uczynienie go otwartym oprogramowaniem, aby każdy mógł hostować własną instancję dla grup prywatnych, a nawet po prostu siebie (aby nie dać się zirytować palantom z botami).
Czy jest jakiś sposób na rozróżnienie między uczciwym graczem, który właśnie ustawił alarm na następną możliwą akcję, a botem automatycznie wykorzystującym każdą okazję, gdy się pojawi? Poza takimi korkami pokazowymi jak captchas. Jeśli nie, pomyślałbym o innym stosie technologii, który sprawia, że co najmniej znacznie trudniej jest zadzierać z komunikacją klient-serwer (zastrzeżony zaszyfrowany protokół binarny w kliencie natywnym).
Edycja : Dziękuję, twoje odpowiedzi są inspirujące, ale także uświadomiły mi, że nie można podjąć konkretnych środków zaradczych, zagłębiając się w szczegóły gry. To by było jednak za dużo na pytanie na Stack Exchange. Chcę tylko wskazać najważniejsze punkty:
- Gracze odkrywają, rozwijają i zarządzają, kiedy tylko chcą. Ich firmy nadal działają dobrze, gdy są offline (jest to spokojna gra, bez użycia broni). Tylko ekspansja i postęp wymagają działania graczy. Działania te są ograniczone przez:
- czas jest jednym z kluczowych zasobów (jak w szkoleniu umiejętności EVE Online). Wszystkie procesy w grze tego wymagają. Nie ma sensu być online 24/7. Przeciętny gracz powinien odnieść sukces, spędzając nie więcej niż godzinę dziennie w jednej lub dwóch sesjach (z grubsza , koncepcja jest wciąż w fazie rozwoju).
źródło
Odpowiedzi:
Jeśli ludzie chcą botować, nie sądzę, że naprawdę możesz ich powstrzymać.
Możesz oczywiście wdrożyć wiele środków, które sprawiają, że botowanie jest mniej lub bardziej bolesne. Ale możesz zrobić tylko tyle, zanim baza kodu zamieni się w gigantyczny bałagan, który jest piekło w utrzymaniu, podatny na błędy i denerwuje legalnych użytkowników. Tymczasem osoby zajmujące się butelkami zawsze znajdą sposób na pokonanie środków zaradczych:
Zasadniczo zostaniesz uwięziony w wyścigu zbrojeń z dnem, a na podstawie logiki zgodnej z powyższymi punktami, a także mojego doświadczenia z takimi grami, nie będziesz w stanie nadążyć.
Niektórzy twórcy gier stosują wyjątkowo agresywne środki zapobiegające oszustwom: na przykład Steam skanuje pamięć i system plików w poszukiwaniu hacków, a przestępcy mogą zostać ukarani za utratę kont wartych setki dolarów. Jednak nadal są boty i inne hacki do gier Steam, a niektóre z nich działają nawet o połowę krócej. W przeciwieństwie do nich masz interfejs API, który jest szeroko otwarty dla użytkownika i nie ma kontroli nad komputerem użytkownika. Od samego początku jest to bitwa pod górę.
Problem, który próbujesz rozwiązać, to zasadniczo test Turinga: z wyjątkiem tego, że jest to bardzo łatwy test Turinga, ponieważ nie możesz oszukiwać, wymagając trudnych problemów AI, takich jak język. Bez względu na to, ile heurystyk stworzysz, botter może w niewielkim stopniu dodać losowości do działania bota, aby naśladował niemal dokładnie człowieka. Nie byłoby nawet trudno mieć bota, który grał przez chwilę, i uczyć się, jak mierzyć czas akcji dokładnie tak jak ty. Wtedy, kiedy zakaz BOT, słupki Botter ogromny rant na forum o tym, jak on jest tylko dedykowany odtwarzacz (a może on jest rzeczywiście fałszywy alarm) a rdzeń publiczność zapalonych graczy wzrośnie z bronią w ręku przeciwko tobie.
Spraw, by gra była zbyt zabawna, by botować
Głównym powodem, dla którego ktoś używa bota, jest to, że istnieje część gry, którą chce pominąć. Gdyby ta gra sprawiała im przyjemność, nie mieliby bota w nią grać, graliby sami.
Ale jeśli gra jest tak nudna, po co w ogóle grać? Przypuszczalnie niektóre części gry są nudne i obowiązkowe, aby dostać się do części, które są zabawne. Na przykład w MMO wszyscy uwielbiają awansować na wyższy poziom, ale nikt nie chce zabijać 42 324 strasznych nieumarłych szczurów, aby zdobyć XP. Pozwolili więc botowi się zgryźć i wpaść, by zagrać w zabawną rolę.
To nie jest krytyka ciebie ani twojej gry, ale najwyraźniej niektórzy gracze uważają niektóre części gry za nudne. Powinieneś sprawdzić, czy możesz zmniejszyć te żmudne części, i zastanowić się nad dodaniem trudniejszych, znaczących decyzji: Boty nie są dobre w głębokiej strategii lub myśleniu bocznym w porównaniu z ludzką inteligencją, a poza tym ludzie lubią podejmować trudne decyzje w grze.
Z twojego opisu mam wrażenie, że jest to gra przeglądarkowa podobna do Traviana, w której jest kolejka budowania z pojedynczą najlepszą kolejnością budowania i pewnymi zadaniami „konserwacyjnymi” (takimi jak utrzymywanie nalotów farmy), które należy wykonać. Mówisz, że nie ma konfliktu, ale w żadnym dramacie MMO i drobna polityka jest nieunikniona (IMO to główna atrakcja), więc jestem pewien, że twoi gracze znajdą sposoby na uderzenie głową. W tego rodzaju grach większość nudy pochodzi z zadań „utrzymania” - gracze naprawdę chcą zrobić sojusze i grać w grę dyplomacyjną z rywalizującymi klanami, utrzymanie staje się wtedy rodzajem podatku, w którym trzeba się obudzić aż do alarmu w dziwnych godzinach, aby dostać się do tej zabawnej części dyplomatycznej. Wytnij więc nudę:
Takie podejście nie zawsze może niestety działać. Nie wszyscy gracze mają taką samą tolerancję na nudę lub tę samą koncepcję zabawy. Możesz mieć wybitną mechanikę, która spodoba się 99% graczy, ale 1% uważa za nudne. Co jeśli 1% zacznie pisać boty, rujnując zabawę dla 99%? Ale ostatecznie jest to kwestia stopnia. Nigdy nie możesz całkowicie usunąć botowania, ale możesz zminimalizować obrażenia.
Podcięte butelki
Wiele naprawdę negatywnych efektów botów pochodzi od autorów botów, którzy komercjalizują swoją pracę. Jeśli tak jest w twoim przypadku, możesz po prostu konkurować z botami. Wiele gier online opartych na czasie rzeczywistym ma już funkcje premium, które umożliwiają pomijanie czasu i automatyzację (takie jak rozbudowane kolejki kompilacji). Kwoty te stanowią oficjalny bot usankcjonowany przez programistę. Jeśli je posiadasz i odpowiednio je wycenisz, gracze kupią twoją premię zamiast kupować boty. Dobrą wiadomością jest to, że jesteś odpowiedzialny za API, więc zawsze masz silną przewagę w opracowywaniu wysokiej jakości automatyzacji własnej gry, więc tym razem jest to przegrana walka o dno.
Nie wyeliminuje to amatorów-amatorów, ani osób, które uważają, że twoja premia nie jest dobra w stosunku do ceny, więc ponownie skuteczność tego podejścia zależy od sytuacji.
Poszukaj ich ręcznie
Jak powiedziałem powyżej, to, co robisz, jest zasadniczo testem Turinga. Ponieważ interakcja z ludźmi jest znana jako trudne wyzwanie testowe Turinga, możesz spróbować to wykorzystać.
Ręcznie sprawdź graczy na najwyższym poziomie i sprawdź, czy znajdziesz coś podejrzanego. Może nawet uda ci się uciec od czasu do czasu sondowania ich w sposób ograniczony tylko do twojej wyobraźni, aby sprawdzić, czy możesz oszukać bota, aby zrobił coś, czego nie zrobiłby.
Chociaż trudno jest napisać algorytm, który niezawodnie wykrywa boty, nie jest tak trudne dla człowieka, aby nauczyć się je wykrywać. Myślę, że wiele gier przeglądarkowych korzysta z tej strategii i może być całkiem skuteczna. Wadą jest to, że albo musisz cały czas nudzić się, albo płacić mistrzom gry za regularny patrol bota.
źródło
Najlepszą i jedyną skuteczną obroną przed botami jest takie zaprojektowanie gry, aby gracze nie odczuwali potrzeby automatyzacji. Kiedy gracze automatyzują proste zadania, które w rzeczywistości nie wymagają umiejętności, jest to znak, że brakuje interfejsu użytkownika i zastępują brakującą funkcję interfejsu użytkownika.
Czy twoja gra zawiera powtarzające się zadania, w których gracz wykonuje tę samą akcję w celu grindowania?
Spraw, aby te aspekty gry były mniej powtarzalne i bardziej interesujące do grania i ponownego grania.
Czy Twoja gra wymaga od graczy wykonywania czynności, które są dla nich niewygodne, np. W środku nocy lub w pracy?
Pozwól im kolejkować zamówienia (np. „Kompiluj X1, potem X2, a następnie X3, zaczynając każde, gdy tylko zasoby będą dostępne”) lub planuj działania o określonych porach wcześniej (kompilacja X o 03:22).
Czy twoja gra wymaga od graczy działania w bardzo krótkim czasie?
Pozwól im skonfigurować grę w taki sposób, aby działania te były uruchamiane automatycznie
Monitoruj swoją społeczność. Kiedy zauważysz, że automatyzują cokolwiek innego, wykradnij pomysł i dodaj opcję automatyzacji do podstawowej wersji gry.
źródło
Nie narażaj swojej gry na ryzyko związane z Johnnym na miejscu
Po pierwsze, upewnij się, że gracze, którzy grają w twoją grę tylko przez dwadzieścia minut lub godzinę dziennie na jednym posiedzeniu, nie są w bardzo niekorzystnej sytuacji dla graczy, którzy pozostawiają ją otwartą w pracy i grają 16 godzin dziennie.
Może to wymagać zmiany w mechanice gry - na przykład przydziału ruchu, który wypełnia się, gdy nie grasz, i pozwala graczom wykonać wiele szybkich ruchów, gdy mogą grać, zamiast mechanizmu wymagającego ciągłej opieki.
To zniechęci twórców botów, ponieważ mogą nadążyć za grą i nie mają pilnej potrzeby tworzenia automatu, który wykonuje dla nich działania.
Wymagaj informacji o serwerze dla każdej akcji i spowolnij reakcje serwera
Gdy gracz gra w tę grę, prosi o stronę przedstawiającą interfejs użytkownika, z którym wchodzi w interakcję, aby wykonać ruch. Możesz wstawiać elementy, takie jak niewidoczne elementy formularza, które potwierdzają, że faktycznie najpierw poprosiły o stronę. Losowa liczba, którą serwer przechowuje wraz z identyfikatorem użytkownika i stroną, o którą ostatnio prosił. Gdy pojawia się akcja, serwer sprawdza, czy ten użytkownik zwrócił tę samą liczbę losową i wykonuje akcję na stronie, na której był ostatnio widziany. Oznacza to nie tylko, że bot musi wykonać dwa wywołania API dla każdej akcji, ale że zwykli użytkownicy nie mogą otwierać wielu stron i wykonywać sekwencyjnych szybkich akcji (jeśli jest to problem z twoim projektem).
Dwa wywołania API umożliwiają późniejsze spowolnienie botów. W końcu zobaczysz podejrzane wzorce i będziesz mógł je wykryć. Gdy serwer wykryje podejrzany wzorzec, może opóźnić odpowiedź API w pierwszym wywołaniu o sekundę - co zirytuje użytkowników, ale naprawdę spowolni boty. Ponadto, jeśli drugie żądanie powróci „zbyt szybko” (cokolwiek to oznacza dla Twojej gry), możesz je odrzucić lub ponownie załadować stronę z błędem w grze lub powodem żądania ponownego przesłania. „Nie możesz zbudować tego szybko. Nie spiesz się.” na przykład.
Słuchaj użytkowników, a przekonasz się, z czym są w porządku i co ich denerwuje.
Wykonuj ruchy i działania, które wymagają przemyślenia
JEŻELI gra jest prostym przyciskiem, nie możesz wiele zrobić z botami. Rozważ przeprojektowanie gry, aby sama gra wykonała test podobny do captcha.
Nie wiedząc nic o grze, nie mogę wiele sugerować. Jeśli wiąże się to z wyborem miejsca umieszczenia budynku, zaprojektuj interfejs, aby użytkownik mógł wybrać gdziekolwiek, nawet jeśli istnieją oczywiste miejsca, które nie działałyby. A może użytkownik musi poprawnie dopasować orientację, aby umieszczenie zakończyło się powodzeniem. Jeśli wiąże się to z wyborem akcji, dołącz dłuższą listę akcji, z których niektóre nie miałyby sensu w danej sytuacji.
Dołącz losowe, bardzo proste kontrole botów
Dodaj od czasu do czasu okno dialogowe „Jesteś pewien?” na przykład. Często zmieniaj pytanie i sformułowania i używaj go jako kontroli na miejscu dla botów.
Zmień interfejs API
Często zmieniaj interfejs API, zmuszając je do parsowania strony pod kątem poprawnych zmiennych i sposobu, w jaki są zwracane na serwer. Jeśli rozwijasz interfejs za pomocą szablonu, zastąp szablon kodem, który używa solonej wartości skrótu lub generatora zmiennych losowych dla każdej nazwy zmiennej. Następnie zacznij używać javascript do kodowania odpowiedzi i często zmieniaj to kodowanie. Prawdopodobnie możesz napisać oprogramowanie, które robi to wszystko za Ciebie i albo mieć wszystko losowo przez cały czas, albo po prostu zrobić statyczny szablon, który od czasu do czasu zmieniasz.
źródło
Nie możesz ich powstrzymać. Ale możesz sprawić, że ich życie będzie nieszczęśliwe, ponieważ będą musieli spędzać dużo czasu na pisaniu botów i aktualizowaniu ich. Musisz użyć wszystkiego, co musisz zweryfikować, czy użytkownik jest prawidłowy.
źródło
Zasadniczo rozróżnianie botów od ludzi w pełni automatycznie jest trudne, najlepiej działa jakaś forma procesu decyzyjnego wspomaganego przez człowieka.
Co bym zrobił: zdefiniuj niektóre heurystyki, które sugerują, że użytkownik jest prawdopodobnie botem - wykonując wiele czynności, robiąc rzeczy 24/7, ... Jeśli te heurystyki przekroczą pewien próg, wykonaj inwazyjne sprawdzenie.
Możesz ręcznie zeskanować aktywność graczy i sprawdzić, czy wydaje się to w porządku. Lub zrobisz captcha, gdy użytkownik będzie online. Lub (jeszcze silniejszy) po prostu wyślij mu wiadomość na czacie, w której wyjaśnisz, że podejrzewasz, że jest botem i chcesz, aby odpowiedział czymś w rodzaju człowieka, aby udowodnić, że nie jest botem (jak minął dzień? Jaki jest twój ulubiony film? ... - możesz mieć ich kilka). Jeśli w ogóle nie odpowiada, prawdopodobnie jest botem. Jeśli on odpowie, ręcznie sprawdzisz odpowiedzi pod kątem podobieństwa do ludzi i zablokujesz roboty. Jeśli Twoja heurystyka jest rozsądna, tylko niewielka część użytkowników zostanie przesłuchana, a liczba odpowiedzi na skanowanie będzie niewielka. A jeśli zachowasz prywatność i zmienność zestawu pytań, roboty nie będą mogły zostać przygotowane, chyba że ktoś wymyśli SkyNet.
źródło
Ogarnij go. Zbudowałeś spokojny interfejs API, idealny dla programisty do eksperymentowania z automatyzacją twojej gry. Zaprojektuj swoją grę tak, aby bot nie zyskał przewagi nad człowiekiem z powodu automatyzacji - wyeliminuj zalety szybkości wykonywania itp., Które ma maszyna; zaprojektuj swoją grę, aby bot zapewniał takie same dochody jak ludzki gracz, jeśli to możliwe - lub przynajmniej zapewni bogatsze środowisko, aby przyciągnąć więcej ludzkich graczy.
Pytanie brzmi: dlaczego ludzie tworzą boty dla twojej gry i czy zapłacą za przywilej?
źródło
Nie neccessarily zgadzam się z odpowiedziami soft-naukowych, ale nie są sprawy techniczne, które można zrobić , aby wykryć botterów i niektóre rzeczy, które sprawiają, że życie po prostu trudniejsze dla nich.
Oceniaj konta według tego, na ile podejrzewasz, że używają bota. Wpłynie to na kilka innych technik i ochroni prawowitych użytkowników przed twoim gniewem.
Obracanie klucza cookie sesji. Dzięki temu bot zachowuje pliki cookie, ale znacznie utrudnia dzielenie się plikami cookie między przeglądarką a botem (co jest bardzo przydatne podczas opracowywania i testowania).
Ogranicz niektóre działania. Wypracuj jak najszybciej możesz coś zrobić i monitoruj, jak szybko robią to boty. Warto też prowadzić dziennik i opracowywać standardowe odchylenia. Nawet jeśli ktoś robi coś co 10 sekund, jeśli robi to dokładnie co 10 sekund, prawdopodobnie jest botem. Zmodyfikuj ich ocenę i wyloguj się.
Utrudnij logowanie na kontach, które podejrzewasz, że mogą być botem. CAPTCHA, pytania i inne nieuniknione rzeczy znacznie utrudniają potencjalnemu botterowi automatyczne pisanie skryptów.
Monitoruj ruch myszy / strony. W przypadku javascript jest to dość proste, ale boty nie będą organicznie poruszać myszką. Jeśli nie ma żadnych „kliknięć”, mogą być mobilne lub być botem. Zbadać. Jest jednak dużo danych do zarejestrowania ... Możesz więc zarezerwować to dla kont, które już uruchomiły poprzednie kroki.
Twórz narzędzia do łączenia kont według zachowania, adresu IP, sekwencji działań, rytmu akcji. Jeśli zamierzasz banować ludzi, upewnij się, że masz narzędzia do ręcznej weryfikacji ich wykroczeń.
Odwracaj schemat URL, zmienne CSRF itp. I rób to często. To duży krok i prawdopodobnie wymaga więcej pracy z góry niż kiedykolwiek będzie to warte, ale przynajmniej konta, które nagle przestają działać (lub wciąż wbijają stare adresy URL i wysyłają stare nazwy zmiennych - zaloguj się!) wymagają zwiększenia poziomu indeksu bota.
źródło
Czy rozważałeś uczynienie botów integralną częścią gry? Robotom trudno jest zrujnować grę dla wszystkich innych, jeśli wszyscy są zachęcani do ich tworzenia. Dodaj obsługę skryptów i nagle dynamikę zmian w grze - od ręcznych strategii zarządzania zasobami po strategie projektowania botów.
źródło
Utwórz osobny serwer tylko dla botów. Utwórz tabelę wyników i świętuj zwycięzców. Spójrz na dane, które to generuje. Zakazuj użytkownikom normalnych serwerów, których profil zachowania wygląda jak bot.
źródło
Cokolwiek robisz, pamiętaj, aby NIE sprawiać, aby prawdziwy gracz był bardziej denerwujący! Wiele odpowiedzi, które widziałem (wolniejsze wyniki na stronie, niedozwolone otwieranie wielu stron w celu ułatwienia szybszego wprowadzania itp.) Również uniemożliwiłyby legalnym graczom szybkie robienie rzeczy, co po prostu niepotrzebnie ich frustruje.
imho najłatwiejszym rozwiązaniem może być zastosowanie inżynierii społecznej do problemu: 1) dodaj wyraźną klauzulę NO-BOT do swojego TOS i dodaj, że wykrycie aktywności bota spowoduje usunięcie gracza z listy najlepszych wyników (lub oznaczenie „cheater” „dołączone, więc ludzie nie są tak sfrustrowani; jeśli pójdziesz tą drogą, pozwól, aby ludzie ukrywali oszustów).
2) sprawdź zachowanie podobne do botów (np. Regularnie wysyłane pingi do serwera lub zbliżone do idealnego taktowanie przez wiele godzin z rzędu), a jeśli tak, to przełącz konto w „tryb bota” - wyświetlaj od czasu do czasu captchas i tak dalej . jeśli zostaną one zignorowane, ale gracz będzie aktywnie grał, oznacz gracza jako „bota” i wyklucz go z rankingu. jeśli są zaadresowane, oznacz go jako „gracza mocy” i zdejmij z listy botów.
w ten sposób ogromna większość graczy nigdy nie zostaje dotknięta, gracze hardcore pozostają pod wpływem krótkotrwałego działania, a boty nie „niszczą gry” dla nikogo innego.
źródło