Spiele-Trainer/Injector (Speicher-Manipulator) [Ungelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Bisonte »

Vermutlich klappt es nicht (habe das spiel nicht zum testen), da der Pointer den du im Screenshot ermittelt hast, nicht fix ist. Also nicht immer an der gleichen Stelle.

Dein BasePointer ist ebenfalls nur ein Offset, so wie die Sonne... Du müsstest sozusagen die eine feste Adresse rausbekommen, die sich nie ändert und von dort diverse Pointer ... usw. ein Bild sagt mehr :

Code: Alles auswählen

        BASIS
        |   |
    Offset Offset
        |      |
 @SonneBase @LebenBase
        |      |        
      Wert    Wert
so als beispiel.

Du hast die feste Basis (VTable Start) noch nicht entdeckt.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von NicTheQuick »

Ich hab das noch nie gemacht, aber ich stelle mir das so vor:
Man findet zuerst die Speicheradresse A zu dem Wert, den man ändern will. Dann geht man alle anderen Speicherstellen durch und berechnet die Differenz der Werte an diesen Positionen zu A und speichert sie.
Anschließend startet man das Programm neu und macht das selbe wie vorher. Jetzt vergleicht man die beiden Listen von Differenzen und schaut, ob an bestimmten Stellen gleiche Differenzen stehen. Ist das der Fall, dann sollte die gesuchte Basisadresse B gleich der Adresse sein, an der diese Differenz gefunden wurde MINUS die Differenz selbst.

Also angenommen das Programm nutzt den Speicherbereich 10 bis 24. Dann sucht man den Wert X, den man ändern will, und findet ihn an Adresse A=20. Dann berechnet man die erste Differenzentabelle. Obwohl eine Adresse 32 oder 64 Bit hat, geht man sicherheitshalber nur byteweise vor.

Code: Alles auswählen

Adresse  Wert       Differenz
10       ...        ...
11       ...        ...
12       ...        ...
13       ...        ...
14       18         2
15       ...        ...
16       ...        ...
17       ...        ...
18       ...        ...
19       ...        ...
 A       X          A-X
21       ...        ...
22       ...        ...
23       ...        ...
Die Stellen mit '...' sind zum Erklären gerade unwichtig. Dann startet man das zu untersuchende Programm mal neu, findet das neue A' = 18 und macht wieder eine Differenztabelle.

Code: Alles auswählen

Adresse  Wert       Differenz
10       ...        ...
11       ...        ...
12       ...        ...
13       ...        ...
14       16         2
15       ...        ...
16       ...        ...
17       ...        ...
A'       X          A'-X
19       ...        ...
20       ...        ...
21       ...        ...
22       ...        ...
23       ...        ...
Wie man sieht, ist an Stelle 14 wie beim ersten mal die Differenz 2. Das bedeutet an dieser Stelle befindet sich wahrscheinlich ein statischer Pointer, der bei jedem Programmstart gleich bleibt.
Wenn wir also den Wert an Stelle 14 holen und plus 2 rechnen, dann bekommen wie immer die Speicheradresse von unserem Wert X.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Thorium »

Wenns in ner anderen Sprache funktioniert, dann passt der Pointer.

Ich denke eher da ist irgendwo ein kleiner unscheinbarer Fehler im Code.
Was mir auffällt ist:
Du benutzt kein EnableExplicit. Nutze dies um Tippfehler bei Variablennamen zu vermeiden.
Du prüft keinen Rückgabewert ob der Aufruf überhaupt funktioniert hat. Prüfe alle Rückgabewerte, möglicherweise wurde der Prozess schon nicht fehlerfrei geöffnet.
Problem kann #PROCESS_ALL_ACCESS sein, welches seid Vista einen anderen Wert hat und bei falscher Anwendung zum fehlschlagen von OpenProcess führen kann.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Coder Pinhead »

Da Thorium die Cheat Engine so oft hier erwähnt hat und ich gerade Langeweile hatte hab ich dort mal nach den passenden werten gesucht.

Bild: REMOVED

Offsets: 5578, 868
Base Address: popcapgame1.exe+329670
Thorium hat geschrieben:Du benutzt kein EnableExplicit.
Hab ich bis jetzt noch nie verwendet mal davon ab damit geht es auch nicht :lol:.
Thorium hat geschrieben:Du prüft keinen Rückgabewert ob der Aufruf überhaupt funktioniert hat.
Ist nur ein Test Source der sofern ich verstehe wie ich mit Dynamischen Adressen zu arbeiten hab eh komplett umgeschrieben wird bzw neu geschrieben wird. Habe mich bis jetzt einfach über Debug PID abgesichert ob das Fenster gefunden wird.
Thorium hat geschrieben:Problem kann #PROCESS_ALL_ACCESS sein, welches seid Vista einen anderen Wert hat und bei falscher Anwendung zum fehlschlagen von OpenProcess führen kann.
Ich weiß hab es in der MSDN gelesen. Welchen Windows API Befehl könnte ich alternative nehmen?


Was aber viel wichtiger ist hat inzwischen jemand eine Idee wie ich Dynamische Adressen auslesen und verändern kann :(?
Zuletzt geändert von Coder Pinhead am 01.10.2014 17:09, insgesamt 1-mal geändert.
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Thorium »

Coder Pinhead hat geschrieben: Was aber viel wichtiger ist hat inzwischen jemand eine Idee wie ich Dynamische Adressen auslesen und verändern kann :(?
Ja, der Weg wurde schon gepostet. Die Frage ist was bei dir falsch läuft. Der Weg funktioniert auf jeden Fall, denn den nutze ich ständig. Hab sogar auf der Arbeit ein Programm laufen was ständig Werte aus anderen Programmen per Pointer und Offsets ausliest.

Ich werd mir das am Wochenende mal selbst anschauen, habe das Spiel auch.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Coder Pinhead »

Thorium hat geschrieben:Wenn du mehr Trainer schreiben möchtest, solltest du dich lieber ein wenig mit Assembler auseinandersetzen. Die meisten Trainer überschreiben keine Variablen, sondern ändern den Code, der auf die Variablen zugreift. Damit spart man sich dann auch das ganze Pointer gesuche.
Da mir mal wieder Langweilig war hab ich eben die Assembler Werte rausgesucht hoffe du oder jemand anders kann mir dabei auch Helfen wie ich mit diese Werte in Purebasic arbeiten kann.

Bytes + Opcodes für die Sonne (Original Unverändert):

Code: Alles auswählen

popcapgame1.exe+94445 - 8B 87 78550000        - mov eax,[edi+00005578]
Bytes + Opcodes für die Sonne (Eingefroren auf 1337):

Code: Alles auswählen

popcapgame1.exe+94445 - C7 87 78550000 39050000 - mov [edi+00005578],00000539
Thorium hat geschrieben:Ich werd mir das am Wochenende mal selbst anschauen, habe das Spiel auch.
Dann werde ich mich bis dahin wohl in Geduld üben müssen oder solange rumprobieren bis es endlich funktioniert :mrgreen:.
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Bisonte »

Oder das Spiel ohne Cheat spielen 8)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: Spiele-Trainer/Injector (Speicher-Manipulator)

Beitrag von Coder Pinhead »

Bisonte hat geschrieben:Oder das Spiel ohne Cheat spielen 8)
Keine Sorge hab das Spiel schon längst fair ohne Schummeleien durch gespielt und wenn wäre es meine Sache ob ich mir den Spiel Spaß verderben möchte oder nicht :wink:.
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: Spiele-Trainer/Injector (Speicher-Manipulator) [Ungelöst

Beitrag von Coder Pinhead »

Das Thema hier kann geschlossen werden da bis heute keinerlei hilfreiche Antworten kamen gehe ich davon aus das so etwas mit PureBasic nicht möglich ist. Hinzu kommt das ich in der zwischen zeit vollständig auf C++ umgestiegen bin womit weit aus mehr möglich ist und weil es dort aktivere und Hilfsbereitere Foren giebt.
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Antworten