Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Execute Hook (https://www.delphipraxis.net/87333-execute-hook.html)

Sanguis 27. Feb 2007 10:14


Execute Hook
 
Guten Morgen,

ich hoffe ich schreibe hier ins richtige Forum. Falls nicht, bitte verschieben.

Es geht mir um einen execute Hook. Und zwar um einen bestimmten. Gefunden habe ich ein Beispiel heir: http://www.michael-puff.de/dirindex..../Importe/toms/

Dies gucke ich mir auch schon seit ca. einer Woche an. Was ich da sehe gefällt mir, das sind schöne Möglichkeiten. Ein Problem habe ich allerdings. In dem Beispiel wird, wenn man ein Programm öffnet, ein kleines Abfragefenster als popup geöffnet. Dies zeigt den Namen/Pfad der Anwendung an, die versucht sich zu öffnen und fragt ob man das wirklich zulassen will.
Soweit so gut.
Ich habe mir jetzt eine kleine Funktion geschrieben die diesen Teil abändern soll. Diese Funktion ( if isOnWhitList(string) = '1' then ) öffnet eine Datei und guckt ob in dieser das Programm gelistet ist, welches starten will. Falls ja, gibt es eben '1' zurück.
Das Problem ist jetzt, das mir dabei der explorer abstürzt und ich einfach den Grund dafür nicht finde.
Ich habe erst vermutet das es irgendwie am Zugriff auf die Datei liegt, in der ich die erlaubten Programme festlege. Dann ist mir aber aufgefallen das, wenn der explorer nicht im Hintergrund läuft, der Hook einwandfrei funktioniert, wie ich es gern hätte.

Woran kann das liegen? Ich bräuchte halt den explorer weiterhin im Hintergrund.

Hoffe das mir hier jemand helfen kann.

Gruß,
Andreas

ghost007 21. Mai 2007 21:31

Re: Execute Hook
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
ich hab mit den gleichen hook mal angeschaut, siehe anhang.
Aber ich begreif ihn nicht :(
Wo wird da festgestellt, welche anwendung gestartet wird?
Und ob sie "notpad" ist ?

MfG - Ghost007

Zacherl 21. Mai 2007 21:48

Re: Execute Hook
 
Ich vermute mal es wird CreateProcess, ShellExecute und WinExec gehookt. Vielleicht nocht NtCreateProcess .. all dieses APIs besitzen einen Parameter der die Befehlszeile übergibt.
Daraus kannst du den Dateinamen ermitteln ..

ghost007 21. Mai 2007 22:31

Re: Execute Hook
 
öhm, ok und weiter? könntest du dich vll etwas auf das beispiel aus dem anhang beziehen?

danke

MfG - Ghost007

wicht 21. Mai 2007 23:00

Re: Execute Hook
 
In der HookUnit.pas:

Delphi-Quellcode:
function NewShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;
begin
  Result := 0;
  if Windows.MessageBox(0, PChar('Soll ' + Directory + FileName + ' ausgeführt werden?'), '[ShellExecute Hooked]', MB_OKCANCEL) = IDOK then
    Result := OldShellExecute(hwnd, Operation, FileName, Parameters, Directory, ShowCmd);
end;
Alle Funktionen, deren Namen dort mit "New" anfangen, sind die, die anstelle der "richtigen" Funktionen aufgerufen werden. Und da sind ja die Argumente bei, z.B. FileName und Directory.. :wink:

ghost007 22. Mai 2007 12:41

Re: Execute Hook
 
ah,
ok. danke :) werd mir des mal anschaun.

MfG - Ghost007

ghost007 22. Mai 2007 19:35

Re: Execute Hook
 
du hattest recht :)

noch ne kleine frage, hab hier im forum schonmal gesucht, aber leider nichts gefunden.
Gibts auch sowas wie nen close/terminate hook?

MfG - Ghost007

ghost007 23. Mai 2007 21:14

Re: Execute Hook
 
*PUSH*

markusj 28. Mai 2007 21:44

Re: Execute Hook
 
Klar, du Hookst "einfach" Terminate Process

mfG
Markus

PS: Ich kämpfe gerade mit der selben Materie

ghost007 21. Dez 2007 21:09

Re: Execute Hook
 
Zitat:

Zitat von markusj
Klar, du Hookst "einfach" Terminate Process

mfG
Markus

PS: Ich kämpfe gerade mit der selben Materie


Hi,
hab mich nach langer zeit mal wieder hingesetzt und den execute hook für meine bedürfnisse perfektioniert :)
Jetzt ist aber wieder die frage nach einem terminate hook aufgetaucht. Ich habs auch schon versucht indem ich den execute hook mit terminate "nachbau" ... aber ich hab, denk ich, schlicht zu wenig ahnung von dem terminate befehl ... bist du evtl schon weiter gekommen? oder hat irgend jmd ne idee?

MfG - Ghost007


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz