Wie funktionieren Ziel-Bots in FPS-Spielen?

Lesezeit: 8 Minuten

Benutzeravatar von user105033
Benutzer105033

Ich war neugierig, ob jemand Erfahrung/Wissen über Aim-Bots in Online-FPS-Spielen wie Counter-Strike hat. Ich bin neugierig und würde gerne mehr darüber erfahren, wie der Cursor weiß, wie man einen gegnerischen Spieler festhält. Wenn ich schummeln wollte, könnte ich natürlich ein paar Cheats herunterladen, also ist das eher eine Lernsache. Was gehört alles dazu? Haken sie die Maus/Tastatur des Benutzers ein, um den Cursor an die richtige Stelle zu bewegen? Woher weiß die Cheat-Anwendung, wohin genau der Cursor zeigen soll? Die Cheat-App muss auf Daten innerhalb der Spielanwendung zugreifen können, wie wird das erreicht?

BEARBEITEN: Zur Antwort von Sids, wie erhalten die Leute diese bekannten Speicherorte, um die Daten abzurufen? EDIT2: Nehmen wir an, ich finde einige Werte, die ich an Position 0xbbbbbbbb mit einem Debug-Programm oder auf andere Weise haben möchte. Wie kann ich jetzt auf die an diesem Ort in der Anwendung gespeicherten Daten zugreifen und sie verwenden, da ich diesen Speicher nicht besitze, sondern das Spiel. Oder habe ich jetzt Zugriff darauf, da ich in den Prozess injiziert habe und einfach den Speicher an dieser Adresse mit memcpy oder so kopieren kann?

Hat noch jemand etwas hinzuzufügen? Versuchen Sie, so viel wie möglich darüber zu lernen!

Benutzeravatar von Ron Warholic
Ron Warholic

Irgendwo im Spielspeicher befindet sich die X-, Y- und Z-Position jedes Spielers. Das Spiel muss diese Informationen kennen, damit es weiß, wo es das Modell des Spielers rendern soll und so weiter (obwohl Sie einschränken können, wie viel der Spiel-Client wissen kann, indem Sie ihm nur Spielerinformationen für sichtbare Spieler senden).

Ein Aimbot kann bekannte Speicherorte nach diesen Informationen scannen und auslesen, wodurch er Zugriff auf zwei Positionen erhält – die des Spielers und die der Feinde. Das Subtrahieren der beiden Positionen (als Vektoren) ergibt den Vektor zwischen den beiden und es ist von dort aus einfach, den Winkel vom aktuellen Blickvektor des Spielers zum gewünschten Winkelvektor zu berechnen.

Indem Sie Eingaben direkt an das Spiel senden (das ist trivial) und mit einigen Konstanten feinabstimmen, können Sie es ziemlich schnell dazu bringen, automatisch zu zielen. Der schwierigste Teil des Prozesses besteht darin, festzulegen, wo die Positionen im Speicher gespeichert sind, und sich an dynamische Datenstrukturen anzupassen, die Spieler auf Sie verschieben (z. B. Frustum Culling).

Beachten Sie, dass diese schwieriger zu schreiben sind, wenn die Adress-Randomisierung verwendet wird, obwohl dies nicht unmöglich ist.

Bearbeiten: Wenn Sie sich fragen, wie ein Programm auf den Speicher anderer Programme zugreifen kann, ist der typische Weg, dies zu tun, durch DLL-Injektion.

