Ich wäre sehr froh darüber wenn mir jemand helfen könnte der sich mit ASM auskennt.
Ich habe folgendes Problem:
Ich möchte einen Bot für ein MMORPG schreiben. Dieses MMORPG hat einen Launcher (*.exe) und das eigentliche Spiel (*.dat) was der Launcher startet.
Die *.dat Datei wird anscheinend regelmäßig vom Launcher so verändert das sich einige der Adressen ändern.
-> Vorab sei gesagt: Die Pointer auf die Adressen ändern auch ihre Werte! <-
14:30 - Adresse ist richtig
--- Neustart etc.
15:00 - Adresse ist immer noch richtig (auch an anderen PC'S)
16:00 - Andere Adresse
Deswegen wollte ich jetzt folgendes machen:
Wenn ich im Spiel Energie Verliere:
Einen JMP zu einen CODECAVE dort den richtigen Befehl ausführen den ich im Original mit einem CALL ersetzt habe und dann am ende des Code Caves einfach RET. Vor oder direkt nachdem originalen Befehl packe Ich dann eine Anweisung in dieser Art:
Also:
Original ASM
Code:
[...] MOV EAX, EDI MOV DWORD PTR [EBX+4C], EAX <-- Original ASM MOV EDX, DWORD PTR [EBX+48] [...]
Code:
[...] MOV EAX, EDI MOV CALL 77FA920B <-- Springe zu Code Cave MOV EDX, DWORD PTR [EBX+48] [...]
Code:
77FA9209 JMP 77FA9240 <- Springe zum Ende Des Code Caves 77FA920B <- Start //Mein Code MOV DWORD PTR [0018586F], EAX <- Schreibe den Wert an eine statische Adresse (EAX = Leben) MOV DWORD PTR [EBX+4C], EAX <- Originale Anweisung ausführen //Mein Code 77FA923F RET <- Springe zum originalen Speicherbereich 77FA9240 <- Ende des Code Caves
Also das Spiel crashed nicht etc. aber etwas ist merkwürdig.
Der Wert der Adresse 0018586F (Also die statische Adresse) wird jetzt ab und zu der Wert des Lebens meines Charakters zugewiesen, (<- Das will ich!!), den Wert des Gegners (<- Nützlich.. will ich aber nicht!) und einen unbekannten wert.
Also wie kann ich das Problem beheben?
Scheint irgendwie so als hätte EAX oft einen anderen Wert, das heißt im Original wird "MOV DWORD PTR [EBX+4C], EAX" öfters aufgerufen von verschiedenen stellen im Code und da dort jetzt Call steht wird zu meinem Code Cave gesprungen und dort der neue Wert von EAX in meine statische Adresse geschrieben.
Kann mir jemand verraten wie ich das verhindere (falls es so stimmt) oder was ich besser machen kann?
Tut mir Leid falls ich voll die Scheiße gelabert habe aber das war alles mehr oder weniger Reverse Engineering ich habe mich noch nie mit ASM befasst und das war alle mehr oder weniger geraten und von der Funktionsweise der anderen Befehle abgeleitet.
MfG,
CracKPod
PS:
Falls es Fragen gibt fragt! Es kann durchaus sein das ich mir sehr undeutlich ausgedrückt habe.
PPS:
Falls jemand einen besseren Weg kennt nur zu , postet. Danke






