Hallo liebe Community,
ich interessiere mich für die Theorie hinter den "Memory-Hacks" wie sie insbesondere bei Trainern für Spiele benutzt werden. Der Wikipedia Artikel ist mir irgendwie zu schwammig: http://de.wikipedia.org/wiki/Trainer_(Software)
Mir ist nämlich nicht klar, wie das überhaupt funktionieren kann.
Als Programmierer eines Hauptprogrammes deklariere ich mir ja eine Variable, die dann irgendwo auf den Speicher zeigt um Werte reinzupacken. Ich gehe ja mal davon aus, dass zur Laufzeit entschiedenen wird wo Werte auf meinen Speicher abgebildet werden. Geht ja schlecht zu compilezeit, weil das Programm ja auf unterschiedlichen Rechnern laufen könnte.
Wie ist es dann möglich, dass diese Trainer immer genau "wissen" wo ein Wert hinterlegt wurde ? Der Programmierer des Trainers kann ja schlecht im Vorfeld wissen, welcher Speicher für den abzuspeichernden Wert zur Verfügung stehen wird. Ich gehe mal davon aus, dass ich da irgendwas durcheinander hauhe.
Bpsw. benutzen die Leute diese cheatEngine und dort steht bspw.
Adress 000AFCC4 Value 20
Was um gotteswillen ist denn diese "Adress" ? Ist das der konkrete Speicher meines Rechners? Aber wenn ich bspw. mein Programm jetzt auf einen anderen anderen Rechner start und dort den Trainer, dann kann es ja sein, dass in der Adresse 000AFCC4 irgendetwas anderes hinterlegt ist?
Weil ich ein Stück Code gesehen habe bei dem so auf den Speicher zugegriffen wird:
Das würde ja aber kein Sinn machen?
Nochmal falls es unverständlich ist , konkret habe ich gerade folgendes Bild:
- Hauptogramm wird untersucht.
- Hauptpogramm speichert momentan den Wert 20 in den Speicher mit der Adresse 000AFCC4
- Programmierer schreibt einen Trainer, der den Wert im Speicher mit der Adresse 000AFCC4 umändert.
- Jetzt wird sowohl Trainer als auch das Hauptprogramm auf einen anderen Rechner gestartet.
- Hauptprogramm speichert den Wert 20 nun in eine völlige andere Adresse, der Trainer greift allerdings noch auf die Adresse 000AFCC4 zu.
Kann mir jemand erklären , wo hier der Denkfehler ist?
Viele Grüße
ich interessiere mich für die Theorie hinter den "Memory-Hacks" wie sie insbesondere bei Trainern für Spiele benutzt werden. Der Wikipedia Artikel ist mir irgendwie zu schwammig: http://de.wikipedia.org/wiki/Trainer_(Software)
Mir ist nämlich nicht klar, wie das überhaupt funktionieren kann.
Als Programmierer eines Hauptprogrammes deklariere ich mir ja eine Variable, die dann irgendwo auf den Speicher zeigt um Werte reinzupacken. Ich gehe ja mal davon aus, dass zur Laufzeit entschiedenen wird wo Werte auf meinen Speicher abgebildet werden. Geht ja schlecht zu compilezeit, weil das Programm ja auf unterschiedlichen Rechnern laufen könnte.
Wie ist es dann möglich, dass diese Trainer immer genau "wissen" wo ein Wert hinterlegt wurde ? Der Programmierer des Trainers kann ja schlecht im Vorfeld wissen, welcher Speicher für den abzuspeichernden Wert zur Verfügung stehen wird. Ich gehe mal davon aus, dass ich da irgendwas durcheinander hauhe.
Bpsw. benutzen die Leute diese cheatEngine und dort steht bspw.
Adress 000AFCC4 Value 20
Was um gotteswillen ist denn diese "Adress" ? Ist das der konkrete Speicher meines Rechners? Aber wenn ich bspw. mein Programm jetzt auf einen anderen anderen Rechner start und dort den Trainer, dann kann es ja sein, dass in der Adresse 000AFCC4 irgendetwas anderes hinterlegt ist?
Weil ich ein Stück Code gesehen habe bei dem so auf den Speicher zugegriffen wird:
PHP:
WriteProcessMemory(hProc, (LPVOID)0x000AFCC4, &newValue, (DWORD)sizeof(newValue), NULL);
Das würde ja aber kein Sinn machen?
Nochmal falls es unverständlich ist , konkret habe ich gerade folgendes Bild:
- Hauptogramm wird untersucht.
- Hauptpogramm speichert momentan den Wert 20 in den Speicher mit der Adresse 000AFCC4
- Programmierer schreibt einen Trainer, der den Wert im Speicher mit der Adresse 000AFCC4 umändert.
- Jetzt wird sowohl Trainer als auch das Hauptprogramm auf einen anderen Rechner gestartet.
- Hauptprogramm speichert den Wert 20 nun in eine völlige andere Adresse, der Trainer greift allerdings noch auf die Adresse 000AFCC4 zu.
Kann mir jemand erklären , wo hier der Denkfehler ist?
Viele Grüße

Zuletzt bearbeitet: