Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: DLL Funktion Hook - Allgemeingültige Lösung / Codevorlag

  Alt 23. Jul 2009, 19:42
Hallo.

Ich habe Win XP SP3. Ich habe alle möglichen Kombinationen probiert und kann versichern, dass MessageBoxA() partout nicht ging. Lediglich AudaCity zeigte ab und zu (!) bei dem "Möchten Sie speichern?" Dialog das [hooked]. Alle anderen Anwendungen waren nicht modifiziert. Keine Ahnung wieso!

Aber: midiOutShortMsg() konnte ich wunderbar hooken und den MIDI-Verkehr mitschneiden (ich habe zuerst den obrigen Code verwendet, dann das Traffic-Demo abgewandelt, damit die Auswertung durch eine Host-Anwendung durchgeführt wird.)

Jetzt habe ich noch ein Problem:

Delphi-Quellcode:
h := GetModuleHandle('winmm.dll');
if h > 0 then
begin
  @origMessageBoxA := GetProcAddress(h,'midiOutShortMsg');
  if @origMessageBoxA <> nil then
    uallHook.HookCode(@origMessageBoxA,@callbackMessageBoxA,@newMessageBoxA);
end;
Alle Prozesse (auch die "neu hinzugekommenen") bekommen meine MIDI-Hook.DLL injeziert. Das Problem ist, dass nicht jede Anwendung winmm.dll eingebunden hat (bei WinAmp wird die winmm.dll beispielsweise erst eingebunden, wenn man eine MIDI öffnet und abspielt.) Bedeutet: Alle Prozesse, die die winmm.dll später einbinden, werden nicht mit aufgezeichnet, da die Bedingung "h > 0" nicht beim DLL-Init erfüllt war.

Frage: (1) Was soll ich dagegen unternehmen? Soll ich vielleicht eine Endlosschleife in die DLL einfügen, sodass der Code ausgeführt wird, sobald "h > 0" wir?

Folgefrage: (2) Wenn "h > 0" eingetreten ist, muss ich dann den HookCode() immer wieder durchführen (z.B. für den Fall dass die zu hook'ende DLL geladen und dann entladen und dann wieder geladen wurde?

Und: (3) Ist es nicht fatal, wenn man eine DLL injeziert, die eine Endlosschleife beeinhaltet? Wenn jeder Prozess des Systems eine solche DLL injeziert bekommt, könnte die CPU-Auslastung ziemlich hoch werden, oder?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat