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

Schreibtrainer für Spiele (Spieletrainer)

Intro:

Wir alle haben vor langer Zeit oder vor kurzem einmal Spiele gespielt - Brett, Sport und mit der Einführung von Computertechnologie und Computer in unserem Leben. Aufgrund seines Alters, seiner Gewohnheiten oder einfach nur des Wunsches, sich nach einem harten Arbeitstag zu entspannen und aufzumuntern.

Es scheint, dass das Spiel unbegrenzte Möglichkeiten zur Selbstverwirklichung bietet: als Rennfahrer, Pilot, Killer oder sogar Gott. Aber der Mensch ist so arrangiert - wenn er eine bestimmte Höhe erreicht hat, will er immer noch etwas mehr und findet daher ein neues Ziel oder neue Möglichkeiten.

Es ist klar, dass Entwickler beim Erstellen von Spielen in erster Linie, wenn nicht von ihrem eigenen Geschmack, dann vom Geschmack des Projektmanagers, manchmal von Statistiken, geleitet werden. Aber manchmal möchte man einfach nur die Auswirkungen der Matrix verlangsamen, Indiana Jones ist zum Spiel gewandert und nicht der agilste Held der Spielebranche - Hitman Hitman, der gelernt hat, an den Wänden zu rennen. Zu diesem Zweck werden Trainer erstellt.

Theorie:

Trainer (englischer Trainer) - ein Programm, das das Verhalten des Spiels ändert und normalerweise direkt mit dem RAM des Computers arbeitet.

In den 1980er und 1990er Jahren wurden Trainer normalerweise von Hackern direkt in den Spielcode eingebettet. Beim Start wurde der Trainer zuerst mit dem Dialogfeld "Möchten Sie Cheats verwenden?" Gestartet. Dann wurde der Spielcode ausgeführt. Der Name des Trainers verwendete Zusatzzeichen (+), eines für jede Option des Trainers. Zum Beispiel "Hacker Group präsentiert: Doom +++" - drei Optionen, zum Beispiel Unsterblichkeit, endlose Munition und Teleportation.

Moderne Trainer starten jedoch normalerweise als separates Programm vor dem Spiel und verwenden in ihren Namen ein Zusatzzeichen mit der Anzahl der Optionen danach, z. B. "Doom Trainer +15". Darüber hinaus arbeiten moderne Trainer mit dem RAM 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 Speicherdämpfer, Debugger und Disassembler verwendet. Der einfachste Weg, einen Trainer zu erstellen, besteht darin, nach einem Wert im Speicher zu suchen, der dem gewünschten Spielparameter entspricht. Ändern Sie es dann und durchsuchen Sie die resultierende Liste erneut. Nach mehreren Iterationen wird höchstwahrscheinlich eine kleine Liste von Adressen angezeigt, deren Werte Sie ändern können. Es gibt viele Dienstprogramme wie: ArtMoney, Cheat'o'Matic - Automatisierung des Prozesses zum 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 Zeiger darauf zu finden, möglicherweise mit einem leichten Versatz, wenn sich der Spielwert in einer Datenstruktur befindet. Wenn der Zeiger die Position im Speicher ändert, können Sie nach einem Zeiger auf diesen Zeiger usw. suchen. Sie können bei Anrufen auch Haltepunkte für den Spielwert festlegen und den Code analysieren, der diese liest oder ändert.

Zusammenfassend - was ist es also, DMA? DMA (Dynamic Memory Allocation) ist eine dynamische Speicherzuordnung. Einfach ausgedrückt, speichern DMA-Spiele im Gegensatz zu Nicht-DMA-Spielen die von ihnen verwendeten Werte an Speicheradressen, die sich nach jedem Spielstart ändern. Alle DOS-Spiele verwenden kein DMA, während die meisten Win32-Spiele es verwenden.


Übung:

In diesem Artikel werde ich mich mit den Prinzipien des Schreibens von Trainern für DMA- und Nicht-DMA-Spiele befassen. In RuNet gibt es nur sehr wenige Informationen zu diesem Thema, bereits verfügbare Codebeispiele, und die Schreibweise von Trainern wurde in der Praxis oft nicht getestet, was bedeutet, dass sie Anfänger einfach verwirren können. Wir benötigen lediglich die Programmiersprache Delphi und den TSearch-Debugger.
  1. Nicht-DMA-Spiele:

Wir starten TSearch. Durch Klicken auf Prozess öffnen wählen wir den für uns interessanten Prozess aus der Liste aus. Als nächstes suchen, filtern und bestimmen wir mithilfe der Suche die Adresse des interessierenden Werts. Als Beispiel werde ich das Spiel GTA - Vice City betrachten. Der interessierende Parameter ist die Zeit.

Wie Sie sehen können, habe ich zur Minimierung des Codes keine Überprüfungen auf das Vorhandensein eines Programmfensters durchgeführt. Da ich es nicht für sinnvoll halte, die Anwendung zu minimieren oder zu maximieren, ist es viel praktischer, einen Schreiner zu verwenden und die Spieledatei und den Trainer zusammenzukleben.

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

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

 Implementierung

 {$ R * .dfm}

 Prozedur s1ow_mode; 
 beginnen
 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; 
 beginnen
 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;

 Prozedur TForm1.Timer1Timer (Absender: TObject);
 beginnen
 if (GetAsyncKeyState (VK_LBUTTON) <> 0) dann 
 beginnen
 s1ow_mode;
 Ende;
 if (GetAsyncKeyState (VK_RBUTTON) <> 0) dann
 beginnen
 nos1_mode;
 Ende;
 Ende; 


Schutz:
Wenn das Spiel eine offizielle Highscore-Tabelle hat oder das Spiel vernetzt ist und nicht alle Berechnungen auf der Serverseite durchgeführt werden, ruiniert die Existenz von Trainern das Spiel. In diesem Fall muss ein Schutzsystem gegen Trainer eingebaut werden, da Kopierschutzsysteme diese Aufgabe nicht bewältigen können. Dazu werden die wichtigsten Spielparameter kurz vor der Verwendung verschlüsselt und entschlüsselt oder eine verschlüsselte Kopie erstellt, mit der der ursprüngliche Parameter ständig verglichen wird. Um solche Schutzmaßnahmen zu umgehen, müssen Sie das Programm nicht zerlegen.