Wie nehmen Game Bots die Spielwelt und andere Entitäten wahr?

52

Diese Frage beschäftigt mich schon seit einiger Zeit ... hauptsächlich, weil ich Bots für alle Arten von Spielen wie WoW und andere sehe. Meine Frage ist; Woher wissen die Bots, was auf dem Bildschirm angezeigt wird? Ich spiele kein WoW, also kann mein Beispiel falsch sein, aber wenn es zum Beispiel ein Monster gibt, woher weiß der Bot, wo sich das Monster auf dem Bildschirm befindet und wie er damit umgehen kann?

Können Sie dies auf jedes Spiel anwenden oder ist es für jedes Spiel spezifisch? Es tut mir leid, wenn die Frage nicht klar ist ... und ich frage nicht, wie man einen Bot herstellt, sondern wie er Dinge auf dem Bildschirm erkennt, die mich sehr faszinieren!

Danke im Voraus :)

TheRapture87
quelle
14
Meistens greifen diese Bots auf den Speicher des Spiels zu und lesen direkt die Position des Spielelements, anstatt zu versuchen, zu verstehen, was auf dem Bildschirm angezeigt wird.
Alexandre Desbiens
2
Aceboy1993, bist du ein Programmierer? Bitte bearbeite die Frage und lass es uns so oder so wissen. Die Antworten müssen wahrscheinlich etwas anders gemacht werden.
Panzercrisis
3
Nur um es klar auszudrücken; Du sprichst von einer nicht eingebauten Automatisierung des Gameplays, oder? Goldfarming-Bots, -Zielbots und dergleichen? Oder meinst du nur KI-Spieler?
Anko
Hi, ich bin ein Programmierer. Ja, ich spreche über Goldfarming-Bots und Ziel-Bots, aber ich bin auch an KI-Spielern interessiert :)
TheRapture87
3
@ Aceboy1993 Beides abzudecken würde diese Frage zu weit führen. Bitte teilen Sie sie auf.
Mast

Antworten:

77

Es gibt viele Punkte, an denen sich ein Bot ins Spiel einbringen kann.

  • Der Bildschirm ist einer von ihnen, aber bei weitem nicht der nützlichste. Ich habe jedoch einmal einen sehr frühen Aimbot für Counter Strike gesehen, bei dem eine Farbcodierung verwendet wurde. Es gab alternative Charaktermodelle mit einfarbigen Texturen (das Spiel war moddingfreundlich genug, um dies zu ermöglichen) und erkannte dann nur Pixel dieser Farben. Keine sehr effektive Methode. Es war damals schon ziemlich klobig und wird immer weniger brauchbar, weil Grafik-Engines immer leistungsfähiger werden, was bedeutet, dass optische Erkennungsalgorithmen immer detaillierter werden.

  • Ein weiterer Punkt ist das direkte Lesen des Speichers [1] . Es ist möglich, dass ein Programm auf Ihrem Computer den Speicher eines anderen liest. Der Entwickler muss also nur herausfinden, unter welcher Speicheradresse das Spiel die für den Bot relevanten Informationen speichert. Es gibt Tools, die dem Entwickler helfen, das zu finden, was er will, indem sie ein Speicherbild erstellen und verschiedene Suchwerkzeuge bereitstellen. Eine Gegenmaßnahme ist die Verwendung der Adresslayout-Randomisierung, aber ein intelligenter Bot kann möglicherweise immer noch automatisch das finden, wonach er sucht.

  • Es ist möglich, die ausführbare Datei des Spiels selbst zu ändern. Dazu müssen die Bot-Entwickler in Assembler lesen und programmieren können, was mit etwas Übung nicht so schwer ist. Anschließend suchen sie nach dem Code, der die Informationen verarbeitet, die sie interessieren, und schreiben ihn neu, um ihn an ihren Bot weiterzuleiten. Eine mögliche Gegenmaßnahme aus Sicht des Spieleentwicklers besteht darin, den Assembler-Code des Spiels mit einem Obfuscator weniger lesbar zu machen. Diese sind jedoch in der Regel nicht gut für die Leistung und es gibt Tools für viele Obfuscatoren, die ihre Arbeit umkehren.

  • Und dann ist da noch der Netcode. In einem Online-Spiel sendet der Server die Eigenschaften und Positionen aller Objekte im Spiel über das Netzwerk. Der Netzwerkdatenstrom zwischen Server und Client kann abgefangen und analysiert werden. Ein beliebtes Werkzeug dafür ist Wireshark. Wenn der Entwickler den Netcode rückentwickelt hat, kann er einen Bot schreiben, der den Netzwerkverkehr genau wie Wireshark abfängt und die Informationen verwendet, um seine Entscheidung zu treffen. Wenn der Entwickler motivierter ist, kann er sogar einen kompletten Spieleclient von Grund auf neu entwickeln, der das Netzwerkprotokoll implementiert und das Spiel ohne grafische Ausgabe spielt. Solche Bots sind bei Goldbauern sehr beliebt, da der Client ohne die Grafikausgabe in der Regel weitaus ressourcenschonender ist und viele davon auf einem kleinen Server gleichzeitig ausführen kann.