Bearbeiten: Da dies immer noch einige Hits bekommt, gibt es mehr Möglichkeiten, wie Aimbots funktionieren, die jetzt beliebter sind; nämlich das Überschreiben (oder Patchen an Ort und Stelle) der Direct3D- oder OpenGL-DLL und das Untersuchen der Funktionsaufrufe zum Zeichnen von Geometrie und Einfügen Ihrer eigenen Geometrie (für Dinge wie Wall-Hacks) oder das Abrufen der Positionen der Modelle für einen Aimbot.

  • Also verwendet jemand DLL-Injektion, wie genau weiß er nun, auf welchen Speicher er zugreifen muss, Trial-and-Error-Prozess, bis er findet, wonach er sucht?

    – Benutzer105033

    17. November 2009 um 15:36 Uhr

  • Mithilfe von Speicherlesern/-scannern, dem Anschließen eines Debuggers, der Verwendung speziell entwickelter Tools oder einer Reihe anderer Tricks können Sie die sich ändernden Werte im Speicher des Prozesses beobachten und die Ausführung anhalten, um den tatsächlich ausgeführten Code zu untersuchen. Um eine bestimmte Adresse zu finden, können Sie normalerweise einen Schnappschuss des Prozessspeichers machen, die eine Variable manipulieren, die Sie lesen möchten (z. B. indem Sie Ihren Player bewegen), einen weiteren Schnappschuss des Speichers machen und sich die geänderten Werte ansehen.

    – Ron Warholic

    17. November 2009 um 15:42 Uhr

  • Sie benötigen keine DLL-Injektion, um auf einen Programmspeicher zuzugreifen. DLL Injection wird verwendet, um Code im selben Adressraum wie der Zielprozess auszuführen. Sie können es dann verwenden, um interne Funktionen dieses Prozesses aufzurufen oder bestimmte Aufrufe abzufangen.

    – mmcdole

    20. November 2009 um 4:15 Uhr

  • Ist es jedoch nicht wahrscheinlich möglich, dass Sie den Speicher des Prozesses aus seinem Adressraum heraus schreiben/lesen müssen, da dies andere Programme daran hindern könnte?

    – Benutzer105033

    20. November 2009 um 19:35 Uhr

  • @MichaelPankov Obwohl ich keine Cheats schreibe, nachdem ich mit einigen Kollegen gesprochen habe, scheint es, dass Sie immer noch in einem anderen Prozess auf den Speicher zugreifen können, solange Sie ausreichende Berechtigungen erhalten. Um sie zu erhalten, müssen Sie lediglich den Prozess mit dem Token-Set starten und den Benutzer (der den Cheat ausführt) bestätigen lassen. Sehen msdn.microsoft.com/en-us/library/windows/desktop/…

    – Ron Warholic

    1. Dezember 2017 um 20:59 Uhr


Interessante Frage – nicht genau Ihre Antwort, aber ich erinnere mich, dass die Leute in den frühen Tagen von Counter-Strike ihre opengl32.dll durch eine verpfuschte ersetzten, die Polygone als transparent darstellte, damit sie durch die Wände sehen konnten.

Die Hacks wurden besser und lästiger, und die Leute wurden kreativer. Jetzt scheint Valve/Steam einen guten Job zu machen, sie zu entfernen. Nur eine kleine Warnung, wenn Sie vorhaben, mit diesem Zeug zu spielen, Steam scannt nach “Hacks” und wenn welche gefunden werden, werden sie Sie dauerhaft sperren

  • Habe gerade in deren Forum nachgeschaut. Früher war es ein Jahr, dann zwei, jetzt ist es dauerhaft.

    Benutzer110714

    17. November 2009 um 18:47 Uhr

  • Habe vor einiger Zeit so einen geschrieben. Hatte Whitewalls + wh + ein einfaches Wireframe-Overlay, um die Sichtbarkeit zu erhöhen 🙂 Und nein, Steam erkennt es immer noch nicht, wenn Sie die opengl32.dll Ihres Systems ersetzen

    – toster-cx

    7. Januar 2016 um 12:13 Uhr


Viele „Ziel-Bots“ sind überhaupt keine Ziel-Bots, sondern Trigger-Bots. Es sind Hintergrundprozesse, die warten, bis sich Ihr Fadenkreuz tatsächlich über einem Ziel befindet, und automatisch ausgelöst werden. Dies kann auf verschiedene Arten erreicht werden, aber viele Spiele machen es einfach, indem sie den Namen von jemandem anzeigen, wenn Ihr Ziel über sie hinweggeht, oder andere Daten im Speicher, die ein Trigger-Bot lokalisieren kann.

Auf diese Weise spielen Sie, indem Sie mit der Maus auf Ihr Ziel schwenken, und sobald Sie mit der Maus darüber fahren, wird ein Schuss ausgelöst, ohne dass Sie selbst schießen müssen.

Sie müssen immer noch in der Lage sein, solche Dinge im Gedächtnis zu lokalisieren und haben die gleichen Probleme wie echte “Aim Bots”.

  • Das erklärt, warum ich einige Aimbots gesehen habe, die den Cursor sehr schnell zufällig herumgeschüttelt haben, müssen nach Namen suchen, die auftauchen, damit sie wissen, wann sie feuern müssen

    – Benutzer105033

    17. November 2009 um 15:46 Uhr

  • Nein…Screenshaking wird durch einen “NoSpread”-Hack verursacht. NoSpread besteht darin, den “Bullet Spread Randomizer” des Spiels zu lesen und sofort zu kompensieren. Das bedeutet, dass die Kugeln immer genau dorthin gehen, wo der Hacker hinzielt, und „es gibt keine Streuung“ (daher der Name des Hacks). In ähnlicher Weise gibt es den „NoRecoil“-Hack, der die Geschütze kompensiert oder, in jüngerer Zeit, annulliert (überschreibt buchstäblich den Rückstoßcode des Spiels mit dem „Nichts tun“-Code), wodurch die Kugelstreuung erhalten bleibt, aber das Zielen viel einfacher wird.

    – XenoRo

    30. April 2012 um 19:39 Uhr

