30.05.2013, 14:03
Na wenn sich das Offset im Speicherbereich der Startdatei befindet kannste der Einfachheit halber feste Offsets nehmen.
Da Du aber sagtest das bei einem Neustart die Adresse plötzlich anders ist dann wird das damit zusammenhängen das die Datei auf ASLR aufbaut. Code Shifting wäre in diesem Zusammenhang ein weiteres Stichwort.
Das heißt mit anderen Worten das Du die Basisadresse der Startdatei auslesen musst und zu dieser Basis das Offset hinzuaddieren musst wo Du deine Code Injection haben willst.
Das wurde zwar schon mehrfach hier durchgekaut aber hier nochmal als Beispiel...
In der Regel hat ein Programm, oder Spiel, eine Basisadresse von 0x400000h.
Nehmen wir mal an Du willst bei einem Spiel an Adresse 0x8FE56Ah eine Code Injection vornehmen dann würdest Du einfach per Trainer an besagter Adresse eben deinen Code schreiben (beispielsweise einen Jump zu einer Codecave).
Wenn aber jetzt die Basisadresse bei jedem Neustart des eine andere ist kannst Du natürlich nicht an Adresse 0x8FE56Ah eine Injection machen.
Warum? Weil dieser Speicherbreich dem Spiel dann entweder nicht zusteht oder Du damit einen anderen Code des Spiels überschreibst und damit das Spiel zum Absturz bringen kannst.
Aber...
Wenn Du von der Adresse, wo Du was ändern willst, die Basisadresse subtrahierst bekommst Du das Offset relativ zur Basisadresse. Nehmen wir wieder obiges Beispiel. Adresse 0x8FE56Ah - Basisaddy 0x400000h = 0x4FE56Ah. Man könnte also auch sagen wenn ich zur Basisaddy das Offset hinzuaddiere lande ich an der Stelle im Code wo ich meine Injection machen will. Z.B. könnte man das jetzt auch so ausdrücken, das man NICHT schreibt 0x8FE56Ah sondern beispielsweise "Crysis3.exe+4FE56A". Wenn jetzt also z.B. die Basisadresse nicht mehr 0x400000h ist sondern 0xBC0000h dann steht trotzdem an Offset 0x4FE56Ah der Code den Du zu ändern beabsichtigst. Die absolute Adresse ist dann eben NICHT "Basisaddy 0x400000h + Offset 0x4FE56Ah = 0x8FE56Ah... Sondern die Basisaddy 0xBC0000h + Offset 0x4FE56Ah = 0x10BE56Ah.
Ich hoffe das ist Dir so erstmal verständlich. Wenn Du dich ein wenig mit Cheat Engine auskennst, und davon gehe ich aus, dann schau dir mal von diversen Spielen den Code im Dissassembler Fenster an. Zu dem solltest Du mal da in der Menüleiste unter "View" die Option "Show module addresses" zu testzwecken mal aktivieren und deaktivieren um das zu verdeutlichen.
Abschließend dazu nochmal zwei Beispiel Screenshot meinerseits...
Call of Juarez Gunslinger hat auch ne variable Basisadresse...
Screenshot 1 (Erster Start des Spiels)
Screenshot 2 (Spiel einmal neugestartet)
Die jeweilige Basisadresse kann im oberen Teil des Bildes neben "Base" abgelesen werden. Im ersten Bild ist diese 000D0000 und im zweiten 00320000.
Und in den jeweiligen Bildern wirst Du erkennen das unter "Anzeige von Dateiname + Offset" der Code immer gleich ist. Bis auf den in der dritten Zeile.
Und zweifelsohne wirst Du auch erkennen das im unteren Teil des Bildes unter "Anzeige von absoluter Adresse" die Adressen unterschiedlich sind.
Da Du aber sagtest das bei einem Neustart die Adresse plötzlich anders ist dann wird das damit zusammenhängen das die Datei auf ASLR aufbaut. Code Shifting wäre in diesem Zusammenhang ein weiteres Stichwort.
Das heißt mit anderen Worten das Du die Basisadresse der Startdatei auslesen musst und zu dieser Basis das Offset hinzuaddieren musst wo Du deine Code Injection haben willst.
Das wurde zwar schon mehrfach hier durchgekaut aber hier nochmal als Beispiel...
In der Regel hat ein Programm, oder Spiel, eine Basisadresse von 0x400000h.
Nehmen wir mal an Du willst bei einem Spiel an Adresse 0x8FE56Ah eine Code Injection vornehmen dann würdest Du einfach per Trainer an besagter Adresse eben deinen Code schreiben (beispielsweise einen Jump zu einer Codecave).
Wenn aber jetzt die Basisadresse bei jedem Neustart des eine andere ist kannst Du natürlich nicht an Adresse 0x8FE56Ah eine Injection machen.
Warum? Weil dieser Speicherbreich dem Spiel dann entweder nicht zusteht oder Du damit einen anderen Code des Spiels überschreibst und damit das Spiel zum Absturz bringen kannst.
Aber...
Wenn Du von der Adresse, wo Du was ändern willst, die Basisadresse subtrahierst bekommst Du das Offset relativ zur Basisadresse. Nehmen wir wieder obiges Beispiel. Adresse 0x8FE56Ah - Basisaddy 0x400000h = 0x4FE56Ah. Man könnte also auch sagen wenn ich zur Basisaddy das Offset hinzuaddiere lande ich an der Stelle im Code wo ich meine Injection machen will. Z.B. könnte man das jetzt auch so ausdrücken, das man NICHT schreibt 0x8FE56Ah sondern beispielsweise "Crysis3.exe+4FE56A". Wenn jetzt also z.B. die Basisadresse nicht mehr 0x400000h ist sondern 0xBC0000h dann steht trotzdem an Offset 0x4FE56Ah der Code den Du zu ändern beabsichtigst. Die absolute Adresse ist dann eben NICHT "Basisaddy 0x400000h + Offset 0x4FE56Ah = 0x8FE56Ah... Sondern die Basisaddy 0xBC0000h + Offset 0x4FE56Ah = 0x10BE56Ah.
Ich hoffe das ist Dir so erstmal verständlich. Wenn Du dich ein wenig mit Cheat Engine auskennst, und davon gehe ich aus, dann schau dir mal von diversen Spielen den Code im Dissassembler Fenster an. Zu dem solltest Du mal da in der Menüleiste unter "View" die Option "Show module addresses" zu testzwecken mal aktivieren und deaktivieren um das zu verdeutlichen.
Abschließend dazu nochmal zwei Beispiel Screenshot meinerseits...
Call of Juarez Gunslinger hat auch ne variable Basisadresse...
Screenshot 1 (Erster Start des Spiels)
Screenshot 2 (Spiel einmal neugestartet)
Die jeweilige Basisadresse kann im oberen Teil des Bildes neben "Base" abgelesen werden. Im ersten Bild ist diese 000D0000 und im zweiten 00320000.
Und in den jeweiligen Bildern wirst Du erkennen das unter "Anzeige von Dateiname + Offset" der Code immer gleich ist. Bis auf den in der dritten Zeile.
Und zweifelsohne wirst Du auch erkennen das im unteren Teil des Bildes unter "Anzeige von absoluter Adresse" die Adressen unterschiedlich sind.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
![[Bild: signatur6akm7.gif]](https://abload.de/img/signatur6akm7.gif)
Traineranfragen per PM werden prinzipiell gelöscht...
![[Bild: signatur6akm7.gif]](https://abload.de/img/signatur6akm7.gif)