Hey Leute,
ich hoffe, ihr könnt mir bei meinem kleinen (Verständnis-)Problem weiterhelfen.
Worum gehts?
Ich versuche DMA durch Code Injection auszutricksen. Leider hab ich ein kleines Problem mit der wechselnden Position des Gamecodes im Speicher.
Nehmen wir als Beispiel das Flash-Game Multitask 2. Dort will ich die abgelaufene Zeit freezen (Ich weiß, es macht keinen Sinn, ist jetzt nur ein Beispiel). Da diese Variable wohl dynamisch allociert (DMA) wird, versuche ich den entsprechenden Inkrementierungscode zu NOPpen. Dabei gehe ich wie folgt vor:
So, das klappt soweit so gut.
Mein Problem hier ist jedoch (wie angekündigt), dass die Speicheradresse des Codes bei jedem Neustart (des Games) sich verändert und ich die oben erwähnten Schritte erneut ausführen muss.
Ich hab mehrere DMA-Tutorials durchgelesen. In jedem davon war die Rede, dass die Variablen dynamisch allociert werden, der Gamecode hingegen jedoch statisch ist.
Das ist jedoch ein Widerspruch zu dem, was ich jetzt vorliegen habe.
Wie muss man diese Aussage "der Gamecode ist statisch" verstehen?
Wie kann ich im zweiten Fall die Startadresse herausfinden? Das finden des Offsets dürfte dann ja kein Problem sein.
Ich hoffe ihr könnt mir weiterhelfen.
Grüße,
Riches
ich hoffe, ihr könnt mir bei meinem kleinen (Verständnis-)Problem weiterhelfen.
Worum gehts?
Ich versuche DMA durch Code Injection auszutricksen. Leider hab ich ein kleines Problem mit der wechselnden Position des Gamecodes im Speicher.
Nehmen wir als Beispiel das Flash-Game Multitask 2. Dort will ich die abgelaufene Zeit freezen (Ich weiß, es macht keinen Sinn, ist jetzt nur ein Beispiel). Da diese Variable wohl dynamisch allociert (DMA) wird, versuche ich den entsprechenden Inkrementierungscode zu NOPpen. Dabei gehe ich wie folgt vor:
- Finden der Adresse mit CE (Die Zeit ist hier eine Doublevariable)
- Breakpoint-on-write auf die Variable
- Disassemblieren der gefunden Codestelle
- AusNoppen der betreffenden Zeile
So, das klappt soweit so gut.
Mein Problem hier ist jedoch (wie angekündigt), dass die Speicheradresse des Codes bei jedem Neustart (des Games) sich verändert und ich die oben erwähnten Schritte erneut ausführen muss.
Ich hab mehrere DMA-Tutorials durchgelesen. In jedem davon war die Rede, dass die Variablen dynamisch allociert werden, der Gamecode hingegen jedoch statisch ist.
Das ist jedoch ein Widerspruch zu dem, was ich jetzt vorliegen habe.
Wie muss man diese Aussage "der Gamecode ist statisch" verstehen?
- Heisst es, dass er eine feste Position im Ram oder im Virtual Memory des PCs hat? (Das macht für mich keinen Sinn, da Windows das Programm doch da reinlädt, wo gerade Platz ist, oder?)
- Oder heisst es, dass er ein festes Offset zur Startadresse des Games hat? Also beispielsweise Game.exe+0x00000034.
- oder lieg ich mit beidem total daneben?
Wie kann ich im zweiten Fall die Startadresse herausfinden? Das finden des Offsets dürfte dann ja kein Problem sein.
Ich hoffe ihr könnt mir weiterhelfen.
Grüße,
Riches