Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Hook aus Service (https://www.delphipraxis.net/168327-hook-aus-service.html)

Zacherl 16. Mai 2012 18:31

AW: Hook aus Service
 
Versuch mal deine Hook DLL per AppInit_DLL zu registrieren. Damit sollte sie eigentlich auf allen Desktops geladen werden.

Luckie 16. Mai 2012 20:19

AW: Hook aus Service
 
Also irgendwie gefällt mir dein Sicherheitskonzept nicht wirklich. Wenn man solche Klimmzüge machen muss, habe ich den Verdacht, als wenn du irgendwas falsch machst. Bei mir ist es so, wenn eine Lösung zwar funktioniert aber nicht schön und einfach ist, dann ist irgendwas falsch.

hesch21 22. Mai 2012 09:23

AW: Hook aus Service
 
So, nach längerem Üben melde ich mich zurück.
@ Zacherl: Danke für Deinen Tipp. Ich habe das mit APP_INIT nicht gekannt und über einen halben Tag investiert, um herauszufinden, um was es sich da handelt. Wenn ich es richtig begriffen habe, definiert man so eine Art von 'Service'-DLL, die dauernd geladen ist. Wohl deshalb kann man sie auch nicht mehr dynamisch mit LoadLibrary laden. Statisch geht und der Hook-EntryPoint kann ich auch ansteuern, nur der Hook scheint nicht aktiviert zu werden. Habe so ziemlich alles versucht, aber ich bekomme nie ein CallBack-Event. Habe deshalb diesen Ansatz wieder fallen gelassen.

@ Luckie: Lieber Michael, ich bewundere Dein enormes Wissen und Dein Engagement in diesem Forum. Ich habe auch bereits etliche Routinen von Dir angewandt, z.B. jene für die Kontrolle eines Service. Siehe weiter unten. Aber glaube mir, seit dem Erscheinen von Vista und dem Wegfall der GINA bin ich auf der Suche nach einer vernünftigen Lösung dafür, wie man über eine Tastenkombination einen Alarm auslösen kann, und zwar in jedem 'Zustand' (sprich Desktop) des Rechners. Die aktuelle Lösung über den KeyboardFilterDriver ist einfach unbefriedigend (du kannst Dir z.B. die Klimmzüge ausmalen, um das Ding vor den Antivirus-Programmen zu verbergen). Und ausserdem weiss ich einfach, dass es geht. Ich habe eine Testversion eines Konkurrenzproduktes im Haus und die können das (ohne KBFD). Der langen Rede kurzer Sinn. Bitte entschuldige, wenn ich unter diesen Umständen auf gewisse Art von Kritik ohne kontruktive Lösungsvorschläge etwas unwillig reagiere.

Stand der Dinge: Ich bin dann auf die Idee gekommen, ich könnte mit zwei Diensten arbeiten. Ein kleiner Dienst, welcher bloss den Hook lädt oder entlädt. Dann logischerweise die Hook-DLL welche über Pipe direkt mit dem Haupt-Service kommuniziert. Dieser Hauptservice kontrolliert über einen Timer periodisch, ob der Desktop gewechselt hat. Wenn ja, beendet er den kleinen Service und startet ihn neu.
Das ganze funktioniert unter XP super. Unter W-7 bekomme ich aber auf dem SetWindowsHookEx einen Fehler zurück LastError = Falscher Parameter. Da stehe ich nun wieder an!

Apropos Service aus Service beenden und neu starten. Wie gesagt, da verwende ich die Routinen von Luckie und würde anregen, die Funktionen noch mit einem Ext.. zu ergänzen. Vor allem die StartService ist innerhalb eines Service meist schon vorhanden. Und ein kleiner Schönheitsfehler: Der Status bei Fehler (z.B. falschem Namen) ist nicht -1 sondern 0.

Zacherl 22. Mai 2012 12:28

AW: Hook aus Service
 
Du müsstest bei der AppInit Methode dann beispielsweise mit inline Hooks auf GetMessage / PeekMessage arbeiten. Denke mal da versagt einfach das SetWindowHookEx. Über die genannten APIs geht es auf jeden Fall. Das habe ich mal benutzt um eine DirectX GUI in ein vorhandenes Programm zu integrieren und dann Maus und Tastatureingaben abgefangen.

hesch21 29. Mai 2012 12:55

AW: Hook aus Service
 
So, jetzt habe ich die Lösung (mit einem kleinen Schönheitsfehler, für den ich einen separaten Thread eröffne).
Allerdings möchte ich nicht gerade alle Details hier breit schlagen, wäre das doch schon fast eine Einladung für die Erstellung eines ziemlich guten Keyloggers und Spyware auf jeder Desktop-Ebene.
Das Prinzip ist das, dass ein Service auf den gerade aktiven Desktop ein kleines verstecktes Programm lanciert. Dieses wiederum hookt die Tastatur und meldet die Tastenkombinationen an den Service per Pipe. Ebenfalls überprüft das Programm periodisch, ob immer noch derselbe Desktop aktiv ist. Wenn nicht, wird der neue Desktop ebenfalls per Pipe an den Service gemeldet und das Programm beendet sich. Und nun beginnt das Spiel von vorne: Der Service lanciert das Programm wieder auf dem neuen Desktop ....

Was ich Eingangs betreffend Schönheitsfehler gemeint habe, ist, dass ich nicht schaffe, den Screen-saver - Desktop zu 'hooken'.

Danke für alle Eure Anregungen

Heinz


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

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