1: Da Sie WoW erwähnen, ist es erwähnenswert, dass das frühe und berüchtigte WoWGlider-Botting-Programm direkten Speicherzugriff verwendet hat. Blizzard hatte ein Unterprogramm namens Warden, das entworfen wurde, um den Zugriff externer Programme auf den internen Spielstatus von WoW zu erkennen und zu blockieren. Da das Bot-Programm diesen Schutz umging und das Gedächtnis ohne Erlaubnis las, wurde der Rechtsstreit MDY gegen Blizzard aus dem Jahr 2006 zugunsten von Blizzard entschieden, da der Bot-Hersteller seine Benutzer dazu ermutigte, eine Urheberrechtsverletzung zu begehen und die DMCA zu verletzen .

Philipp
quelle
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Josh
18

Bots sind Spieler. Sie lesen einfach die Positionen des Spielers / Monsters vom Server und verwenden diese Werte in Kombination mit einem einfachen KI-Skript, um Aktionen im Spiel durchzuführen, indem sie programmgesteuert Tastaturanschläge und Mausklicks simulieren. Wenn Bots tatsächlich einen Algorithmus zur Erkennung des Monsters auf dem Bildschirm und zur Interaktion damit hätten, wäre das eine beeindruckende Software, die Millionen wert wäre. Das ist im Grunde genommen KI für Roboter.

dimitris93
quelle
2
Es ist einfacher, einige Okklusionsprüfungen und Ray-Casts durchzuführen, um zu überprüfen, ob der Bot das Monster gesehen hätte, und dann den Animationsstatus zu verwenden, um zu überprüfen, was das Monster tut.
Ratschenfreak
Dazu müssten Sie das Spiel zurückentwickeln, Ray Casting implementieren und auch den Animationsstatus des Monsters lesen, was das Einfügen von Code und das Ändern der EXE-Datei erfordern würde. Wie ist das einfacher, als die Netzwerkpakete zu lesen, die Sie vom Server erhalten (mit Wireshark, wie von Phillip vorgeschlagen), und dann einfach ein AI-Skript zu haben, um Tastatur- / Mausaktionen basierend auf den Netzwerkpaketen zu simulieren?
dimitris93
2
Ich habe einen "KI-Gegner" -Bot und keinen modifizierten Client-Bot angenommen.
Ratschenfreak
3
@ratchetfreak Oh, jetzt macht es Sinn. Die WoW-Referenz in der Frage impliziert tatsächlich, dass die "Bots" im Grunde Goldfarmer und keine KI-Gegner sind.
dimitris93
7

