WriteProcessMemory - Importabschnitt eines Modules ändern
-
Hallo,
ich möchte Funktionsaufrufe eines anderen Prozesses hooken. Dazu injiziere ich eine Dll-Datei mittels Windows-Hook in einen anderen Prozess. In dieser Dll durchsuche ich alle Module nach der Funktion und ändere deren Sprungadresse auf meine eigene Funktion. Dies tue ich mit WriteProcessMemory().
Dabei halte ich mich an Jeffrey Richters Buch "MS Windows Programmierung für Experten" und dem Kapitel "Api-Hooking".
Richter demonstriert seinen Code am Beispiel Notepads. Wird hier eine Messagebox ausgegeben, fängt dies das Programm ab. Das funktioniert auch bei mir.
Komischerweise funktioniert das nicht bei dem simpelsten MessageBox-programm, das ich selbst programmiert habe (einfaches Fenster, das bei irgendeiner aktion ne message-box ausgibt). Dies liegt daran, dass WriteProcessMemory() beim überschreiben von dll-modulen erfolgreich ist, aber wenn der Prozess als Modul selbst - also das modul xxx.exe - überschrieben werden soll, wird zwar der Importabschnitt gefunden, aber WriteProcessMemory() schlägt wegen Zugriffsverletzung (Fehler 998) fehl.
Gäbe es eine Möglichkeit, mit memcpy() das zu tun? Funktioniert bei euch der Richter mit anderen Prozessen? thx.
-
wo writeprocessmem. nicht funzt da geht memcpy erst recht nicht. wenn der zugriff fehlschlegt dann liegt das wahrscheinlich daran, dass code pages read-only sind. die musste erstmal schreibfähig machen. guckst du: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualprotectex.asp
-
Hey vielen vielen Dank, es funktioniert nun 
Edit: soll ich nach dem Schreibvorgang die codepage wieder auf readonly setzen oder ist das egal?
MfG
-
Dies solltest du der Richtigkeit halber tun wobei es wie du ja selbst sagtest auch so funktioniert.