Hallo !
Ich versuche eine Art Code-Injection zu programmieren.
Mein Problem ist nun die Sprungstelle zum Code-Cave
Die Adresse stimmt nicht mit der zugewiesenen überein.
Die Sprungadresse müsste z.B.: $080C0000 lauten. Ich kriege aber $0046e1a0
Mach ich was falsch ? Bin für jede Hilfe dankbar!
Delphi-Quellcode:
var mem :Pointer;
...
procedure Inject;
begin
asm
push mem <-- Sprungstelle zum Code-Cave ... Adresse wird weiter unten im Quelltext ermittelt
ret
nop
end;
end;
procedure Code_Cave;
begin
asm
mov [edi+04],00000001
fcom dword ptr [edi+04]
add esp,08
fnstsw ax
push $006C37C2
ret
end;
end;
procedure Test;
var process,PID:Cardinal;
wbyte:DWORD;
begin
PID:=GetPID('
Anwendung');
process := OpenProcess(PROCESS_ALL_ACCESS,false,PID);
// Speicher anfordern
mem := VirtualAllocEx(process,
nil,19,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//-- Schreibe in mem
WriteProcessMemory(process,mem,@Code_Cave,19, wbyte);
//-- Überschreibe vorhanden Code durch ein sprung zum Code-Cave
WriteProcessMemory(process,ptr($006C37C2),@Inject,8, wbyte);
// VirtualFreeEx(process,mem,0,MEM_RELEASE);
CloseHandle(process);
end;