Phillip gab bereits einen großartigen Überblick darüber, wie die meisten Bots funktionieren, aber ich wollte die Dinge nur etwas detaillierter behandeln, da ich ein bisschen persönliche Erfahrung in der Entwicklung von oder für alle Arten von Bots habe, die er behandelt hat.

In Runescape gab es ein großes Projekt (RSBot), das den Inhalt des Speichers vom Runescape-Client in den lokalen Speicher kopierte und dort den gesamten Status des Spiels anzeigen konnte, ohne dass das Risiko bestand, dass der Client darauf stieß. Es war ein bisschen Reverse Engineering erforderlich, um festzustellen, wo im Speicher gesucht werden musste, um die Zeiger auf die Daten zu finden. Nachdem dies geschehen war, wurde eine API verfügbar gemacht, um die Informationen zu nutzen. Es würde genau wissen, wo auf der Welt sich was befindet, indem es die Koordinaten eines Objekts abruft und sie dann mit der Kameratransformationsmatrix transformiert, um die Position auf dem Bildschirm zu ermitteln. Die Treffer-Masken waren auch lesbar, so dass es trivial war, genau zu bestimmen, in welchen Bereich die Maus bewegt werden musste, um das gewünschte Ergebnis zu erzielen.

Der Bot lieferte eine Reihe von Debugging-Informationen, z. B. Anmerkungen, die dem Entwickler mitteilten, welche Kachelkoordinaten sich an welcher Stelle befinden, welche ID dieses Objekt hat, welche ID zu einem bestimmten Element gehört usw. Diese Informationen könnten dann zur Erstellung von Bots verwendet werden. Der eigentliche Prozess der Erstellung der Bot-Skripte war eigentlich recht einfach. Das Framework bereitgestellt viele Nutzenfunktionen, wie zum Beispiel move_to(world_coordinates)oder mouse_move(x,y)die die spezifizierten Aktionen in einer etwas glaubhafte Weise (Bewegen der Maus entlang einer zufälligen Spline, wiederholt sowohl über den Bildschirm bewegen und Minikarte , usw.) durchführen würde

Auch in Runescape haben Sie die Möglichkeit, die Grafikqualität drastisch zu reduzieren. Es war eigentlich ziemlich einfach, bestimmte Arten von Bots zu erstellen, indem man den Bildschirm filmte und einige grundlegende Computer-Vision-Konzepte anwendete, um ein Modell der Welt zu konstruieren. Mit dieser Technik habe ich sowohl einen Fluchbot als auch einen Schmelzbot hergestellt, die beide recht gut funktionierten. Es würde nur den Frame dauern, die Sättigung so weit wie möglich erhöhen und dann versuchen, Muster daraus zu extrahieren, die dann eine Wahrscheinlichkeitskarte für Klickzonen erzeugen könnten.

Im Falle des Fluch-Bots war das Ziel ein kleinerer Dämon, was nur ein riesiges rotes Ding ist, das trivial zu finden ist. Im Falle des Schmelzbots würde es nach einem kleinen orangefarbenen Trapez aussehen, das von Grau umgeben ist, und das wäre der Ofen. Es würde auch versuchen, eine große, hellgraue L-Form zu finden, die der Bankschalter sein würde. Dies wurde nur mit Verkleinerung und grundlegenden Heuristiken durchgeführt. Es könnte sich auch mit dem handlichen Kompass neben der Minikarte orientieren, um die Kamera in einer zuverlässigeren Position zu positionieren, um die Zielobjekte zu finden.

In verschiedenen Nexon-Spielen vertrauen die Server den Clients sehr. Ich habe dies in Maplestory eine Menge missbraucht, indem ich Karten modifiziert habe, um Gefahren zu beseitigen oder Warps hinzuzufügen, damit ein Bot nicht annähernd so ausgefeilt sein muss. Ich würde auch den Datenverkehr zum und vom Server überwachen, um ein Modell der Welt zu erstellen, das dann verwendet werden könnte, um Monster schnell zu finden und zu töten.

