Hi,
Mein langfristiges Ziel ist ein
API-Hook. Jedoch bin ich gerade selbstständig etwas am rumspielen und am rumprobieren. Das ganze hat wahrscheinlich nicht viel mit
API-Hooks zu tun aber das ist jetzt nicht wichtig.
Ich knall euch einfach Code vorn Kopf:
Delphi-Quellcode:
procedure DerAndere;
begin
ShowMessage('
Da bin ich!');
end;
procedure Opfer;
begin
ShowMessage('
Opfer!');
end;
procedure TForm1.Button2Click(Sender: TObject);
var hProc: THandle;
br: Cardinal;
jmp: Pointer;
begin
GetMem(jmp,5);
hProc := OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID);
try
PByte(jmp)^ := $E9;
inc(PByte(jmp));
PCardinal(jmp)^ := Cardinal(@DerAndere);
dec(PByte(jmp));
WriteProcessMemory(hProc,@Opfer,jmp,5,br);
finally
FreeMem(jmp);
CloseHandle(hProc);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Opfer;
end;
Erreichen will ich, das zur procedure "DerAndere" gejumpt wird, wenn man "Opfer" aufruft.
nach dem Button2-Klick steht auch ein Jump Befehl am Anfang der Opfer-Procedure, der auch ausgeführt wird, aaaber schaut euch das Bild im Anhang an. Die Adresse wird immer als relative Adresse aufgefasst... dadurch hüpft er natürlich ins Nirvana, was nicht gewollt ist.
Da funktioniert es ja auch.. Wobei ich den entstandenen OpCode nicht verstehe:
E9 ist klar... aber $23FFFFFF ist
nicht die Adresse von der Procedure
und ein relativer Sprung kanns auch nicht sein
viel zu weit weg!
Also wie mache ich das?
(Ich weiß, das ich den "Abstand" zwischen "Opfer" und "DerAndere" ausrechnen könnte und dann doch relativ springen könnte, das will ich aber nicht!)
Gruß
Neutral General