Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

"Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:18
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.

Delphi-Quellcode:
asm
  jmp DerAndere
end;
Da funktioniert es ja auch.. Wobei ich den entstandenen OpCode nicht verstehe:

Code:
E923FFFFFF jmp DerAndere
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
Miniaturansicht angehängter Grafiken
cpu_548.jpg  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat