AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Hooken", der Jumpbefehl etc

Ein Thema von Neutral General · begonnen am 25. Apr 2008 · letzter Beitrag vom 25. Apr 2008
Antwort Antwort
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, 15: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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 15:22
warum verwendest du dann den asm-befehl für den realtiven jump wenn du das gar nicht willst? Dein Api-Hook hat auch einen Schönheitsfehler. Du überschreibst den Inhalt der alten Methode so das du diese nicht mehr aufrufen kannst.

Das eigentliche Prinzip ist folgendes. Api-Hook heißt hooken von Apifunktionen. Diese Funktionen werden durch laden der DLL eingebunden und per GetProcAddress gesucht. Wird eine Funktion in der DLL nicht exportiert kann man von außerhalb auch nicht einfach abfragen wo sie liegt. Alle anderen exportierten Funktionen sind aufgelistet. Wenn du diese Auflistung änderst (also die Adressen zum Funktionsnamen) brauchst du nicht den Inhalt der Funktionen überschreiben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 15:25
Öh weil ich dachte, das es vom Befehl her keinen Unterschied gibt, kenne nur $E9 ...
Was wäre denn richtig?
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
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:21
mov eax, Adresse
call eax

Edit: Naja die Methode ist schon okay. Inline Hooking halt .. das Einzige, was noch geändert werden muss, ist, dass du dir die ersten Bytes der Funktion sicherst, damit du sie bei einem Aufruf widerherstellen kannst.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:22
und call adresse geht nicht?
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
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:23
Nein, weil call ein Register oder eine Konstante als Operand erwartet.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:33
Zitat von Neutral General:
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!
wenn E9 wirklich Jmp ist (kenne jetzt nur short-jumps (EB,7X)), sieht das trotzdem wie ein relativer jump aus.
woher hast du die bytefolge? wenn sie direkt aus der datei ist. musst du erstmal die richtung der bytes korrigieren => $FFFFFF23, was, wenn ich mich nicht verrechnet habe -221 sein dürfte. sprich er würde 221 bytes zurückspringen.
die richtigen far-jumps funktionieren wie zacherl sagt. ich bezweifel abergerade, dass du das so hooken kannst...wenn ich deinen code richtig verstehe überschreibst du am procedure-einsprungspunkt die ersten 5 bytes mit einem neuen Jump, richtig?
müsste es dann nicht heißen @adresse-@opfer-5 um den sprung zu berechnen?

HTH Frank
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:37
Denn call-Opcode gegen den jmp-Opcode zu tauschen geht ohne Probleme, allerdings musst du dann nach der Zieladresse noch ein ret setzen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 16:42
So wie ich es gepostet habe wird es in allen Inline Hook Funktionen, die ich bisher gesehen habe verwendet. Google mal nach Inline Hook .. da findest du einige Units, die du als Vorlage verwenden könntest. uallHook verwendet glaube ich mitunter auch Inline Hooks, soweit ich mich erinnere. Dort findest du allerdings auch noch die IAT Hook, die Trap Hook und die Table Hook Methoden.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

Re: "Hooken", der Jumpbefehl etc

  Alt 25. Apr 2008, 17:26
@Zacherl: Danke für die Tipps. Wobei ich hier in dem Thread eigentlich gar nicht so direkt aufs hooken selbst eingehn wollte

Zitat von Dax:
Denn call-Opcode gegen den jmp-Opcode zu tauschen geht ohne Probleme, allerdings musst du dann nach der Zieladresse noch ein ret setzen.
Habs eben ausprobiert und das nicht gemacht, dann wurde zwar die neue procedure ausgeführt aber dann hats gekracht. Nach kurzem Überlegen war mir dann auch klar warum Danke aber trotzdem
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz