Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi HookHandle, nCode, wParam, lParam bei afxCodeHook (https://www.delphipraxis.net/56209-hookhandle-ncode-wparam-lparam-bei-afxcodehook.html)

MCQ 2. Nov 2005 11:20


HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Hi, ich habe einen kleinen API-Hook mit Hilfe von afxCodeHook programmiert der auf GetLocalTime und GetSystemTime reagiert. Nun habe ich aber das problem, das ich das ergebnis der Prozeduren nicht ändern kann, solage ich nicht über die Werte HookHandle, nCode, wParam, lParam verfüge. HookHandle liefert die Function hookCode zrück, aber woher bekomme ich die übrigen werte ?

Gruß MCQ

MCQ 2. Nov 2005 11:59

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Zur erläuterung poste ich hier mal den Source:

Delphi-Quellcode:
library DateLog;

uses
  SysUtils,
  Dateutils,
  windows,
  afxCodeHook;

{$R *.res}
var
  GetRealTime:procedure(orgdate:_SYSTEMTIME);stdcall;



procedure LogTime(orgdate:_SYSTEMTIME)stdcall;
begin
// Hier werden sämtliche Zeitanfragen protokoliert
MessageBox(0,'Das aktuelle Datum wird abgefragt.','DateLog',MB_ICONINFORMATION);
{ Hier besteht mein Problem. Die Test-Message wurde zwar ausgegeben, allerdings
  gibt die Testanwendung als Zeit eine 0 zurück. Es fehlt also die übergabe der Zeit.
  Doch wie kann ich das bewerkstelligen ?
}
end;

Procedure SetHook();
begin
 HookCode('kernel32','GetLocalTime',@LogTime,@GLogTime);
 HookCode('kernel32','GetSystemTime',@LogTime,@LogTime);
end;


begin
SetHook();
end.

brechi 2. Nov 2005 12:26

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
hi du machst das komplett flasch!

schau dir besser mal ne demo von mir an den link zu der collection hab ich dir ja schon im anderen thread geschrieben.

du musst für jede API die du hookst genau den gleichen header verwenden wie die api selber UND du darfst nicht 2 APIs auf eine funktion von dir leiten. ausserdem musst du (oder man sollte) die original funktion danach wieder aufrufen, dafür gibt es nexthook.

MCQ 2. Nov 2005 13:35

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Mein Problem ist, das jedes Tutorial und jedes Beispiel zum Thema API-Hooking die API MessageBoxA hookt. Dabei wird eine Funktion genutzt die die selben Parameter hat wie die Orgnimalfunktion. Darin wird die Orginalfunkion mit veränderten Werten wieder aufgerufen und das Ergebnis an den Prozess weitergeleitet. Das geht hier aber so nicht. Prozeduren übergeben normalerweise keine Werte. GetLocalTime ist aber eine Procedure.
Die API CallNextHookEx kann ich so auch nicht nutzen, da mir die Parameter dafür fehlen.

Ob ich nun afxCodeHook.pas nutze oder deine Collection. Das Problem bleibt nach wie for. Egal ob ich 1 API hooke oder 2. Sobald ich die Orginal-Prozedur aufrufe kommt es zum Crash


Zitat:

Zugriffsverletzung bei Adresse 0042E3F4 in Modul "test.exe". Lesen von Adresse 2D0FC30C.
z.Z. Sieht der Code wie folgt aus:

Delphi-Quellcode:
library LogTime_DLL;


uses
  SysUtils,
  Dateutils,
  windows,
  UallHook;

{$R *.res}
var
  GetRealTime,GetNextTime:procedure(orgdate:_SYSTEMTIME);stdcall;



procedure LogTime(orgdate:_SYSTEMTIME)stdcall;
begin
  // Hier werden sämtliche Zeitanfragen protokoliert
  MessageBox(0,'Das aktuelle Datum wird abgefragt.','LogTime',MB_ICONINFORMATION);
  {
    Hier besteht mein Problem. Die Test-Message wurde zwar ausgegeben, allerdings
    gibt die Testanwendung als Zeit eine 0 zurück. Es fehlt also die übergabe der Zeit.
    Doch wie kann ich das bewerkstelligen ?
  }
  GetNextTime(orgdate);  //  <-- solange diese Zeile im Code steht gibt es eine Zugriffsverletzung
end;

Procedure SetHook();
begin
  @GetRealTime:=GetProcAddress(GetModuleHandle('kernel32.dll'),'GetLocalTime');
  uAllHook.HookCode(@GetRealTime,@LogTime,@GetNextTime);
end;


begin
  SetHook();
end.
Programmiert nach dem Beispiel uallCollection.zip\examples\CodeHook\codehook.dpr

Tut mir leid wenn ich mich nen bisschen blöd anstelle, aber das ist mein erster API-Hook ... abgesehen vom MessageBox-Hook.

brechi 2. Nov 2005 13:50

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
also so wie du es jetzt aufgebaut hast ist es prinzipiell richtig, d.h. die messagebox sollte auch schon zu sehen sein ABER! du musst die funktion schon richtig deklarieren und so ist sie wieder falsch, das ist bei enem api hook extrem wichtig


Delphi-Quellcode:
var
  GetRealTime,GetNextTime:procedure(VAR orgdate:_SYSTEMTIME);stdcall;



procedure LogTime(VAR orgdate:_SYSTEMTIME)stdcall;
du hattest das VAR vergessen. du musst dann auch noch sagen wenn fehler auftreten, in welchen prozess du es injezierst, dann ist es für mich einfacher zu schaun wo der fehler liegen könnte.

MCQ 2. Nov 2005 13:57

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Das VAR hab ich integriert, aber die Zugriffsverletzung ist nochimmer da. Ich habe die DLL in eine Demo-Anwandung injeziert die lediglich folgenden Code ausführt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var dt:_SYSTEMTIME;
begin
  GetLocalTime(dt);
  MessageBox(Form1.Handle,PChar(IntToStr(dt.wDay)+'.'+IntToStr(dt.wMonth)+'.'+IntToStr(dt.wYear)+' '+IntToStr(dt.wHour)+':'+IntToStr(dt.wMinute)+':'+IntToStr(dt.wSecond)),'aktuelle Zeit',MB_ICONINFORMATION);
end;
Wenn s fertig ist soll es aber in jede belibige EXE-Datei injezierbar sein.


edit://
Die MessageBox der orginalanwenung wird nicht angezeigt.

brechi 2. Nov 2005 14:31

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Liste der Anhänge anzeigen (Anzahl: 1)
funktioniert bei mir einwandfrei, kompiliertes beispielprog mit sourcecode im anhang

(win2k)

test das mla OHNE neucompilieren, wenns nicht geht posten, wenns geht compilier du das mal neu und sag ob es geht

MCQ 2. Nov 2005 16:48

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Naja, so ganz funktioniert es mit deiner DLL nicht wie ichs gern hätte.

Bei mir läuft das ganz wie folgt ab.

injectdll.exe startet die test.exe und injeziert anschließend die test.dll

Funktioniert soweit auch ganz gut. Dass Datum lässt sich sogar ändern. Jedoch stürzt die test.exe jedesmal ab, wenn ich die orginalprozedur aufrufe.

MCQ 2. Nov 2005 16:56

Re: HookHandle, nCode, wParam, lParam bei afxCodeHook
 
Jetzt funktionierts plötzlich ... kp wieso, hab eigendlich nix geändert .... typisch für mein windows *lach*

Danke für deine Unterstützung brechi


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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