Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
21. Sep 2013
Du schreibst einen String, welcher den HEX Wert des neuen Speicherbereiches enthält an eine Stelle, die für ein DWORD gedacht ist. Das kann doch nichts geben. Korrekt wäre folgendes:
PDWord($0042053E)^ := DWord(Memory);
Den grade alloziierten Speicher direkt im finally Block wieder freizugeben, würde ich auch lassen, wenn du nicht willst, dass dein gepatchtes Programm beim Zugriff darauf...
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
21. Sep 2013
Halbwegs. Du musst dir jetzt einfach die genauen Offsets raussuchen, an denen die Adresse steht. Du brauchst ja auch nicht die kompletten Instructions überschreiben. Es reicht ja die (4 Byte lange) Adresse.
Wenn du die genauen Offsets hast, wendest du darauf jeweils einmal VirtualProtect an und schreibst dann mit PDWord(OFFSET)^ := NEWADDRESS die neue Adresse rein.
Forum: Win32/Win64 API (native code)
Delphi
by Zacherl,
21. Sep 2013
WriteProcessMemory würde schon funktionieren, macht aber im eigenen Prozess keinen Sinn. Du kannst einfach mit Zeigern arbeiten z.b.
PByte($00401234)^ := $90; um ein NOP zu setzen. Dementsprechend kannst du auch mit PDWord($00401337)^ := $008457A4; die Adresse patchen.
Dein erster Versuch ist fehlgeschlagen, da du vermutlich die Memory Protection nicht geändert hast. Du musst bevor du...