Angenommen ich habe ein Spiel erstellt in dem Bilder gezeichnet werden. Jetzt erstelle ich eine DLL die aus dem Speicher des Spiels ein bestimmtes Bild herraus sucht, es durch StartDrawing und ein paar Zeichungen manipuliert. Das Spiel zeichnet dabei zwar immer das selbe Bild, aber der Inhalt des Bildes wird geändert.
Als Erkennungsmerkmal könnte ich lediglich die größe angeben. Eine Adresse kann dabei nicht vom Spiel zur DLL übemittelt werden.
Jemand eine Idee?
Bild aus fremden Speicher manipulieren
Re: Bild aus fremden Speicher manipulieren
Wenn die Dll vom Spiel geladen wird, sollte es da doch keine Probleme geben. Wenn das Spiel von dir geschrieben wurde.
Eine Dll, die einen fremden Prozess durchsuchen möchte, hat es schwerer. Das wird nur über virtuellen Speicher gehen. In dem Fall riecht das Ganze allerdings etwas faul, gibt halt einen Grund, warum das unter modernen Windows nicht ohne Weiteres möglich ist. Willst du das Titelbild ersetzen oder sowas in der Art? Bei sowas helfe ich nicht weiter. Also hau mal erst ein paar mehr Infos raus.
Eine Dll, die einen fremden Prozess durchsuchen möchte, hat es schwerer. Das wird nur über virtuellen Speicher gehen. In dem Fall riecht das Ganze allerdings etwas faul, gibt halt einen Grund, warum das unter modernen Windows nicht ohne Weiteres möglich ist. Willst du das Titelbild ersetzen oder sowas in der Art? Bei sowas helfe ich nicht weiter. Also hau mal erst ein paar mehr Infos raus.
Gruß, Frank
Re: Bild aus fremden Speicher manipulieren
Es soll eine Erweiterung für den "Game Maker" sein. Also gibt es nicht sonderlich viele Informationen die er von sich preis geben kann.(WindowHandle)
Re: Bild aus fremden Speicher manipulieren
Dann würde ich so vorgehen, dass ich den Prozesshandle ermittle (EnumProcesses oder Process32First/Next) und dann den Speicher des Prozesses mit VirtualAllocEx stückchenweise anfordere und durchsuche.
Gruß, Frank
Re: Bild aus fremden Speicher manipulieren
Mit VirtualAllocEx kann man Speicher in fremden Prozessen allozieren aber nicht auslesen. Dazu gibt es ReadProcessMemory und WriteProcessMemory. Das kann man sich aber sparen indem man die DLL in den Prozess des Spiels injiziert. Dadurch läuft der eigene Code dann im Kontext des Spielprozesses und man kann den Speicher mittels Pointern verarbeiten.Frabbing hat geschrieben:Dann würde ich so vorgehen, dass ich den Prozesshandle ermittle (EnumProcesses oder Process32First/Next) und dann den Speicher des Prozesses mit VirtualAllocEx stückchenweise anfordere und durchsuche.
Um ein bestimmtes Bild zu finden, würde ich einen Hook installieren in eine API, die eben dieses Bild übergeben bekommt oder zurückgibt. Bei Spielen normalerweise per DX oder OGL Hook machbar. Wie man im Detail an das Bild kommt kann man am besten mit nrm Debugger wie OllyDbg abklären, dafür gibts kein allgemeingültiges Rezept.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