Eine andere Methode, die in der Vergangenheit verwendet wurde, besteht darin, die Netzwerkpaketformatierung zurückzuentwickeln. Ein Man-in-the-Middle-Angriff auf den Paketstrom (der auf demselben System durchgeführt werden kann, auf dem das Spiel läuft) kann Spielerpositionen und andere nützliche Informationen liefern. Gefälschte Pakete können an den Server gesendet werden, um den Spieler zu bewegen, zu schießen oder je nach Spiel alle möglichen Dinge zu tun.

Benutzeravatar von BullyWiiPlaza
BullyWiiPlaza

Schauen Sie sich die Tutorial-Reihe von Fleep an hier. Sein vollständig kommentierter C#-Quellcode kann heruntergeladen werden hier.

Kurzgesagt:

Finden Sie die xyz-Koordinaten Ihres Spielers, die xy-Koordinaten des Cursors sowie alle xyz-Koordinaten der Feinde. Berechnen Sie die Entfernung zwischen Ihnen und dem nächste Feind. Sie können jetzt die Koordinaten des xy-Cursors berechnen, die für das automatische Zielen erforderlich sind.

Alternativ können Sie tote Feinde ausschließen (Gesundheit ist 0), also müssen Sie in diesem Fall auch die Gesundheitsadresse des Feindes finden. Spielerbezogene Daten liegen im Speicher normalerweise nahe beieinander.

Schauen Sie sich noch einmal den Quellcode an, um im Detail zu sehen, wie das alles funktioniert.

Bearbeiten: Ich kenne dieses Offtopic, sorry, aber ich dachte, das würde dem Fragesteller helfen.

Was die Hacking-Industrie noch nicht ausprobiert hat, aber womit ich experimentiert habe, ist Socket-Hijacking. Es mag viel mehr klingen, als es tatsächlich ist, aber im Grunde verwendet es die WinPCap-Treiber, um sich über TCP (Sockets) in die Internetverbindungen des Prozesses einzuklinken, ohne auch nur in die Nähe der Offsets des Prozesses zu gehen.

Dann müssen Sie einfach lernen, wie die TCP-Signale übertragen werden, und sie in einer Hash-Tabelle oder einer Multiplayer-Klasse (Paket) speichern. Dann, nachdem Sie die Informationen abgerufen und die Informationen über das Fenster gelegt haben (nicht eingehakt), einfach transparente Etiketten und 2D-Kästchen über dem Bildschirm des Fensterspiels.

Ich habe es auf Call of Duty 4 getestet und die Standorte von 4 Spielern über TCP erhalten, aber auch, wie Ron Warholic gesagt hat: Alle Hacking-Methoden funktionieren nicht, wenn ein Spieleentwickler nur einen Spieleserver geschrieben hat gibt die Spieler aus, wenn der aktuelle Benutzer den Spieler sehen soll.

Und nach dem Schnitt wird die Übertragung des Standorts dieses Spielers wie für XYZ und Spieler nicht mehr gespeichert und dort nicht gerendert, um den Wallhack zu stoppen. Und Aimbots werden in gewisser Weise die Arbeit blockieren, aber nicht effizient. Wenn Sie also einen Wallhack erstellen möchten, haken Sie sich nicht in den Prozess ein, versuchen Sie, WinPCap zu lernen, und haken Sie sich in die Internetsignale ein. Suchen Sie bei Spielen nicht nach Prozessen, die Internetübertragungen auflisten. Wenn Sie ein Beispiel benötigen, das dies nutzt, suchen Sie nach Rust Radar, das den Standort des Spielers auf einer Karte ausgibt und auch andere Spieler in Ihrer Umgebung ausgibt, die über Internetübertragungen TCP gesendet werden und nicht in das Spiel eingebunden sind.

1416660cookie-checkWie funktionieren Ziel-Bots in FPS-Spielen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy