This page has been robot translated, sorry for typos if any. Original content here.

Schreibtrainer für Spiele (Spieletrainer)

Intro:

Wir alle haben lange Zeit oder in jüngerer Zeit Spiele gespielt - Brettspiele, Sport und mit der Einführung von Computertechnologie und Computer in unser Leben. Aufgrund ihres Alters, ihrer Gewohnheiten oder einfach des Wunsches, sich nach einem anstrengenden Arbeitstag zu entspannen und aufzuheitern.

Es scheint, dass das Spiel unbegrenzte Möglichkeiten zur Selbstverwirklichung bietet: als Rennfahrer, Pilot, Mörder oder sogar als Gott. Aber der Mensch ist so arrangiert - ab einer bestimmten Größe will er noch etwas mehr und findet daher ein neues Ziel oder neue Möglichkeiten.

Es ist klar, dass sich Entwickler bei der Erstellung von Spielen in erster Linie, wenn nicht nach ihrem eigenen Geschmack, dann nach dem Geschmack des Projektmanagers, manchmal nach Statistiken, richten. Aber manchmal möchte man, dass die Verlangsamungseffekte der Matrix auf das Spiel Indiana Jones übertragen werden und nicht auf den agilsten Helden der Spielebranche - Hitman-Killer, der gelernt hat, an den Wänden entlang zu rennen. Zu diesem Zweck werden Trainer erstellt.

Theorie:

Trainer (engl. Trainer) - Ein Programm, das entwickelt wurde, um das Verhalten des Spiels zu ändern und normalerweise direkt mit dem RAM des Computers zusammenarbeitet.

In den 1980er und 1990er Jahren wurden Trainer in der Regel von Hackern direkt in den Spielcode eingebaut. Beim Start wurde der Coach zunächst mit dem Dialog „Möchtest du Cheats verwenden?“ Gestartet, dann wurde der Spielcode ausgeführt. Im Namen des Trainers wurden Zusatzzeichen (+) verwendet, eines für jede Option des Trainers. Zum Beispiel repräsentiert die "Hacker Group: Doom +++" - drei Optionen, zum Beispiel Unsterblichkeit, unendliche Munition und Teleportation.

Moderne Trainer, die in der Regel vor dem Spiel als separates Programm ausgeführt werden, verwenden in ihrem Namen ein Zusatzzeichen mit der Anzahl der Optionen danach, z. B. "Doom Trainer +15". Außerdem arbeiten moderne Trainer mit dem Arbeitsspeicher des Spiels und nicht mit der ausführbaren Datei, da Änderungen an der ausführbaren Datei durch Kopierschutzsysteme erschwert werden.

Methoden:

Zum Erstellen von Trainern werden Speicherauszüge, Debugger und Disassembler verwendet. Der einfachste Weg, einen Trainer zu erstellen, ist die Suche nach einem Wert im Speicher, der den gewünschten Spielparametern entspricht. Dann ändere es und sieh noch einmal in der resultierenden Liste nach. Nach mehreren Iterationen verbleibt wahrscheinlich eine kleine Liste von Adressen, deren Werte Sie ändern können. Es gibt viele Hilfsprogramme wie: ArtMoney, Cheat'o'Matic - automatisiert das Finden und Ändern von Werten.

In einigen Fällen ändert der gewünschte Spielwert ständig seine Position im Speicher. In diesem Fall können Sie versuchen, einen leicht versetzten Zeiger darauf zu finden, wenn sich der Spielwert in einer Datenstruktur befindet. Wenn der Zeiger seine Position im Speicher ändert, können Sie nach einem Zeiger auf diesen Zeiger usw. suchen. Sie können den Spielwert auch anhalten und den Code analysieren, mit dem er gelesen oder geändert wird.

Was ist DMA? DMA (Dynamic Memory Allocation) ist eine dynamische Speicherzuordnung. Einfach ausgedrückt, speichern DMA-Spiele im Gegensatz zu Nicht-DMA-Spielen die Werte, die sie für Adressen verwenden, im Speicher, die sich nach jedem Spielstart ändern. Alle Spiele unter DOS verwenden DMA nicht, während die meisten Spiele unter Win32 es verwenden.


Übung:

In diesem Artikel beschäftige ich mich mit den Prinzipien des Schreibens von Trainern für DMA- und Nicht-DMA-Spiele. In RuNet gibt es zu diesem Thema nur sehr wenige Informationen, bereits vorhandene Codebeispiele, das Schreiben von Trainern wird in der Praxis oft nicht getestet und kann daher Neulinge einfach verwirren. Wir brauchen nur die Delphi-Programmiersprache und den TSearch-Debugger.
  1. Nicht DMA-Spiele:

Führen Sie TSearch aus. Mit einem Klick auf den Open Process wählen wir den gewünschten Prozess aus der Liste aus. Als nächstes suchen wir mit der Suche, filtern heraus und bestimmen dann die Adresse des interessierenden Werts. Als Beispiel werde ich das Spiel GTA - Vice City betrachten. Die Zinsanzeige ist die Zeit.

Wie Sie sehen, ist der Code auf einem Minimum, ich habe keine Überprüfungen für das Vorhandensein eines Programmfensters verwendet. Da ich nicht sehe, ob die Anwendung geklappt werden soll, ist es viel praktischer, einen beliebigen Joyner zu verwenden und die Spieldatei und den Trainer zusammenzukleben.

 var
 Form1: TForm1;
 WindowName: Ganzzahl;
 ProcessId: integer;
 ThreadId: Ganzzahl;
 HandleWindow: Integer;
 schreibe: Kardinal;

 buf: dword;
 const 
 WindowTitle = 'GTA: Vice City';  
 Adresse = $ 0097F266; 
 NumberOfBytes = 4;  

 Implementierung

 {$ R * .dfm}

 procedure s1ow_mode; 
 beginne
 WindowName: = FindWindow (nil, WindowTitle); 
 ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
 HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);
 buf: = $ 3E90;
 WriteProcessMemory (HandleWindow, ptr (Adresse), @buf, 4, write);
 Ende;

 Prozedur nos1_mode; 
 beginne
 WindowName: = FindWindow (nil, WindowTitle); 
 ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
 HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);
 buf: = $ 3F80;
 WriteProcessMemory (HandleWindow, ptr (Adresse), @buf, 4, write);
 Ende;

 procedure TForm1.Timer1Timer (Sender: TObject);
 beginne
 if (GetAsyncKeyState (VK_LBUTTON) <> 0) dann 
 beginne
 s1ow_mode;
 Ende;
 if (GetAsyncKeyState (VK_RBUTTON) <> 0) dann
 beginne
 nos1_mode;
 Ende;
 Ende; 


Schutz:
Wenn das Spiel eine offizielle Highscore-Tabelle hat oder wenn das Spiel vernetzt ist und nicht alle Berechnungen auf der Serverseite stattfinden, ruiniert die Existenz von Trainern das Spiel. In diesem Fall ist es notwendig, ein Schutzsystem gegen Trainer aufzubauen, da Kopierschutzsysteme diese Aufgabe nicht bewältigen. Dazu werden die wichtigsten Spielparameter kurz vor der Verwendung ver- und entschlüsselt oder eine verschlüsselte Kopie erstellt, mit der der Originalparameter ständig verglichen wird. Um solche Schutzmechanismen zu umgehen, muss das Programm zerlegt werden.