Als ich merkte, dass ich eigentlich keine MMOs mehr spielte und sie nur noch automatisierte, beschloss ich, das Spielen ganz einzustellen. Wenn ich nicht so besorgt wäre, mich legal auszustellen, hätte ich wahrscheinlich einen Mord an MMO-Bots begehen können, aber ich wollte wirklich nicht verklagt werden. Deshalb verbringe ich meine Zeit damit, diese Tage echte Programmierung zu machen!

Kaslai
quelle
Amen bei diesem letzten Absatz. Ich begann zu programmieren, indem ich 1) WoW spielte, 2) WoW drückte und 3) anfing, meinen eigenen Bot für WoW zu schreiben. Die Programmierkenntnisse, die ich in nur 2 Jahren erworben habe, waren wertvoller als alles andere, was ich während des Studiums gelernt habe (naja, zumindest in Bezug auf 'praktisches' Programmieren).
Sebastian Graf
2

Die Antwort von Phillip ist großartig, aber nur eine kurze Anmerkung zum Model / View / Controller- Pattern, kurz MVC.

Ihr Bildschirm ist Teil der "Ansicht", in der Daten aus dem "Modell" angezeigt werden, das auf Wunsch den tatsächlichen Status des Spiels darstellt. Die Bots und Ihr Charakter sind (gewissermaßen) alle im Modell vorhanden. Stellen Sie sich vor, Sie ziehen den Netzstecker aus der Steckdose - das Spiel wird fortgesetzt, obwohl die Ansicht verschwunden ist.

In einem vernetzten Spiel ist das Konzept eines "Modells" etwas kompliziert, da Sie tatsächlich viele Modelle haben. Sie haben das Modell auf dem Server und dann auf jedem Client ein Modell, das sich teilweise aufgrund der vom Server empfangenen Daten selbst aktualisiert. Sie können sich das "Modell" so vorstellen, dass es das Servermodell und das Modell Ihres Kunden umfasst, oder Sie können es sich einfach als das Modell Ihres eigenen Kunden vorstellen. In jedem Fall leben hier die Bots. Ihre "Wahrnehmungen", die wir als Abkürzung für ihre Dateneingabe und ihren Status verwenden könnten, basieren also auf dem aktuellen Status des Modells und der Interaktion zwischen den verschiedenen Entitäten / Objekten innerhalb dieses Modells. In der Praxis kann jeder Bot eine Funktion namens "refreshState" haben, die einmal pro Frame oder so ausgeführt wird und deren Aktualisierung veranlasst wird.

Max Williams
quelle
0

Sie können die Koordinaten von einer Datei oder einem Server lesen, aber auch mit einem System zur Erkennung von Strahlenkollisionen. Es ist üblich, Strahlen zu verwenden, die vom Bot (in diesem Fall) nach außerhalb gehen. Wenn der Strahl mit etwas kollidiert, gibt er einige Informationen an den Bot zurück, z. B. ob der gefundene Strahl ein Spieler, ein Bot, ein Tier oder eine einfache Wand war. Das liegt daran, dass der Spieler und der Bot zum Beispiel eine unsichtbare Kapsel haben, die sie vollständig mit Informationen über ihren Typ (zum Beispiel Mensch, Bot, ...) einbezieht. Damit können sie einen Absturz mit Wänden und anderen Elementen vermeiden, wenn sie Ihnen beispielsweise folgen.

Sie können den Teil Kollisionserkennung dieser Seite sehen

Megasa3
quelle
Dafür
Ja natürlich. Es ist alles programmiert, aber es ist nützlich für freie Pfade oder Fälle wie Bots, die dir folgen und so weiter. In 3D-Spielen ist AFAIK die am häufigsten verwendete Methode und hat zumindest die untersucht, die nicht mmorp sind ... vielleicht hat wow alle Informationen auf dem Server, aber es ist anders als es ist ein großes mmorp.
Megasa3,