Jak boty gier postrzegają świat gry i inne podmioty?

52

To pytanie przychodzi mi do głowy od dłuższego czasu ... głównie dlatego, że widzę boty do wszelkiego rodzaju gier, takich jak WoW i inne. Moje pytanie brzmi; skąd boty wiedzą, co pojawia się na ekranie? Nie gram w WoW, więc mój przykład może się mylić, ale jeśli na przykład istnieje potwór, skąd bot wie, gdzie ten potwór znajduje się na ekranie i jak się z nim komunikuje?

Czy możesz zastosować to do dowolnej gry, czy jest to specyficzne dla każdej gry? Przepraszam, jeśli pytanie nie jest jasne ... i nie pytam, jak zrobić bota, więcej pytam, jak wykrywają rzeczy na ekranie, co jest dla mnie dość fascynujące!

Z góry dziękuję :)

TheRapture87
źródło
14
Przez większość czasu boty te zaczepiają się w pamięć gry i bezpośrednio odczytują pozycję elementu gry, zamiast próbować zrozumieć, co jest na ekranie.
Alexandre Desbiens
2
Aceboy1993, jesteś programistą? Edytuj pytanie i daj nam znać, tak czy inaczej. Odpowiedzi na te pytania należy prawdopodobnie wykonać nieco inaczej, zależnie od tego.
Panzercrisis,
3
Gwoli ścisłości; mówisz o niewbudowanej automatyzacji rozgrywki, prawda? Boty, zbieranie złota, aimboty i tym podobne? Czy masz na myśli tylko graczy AI?
Anko,
Cześć, jestem programistą. Tak, mówię o
botach do pozyskiwania złota i botach do
3
@ Aceboy1993 Objęcie obu sprawiłoby, że to pytanie byłoby zbyt szerokie. Podziel je.
Mast

Odpowiedzi:

77

Istnieje wiele punktów, w których bot może wstrzyknąć się do gry.

  • Ekran jest jednym z nich, ale zdecydowanie nie jest najbardziej użyteczny. Jednak kiedyś widziałem bardzo wczesny aimbot do Counter Strike, który wykorzystywał kodowanie kolorami. Przyszedł z alternatywnymi modelami postaci z jednokolorowymi teksturami (gra była na tyle przyjazna dla modyfikacji, aby na to pozwolić), a następnie po prostu wykryła piksele tych kolorów. Jednak niezbyt skuteczna metoda. Było już wtedy dość niezgrabne i staje się coraz mniej realne, ponieważ silniki graficzne stają się coraz potężniejsze, co oznacza coraz więcej szczegółów w celu pomylenia algorytmów optycznego rozpoznawania.

  • Kolejnym punktem jest bezpośredni odczyt pamięci [1] . Możliwe jest, że jeden program na komputerze odczyta pamięć innego. Deweloper musi więc dowiedzieć się, pod jakim adresem pamięci gra zapisuje informacje istotne dla bota. Istnieją narzędzia, które pomagają programistom znaleźć to, czego chcą, tworząc obraz pamięci i udostępniając różne narzędzia wyszukiwania. Środkiem zaradczym jest zastosowanie losowości układu adresu, ale inteligentny bot może nadal automatycznie znaleźć to, czego szuka.

  • Możliwe jest zmodyfikowanie samego pliku wykonywalnego gry. Aby to zrobić, twórcy botów muszą być w stanie czytać i programować w asemblerze, co nie jest trudne przy pewnej praktyce. Następnie szukają kodu, który obsługuje informacje, którymi są zainteresowani, i przepisują go, aby przekazać go swojemu botowi. Możliwym przeciwdziałaniem z punktu widzenia twórcy gry jest użycie obfuscatora, aby kod asemblera gry był mniej czytelny, ale zwykle nie są one dobre dla wydajności i istnieją narzędzia dla wielu zaciemniaczy, które odwracają ich działanie.

  • A potem jest kod netto. W grze online serwer przesyła właściwości i pozycje wszystkich obiektów w grze za pośrednictwem sieci. Strumień danych sieciowych między serwerem a klientem może być przechwytywany i analizowany. Popularnym narzędziem do tego jest Wireshark. Gdy programista poddał inżynierii wstecznej kod sieciowy, może napisać bota, który przechwytuje ruch sieciowy, tak jak robi to Wireshark i wykorzystuje informacje do podjęcia decyzji. Gdy programiści są bardziej zmotywowani, mogą nawet opracować kompletnego klienta gry od zera, który implementuje protokół sieciowy i gra w tę grę, nawet bez żadnej grafiki. Takie boty są bardzo popularne wśród hodowców złota, ponieważ bez wyjścia graficznego klient jest zwykle znacznie bardziej przyjazny dla zasobów, co oznacza, że ​​może uruchomić wiele z nich jednocześnie na małym serwerze.


1: Ponieważ wspominasz o WoW, warto zauważyć, że wczesny i notoryczny program botujący WoWGlider korzystał z bezpośredniego dostępu do pamięci. Blizzard miał podprogram o nazwie Warden, który został zaprojektowany do wykrywania i blokowania dostępu programów zewnętrznych do wewnętrznego stanu gry WoW. Ponieważ program bot ominął tę ochronę i odczytał pamięć bez pozwolenia, pozew MDY przeciwko Blizzard z 2006 r. Został rozstrzygnięty na korzyść Blizzarda z tego powodu, że twórca bota zachęcał i umożliwiał użytkownikom naruszanie praw autorskich i naruszenie DMCA .

Philipp
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Josh
18

Boty to gracze. Po prostu odczytują pozycje gracza / potwora z serwera, tak jak każdy inny gracz, i używają tych wartości w połączeniu z prostym skryptem sztucznej inteligencji do wykonywania działań w grze poprzez programową symulację pociągnięć klawiatury i kliknięć myszą. Gdyby boty faktycznie posiadały algorytm do wykrywania potwora na ekranie i interakcji z nim, byłby to dość imponujący program, który byłby wart miliony. To w zasadzie sztuczna inteligencja dla robotów.

dimitris93
źródło
2
Łatwiej jest wykonać kontrolę okluzji i rzut promieni, aby sprawdzić, czy bot widział potwora, a następnie użyć stanu animacji, aby sprawdzić, co robi potwór.
maniak zapadkowy
Aby to zrobić, musisz odtworzyć grę, wdrożyć ray casting, a także odczytać stan animacji potwora, co wymagałoby wstrzyknięcia kodu i modyfikacji .exe. W jaki sposób jest to prostsze niż czytanie pakietów sieciowych otrzymywanych z serwera (używanie Wireshark, jak sugerował Phillip), a następnie posiadanie skryptu AI do symulacji działań klawiatury / myszy na podstawie pakietów sieciowych?
dimitris93
2
Zakładałem bota „AI przeciwnika”, a nie zmodyfikowanego bota klienta.
maniak zapadkowy
3
@ratchetfreak Oh teraz to ma sens. Odwołanie do WoW w tym pytaniu w rzeczywistości sugeruje, że „boty” są w zasadzie złotymi farmerami, a nie przeciwnikami AI.
dimitris93
7

Phillip przedstawił już świetny przegląd tego, jak działa większość botów, ale chciałem opisać wszystko bardziej szczegółowo, ponieważ mam trochę osobistego doświadczenia w rozwijaniu wszystkich rodzajów botów, które obejmował.

W Runescape istniał duży projekt (RSBot), który kopiowałby zawartość pamięci z klienta Runescape do swojej pamięci lokalnej, gdzie mógł następnie przeglądać cały stan gry bez ryzyka złapania klienta. Wymagało to trochę inżynierii wstecznej, aby ustalić, gdzie w pamięci szukać, aby znaleźć wskaźniki do danych, ale kiedy to zrobili, ujawnili API, aby skorzystać z informacji. Wiedziałby dokładnie, gdzie jest na świecie, uzyskując współrzędne obiektu, a następnie przekształcając je za pomocą matrycy transformacji kamery, aby uzyskać pozycję na ekranie. Maski uderzeń były również czytelne, więc ustalenie, do którego zakresu przesuwać mysz, było banalne, aby uzyskać pożądany wynik.

Bot dostarczył wiele informacji debugujących, takich jak adnotacje, które poinformowały dewelopera, gdzie są współrzędne kafelków, gdzie ma identyfikator tego obiektu, jaki identyfikator należy do danego elementu itp. Informacje te można następnie wykorzystać do stworzenia botów. Rzeczywisty proces tworzenia skryptów botów był w rzeczywistości dość prosty. Szkielet zapewniał wiele funkcji narzędziowych, takich jak move_to(world_coordinates)lub, mouse_move(x,y)które wykonywałyby określone działania w nieco wiarygodny sposób (poruszanie myszą wzdłuż losowego splajnu, wielokrotne poruszanie się zarówno na minimapie, jak i ekranie itd.)

Również w Runescape masz możliwość drastycznego obniżenia jakości grafiki. Stworzenie pewnego rodzaju botów było dość łatwe, filmując ekran i stosując podstawowe koncepcje wizji komputerowej w celu zbudowania modelu świata. Za pomocą tej techniki zrobiłem zarówno robota klątwę, jak i robota do wytapiania, które działały całkiem dobrze. Wystarczy wziąć ramkę, maksymalnie zwiększyć nasycenie, a następnie spróbować wyodrębnić z niej wzory, które mogłyby następnie wygenerować mapę prawdopodobieństwa dla stref kliknięć.

W przypadku bota przekleństwa celem był mniejszy demon, który jest po prostu wielką czerwoną rzeczą, którą można łatwo znaleźć. W przypadku bota do wytopu szukałby małego pomarańczowego trapezu otoczonego szarym, a byłby to piec. Próbowałby także znaleźć duży, jasnoszary kształt litery „L”, który byłby biurkiem bankowym. Dokonano tego dzięki zmniejszeniu skali i podstawowej heurystyce. Mógłby również zorientować się za pomocą poręcznego kompasu obok minimapy, dzięki czemu mógłby ustawić kamerę w bardziej niezawodnej pozycji, aby znaleźć obiekty docelowe.

W różnych grach Nexon serwery bardzo ufają klientom. Nadużyłem tego tonę w Maplestory, modyfikując mapy w celu usunięcia zagrożeń lub dodania wypaczeń, aby bot nie musiał być tak wyrafinowany. Chciałbym również monitorować ruch do iz serwera, aby zbudować model świata, który można by następnie wykorzystać do szybkiego znalezienia i zabicia potworów.

Kiedy zdałem sobie sprawę, że tak naprawdę nie gram już w MMO i po prostu je zautomatyzowałem, postanowiłem całkowicie przestać grać. Gdybym nie martwił się tak, że ujawnię się legalnie, prawdopodobnie zrobiłbym zabójstwo sprzedając boty MMO, ale tak naprawdę nie chciałem zostać pozwany. Dlatego spędzam teraz czas na prawdziwym programowaniu!

Kaslai
źródło
Amen w ostatnim akapicie. Programowanie: 1) grałem w WoW 2) botowałem WoW 3) zaczynałem pisać własnego bota dla WoW. Wiedza programistyczna, którą zdobyłem w ciągu zaledwie 2 lat, była cenniejsza niż cokolwiek innego, czego nauczyłem się podczas studiów (no cóż, przynajmniej do „praktycznego” programowania).
Sebastian Graf
2

Odpowiedź Phillipa jest świetna, ale tylko krótka notatka na temat modelu / widoku / kontrolera lub w skrócie MVC.

Twój ekran jest częścią „widoku”, który przedstawia dane z „modelu”, który jest prawdziwym stanem gry, jeśli chcesz. Boty i twoja postać wszystkie „istnieją” (w pewnym sensie) w modelu. Wyobraź sobie, że odłączyłeś ekran - gra byłaby kontynuowana, nawet jeśli widok zniknął.

W grze sieciowej koncepcja „modelu” jest trochę skomplikowana, ponieważ faktycznie masz wiele modeli. Masz model na serwerze, a następnie model na każdym kliencie, który aktualizuje się częściowo z powodu danych, które otrzymuje z serwera. Możesz pomyśleć o „modelu” obejmującym model serwera i model klienta, lub możesz myśleć o nim tylko o modelu własnego klienta. Tak czy inaczej, tutaj mieszkają boty. Zatem ich „percepcje”, których moglibyśmy użyć jako skrótu dla ich danych wejściowych i stanu, są oparte na stanie modelu w tym czasie i interakcji między różnymi bytami / obiektami w tym modelu. W praktyce każdy bot może mieć funkcję o nazwie „refreshState”, która działa raz na ramkę lub coś i powoduje, że jest aktualizowany ”

Max Williams
źródło
0

Mogą czytać współrzędne z pliku lub serwera, ale także z systemem wykrywania kolizji promieni. Powszechnie stosuje się promienie, które przechodzą od bota (w tym przypadku) na zewnątrz. Jeśli promień zderza się z czymś, zwraca do bota pewne informacje, takie jak to, że znaleziony promień był graczem, botem, zwierzęciem lub zwykłą ścianą. Dzieje się tak dlatego, że na przykład w przypadku gracza i bota mają one niewidoczną kapsułę, która angażuje ich całkowicie w informacje na przykład o swoim typie (człowiek, bot, ...). Dzięki temu mogą uniknąć zderzenia ze ścianami i innymi elementami, jeśli na przykład cię śledzą.

Możesz zobaczyć część Wykrywanie kolizji na tej stronie

Megasa3
źródło
Wymagałoby to jednak wstrzyknięcia kodu do rzeczywistej gry
dimitris93,
Tak oczywiście. Wszystko jest zaprogramowane, ale jest przydatne dla darmowych ścieżek lub przypadków, takich jak boty podążające za tobą i tak dalej. W grach 3D jest najczęstszym sposobem AFAIK i studiował przynajmniej ten, który nie jest mmorp ... może wow ma wszystkie informacje na serwerze, ale różni się tym, że jest dużym mmorp.
Megasa3