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

Schreiben von Trainern für Spiele (Spiele-Trainer)

Intro:

Alle von uns, als wir vor langer Zeit oder vor kurzem Spiele - Desktop, Sport und mit der Einführung der Computertechnologie in unser Leben und in Computerspiele spielten. Wegen seines Alters, Gewohnheiten, oder einfach nur zu entspannen und nach einem harten Arbeitstag zu jubeln.

Es scheint, dass das Spiel unbegrenzte Möglichkeiten zur Selbstverwirklichung bietet: als Reiter, Pilot, Mörder oder sogar Gott. Aber der Mensch ist so arrangiert - eine gewisse Höhe zu erreichen, er will noch etwas mehr und findet daher ein neues Ziel oder neue Chancen.

Es ist klar, dass beim Erstellen von Spielen die Entwickler in erster Linie geleitet werden, wenn nicht durch ihren eigenen Geschmack, durch den Geschmack des Projektleiters, manchmal durch die Statistik. Aber nach allem, manchmal wollen Sie die Auswirkungen der Moderation von der Matrix, um in das Spiel Indiana Jones, und nicht die agilsten Helden der Spielindustrie - Hitman Hitman, gelernt, um die Wände laufen. Zu diesem Zweck werden die Trainer geschaffen.

Theorie:

Trainer (englischer Trainer) - ein Programm entwickelt, um das Verhalten des Spiels zu ändern, in der Regel direkt mit dem Computer RAM arbeiten.

In den 1980er und 1990er Jahren wurden Trainer gewöhnlich in den Spielcode von Hackern eingebaut. Am Anfang, der Trainer mit dem Dialogfeld "Möchtest du Cheats benutzen?" Zuerst wurde der Spielcode fortgesetzt. Im Namen der Trainer verwendet Zeichen der Addition (+), eine für jede Option der Trainer. Zum Beispiel "Die Hacker-Gruppe präsentiert: Doom +++" - drei Optionen, zum Beispiel Unsterblichkeit, unendliche Munition und Teleportation.

Moderne Trainer, die in der Regel als separates Programm laufen, vor dem Spiel, und in ihren Namen verwenden Sie ein Hinzufügen Zeichen mit der Anzahl der Optionen nach ihm, zum Beispiel "Doom Trainer +15". Darüber hinaus arbeiten moderne Trainer mit dem Arbeitsspeicher des Spiels und nicht mit seiner ausführbaren Datei, weil die Änderung der ausführbaren Datei durch Kopierschutzsysteme kompliziert wird.

Methoden:

Um Trainer zu schaffen, werden Speicherdämpfer, Debugger und Disassemblierer verwendet. Der einfachste Weg, um einen Trainer zu erstellen, ist, nach einem Wert im Speicher zu suchen, der dem gewünschten Spielparameter entspricht. Dann ändern Sie es und suchen Sie in der resultierenden Liste erneut. Nach einigen Iterationen wird es höchstwahrscheinlich eine kleine Liste von Adressen geben, deren Werte Sie ändern können. Es gibt viele Dienstprogramme wie: ArtMoney, Cheat'o'Matic - Automatisieren des Prozesses der Suche und Ändern von Werten.

In manchen Fällen ändert der gewünschte Spielwert seine Position im Speicher ständig. In diesem Fall können Sie versuchen, einen Zeiger auf sie möglicherweise mit einem kleinen Offset zu finden, wenn der Spielwert in jeder Datenstruktur ist. Wenn der Zeiger die Position im Speicher ändert, können Sie nach einem Zeiger auf diesen Zeiger usw. suchen. Außerdem können Sie Stopppunkte auf Anrufe auf den Spielwert setzen und den Code analysieren, der sie liest oder ändert.

Lasst uns zusammenfassen - also was ist es, DMA? DMA (Dynamic Memory Allocation) ist eine dynamische Speicherzuordnung. Einfach ausgedrückt, DMA-Spiele, im Gegensatz zu Nicht-DMA-Spielen, speichern Sie die Werte, die sie für Speicheradressen verwenden, die sich nach jedem Spiel ändern. Alle Spiele unter DOS - verwenden Sie keine DMA, während die meisten Spiele unter Win32 es verwenden.


Übung:

In diesem Artikel werde ich die Prinzipien des Schreibens von Trainern für DMA und Nicht-DMA-Spiele betrachten. In runet sehr wenig Informationen zu diesem Thema, die bereits vorhandenen Code-Beispiele, Schreib-Trainer sind oft nicht in der Praxis getestet, was bedeutet, sie können einfach verwirren Newcomer. Alles was wir brauchen ist die Delphi Programmiersprache und der TSearch Debugger.
  1. Nicht DMA Spiele:

Starten Sie TSearch. Klicken Sie auf Prozess öffnen, wählen Sie den Prozess, der uns interessiert. Weiterhin, mit der Suche suchen wir, wir herausfiltern und dann bestimmen wir die Adresse des Wertes von Interesse. Als Beispiel werde ich das Spiel GTA - Vice City betrachten. Die interessierte Zeit ist Zeit.

Wie Sie sehen können, ist der Code auf einem Minimum, ich habe nicht die Schecks für die Existenz des Programmfensters verwendet. Da der Sinn beim Falten der Entfaltung die Anwendung nicht sieht, wird es viel praktischer sein, jeden Joeyer zu benutzen und die Spieldatei und den Trainer in einen zu kleben.

 Var
 Form1: TForm1;
 WindowName: Integer;
 ProcessId: Integer;
 ThreadId: Integer;
 HandleWindow: Integer;
 Schreiben: Kardinal;

 Buf: dword;
 Const 
 WindowTitle = 'GTA: Vice City'; 
 Adresse = $ 0097F266; 
 NumberOfBytes = 4; 

 Umsetzung

 {$ R * .dfm}

 Vorgang s1ow_mode; 
 Fange an
 WindowName: = FindWindow (nil, WindowTitle); 
 ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
 HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);
 Buf: = $ 3E90;
 WriteProcessMemory (HandleWindow, ptr (Adresse), @buf, 4, schreiben);
 Ende;

 Vorgang nos1_mode; 
 Fange an
 WindowName: = FindWindow (nil, WindowTitle); 
 ThreadId: = GetWindowThreadProcessId (WindowName, @ ProcessId);
 HandleWindow: = OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);
 Buf: = $ 3F80;
 WriteProcessMemory (HandleWindow, ptr (Adresse), @buf, 4, schreiben);
 Ende;

 Vorgehensweise TForm1.Timer1Timer (Absender: TObject);
 Fange an
 Wenn (GetAsyncKeyState (VK_LBUTTON) <> 0) dann 
 Fange an
 S1ow_mode;
 Ende;
 Wenn (GetAsyncKeyState (VK_RBUTTON) <> 0) dann
 Fange an
 Nos1_mode;
 Ende;
 Ende; 


Schutz:
Wenn das Spiel hat eine offizielle Tabelle der Aufzeichnungen oder das Spiel ist Netzwerk und nicht alle Berechnungen sind auf der Server-Seite, dann die Existenz von Trainer ruiniert das Spiel. In diesem Fall müssen Sie das System mit dem Schutz von Coaches einbetten, da Kopierschutzsysteme diese Aufgabe nicht bewältigen können. Dazu werden die wichtigsten Spielparameter kurzzeitig verschlüsselt und entschlüsselt, oder es wird eine verschlüsselte Kopie erstellt, mit der der ursprüngliche Parameter ständig verglichen wird. Um solche Schutzmaßnahmen zu umgehen, kannst du nicht auf das Zerlegen des Programms verzichten.