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.