Irgendwie reden wir da wohl an einander vorbei. Du sollst nur folgenden Schritt zusätzlich implementieren:
Alt:
Setze Startadresse auf $00400000, kopiere Kram rüber und los geht's.
Neu:
Hole Startadresse aus dem Image der Exe in deren Prozess injiziert werden soll, kopiere Kram rüber und los geht's.
Wo ist denn da das Problem?
Edith sagt:
BaseAddress := VirtualAllocEx(ProcessInfo.hProcess, Pointer(NtHeaders.OptionalHeader.ImageBase), NtHeaders.OptionalHeader.SizeOfImage, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
Da holst Du doch die Baseaddress, sorg einfach dafür, dass das die Base wird, die zur Ziel-Exe passt
Im Code fehlt auch an etlichen Stellen Fehlerbehandlung, gerade Sachen wie VirtualAllocEx und VirtualProtectEx sollte man nicht in "fire and forget"-Manier benutzen sondern immer akribisch auch die Rückgabewerte checken.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet.
" (Henning Richter)