Liste der installierten Windows-Hooks

8

Wie erhalte ich eine Liste der global in Windows installierten Hooks (mit der SetWindowsHookEx API)?

    
lightstep 19.12.2011, 17:22
quelle

2 Antworten

3

Ein böser Weg wäre, alle Hakenfunktionen zu haken, bevor irgendetwas anderes eine Chance bekommt.

    
kichik 19.12.2011, 17:26
quelle
5

Siehe

  

Finden von Hooks Verglichen mit anderen Operationen, Auflisten der installierten   Haken ist ziemlich einfach.

     

Threadspezifische Hooks werden in Win32k pro Thread-Daten aufgezeichnet   Struktur markiert, eher einfallsreich, als THREADINFO 1 . Das ist   im Wesentlichen eine ETHREAD / TEB-ähnliche Struktur, aber eine maßgeschneiderte   speziell für Benutzer- und GDI-Informationen. Eines seiner Mitglieder   (aphkStart) ist ein 16-Elemente-Array von Zeigern, individuell sie   Zeigen Sie entweder auf NULL oder auf den Kopf einer verknüpften Liste von HOOK-Strukturen.   Das Aufzählen der Haken ist einfach ein Maß dafür, wie man diese hinuntergeht   Ketten.

     

Der Einfachheit halber und wahrscheinlich, damit die Iteration nicht angezeigt werden muss   Wenn irgendwelche Haken gesetzt sind, enthält das THREADINFO ein anderes Mitglied, fsHooks,   Das ist ein Bitfeld. Wenn ein Bit aktiviert ist, wird der entsprechende Index in der   Hook-Array ist gültig. Anstelle von 33 Vergleichen (16 für NULL und 17 für   eine For-Schleife), zu sagen, ob es Haken gibt, erfordert nur einen, raffiniert!

     

Globale Hooks, die pro Desktop 2 sind, werden ebenfalls in a gespeichert   Pro-Objekt-Struktur, auch phantasievoll benannt (DESKTOPINFO), und sind   auch in einem Array mit einem zugehörigen Bitfeld gespeichert. Überbrückung der   zwei ist pDeskInfo, ein Mitglied von THREADINFO, das auf sein Eigentum hinweist   DESKTOPINFO.

     

Trotz des Bauchwehs im Intro, mit all diesen Arbeiten   Undokumentierte Strukturen sind in der Praxis nicht wirklich zu schwer. Das   Windows 7-Symbole für win32k.sys enthalten ihre Layouts, was nett ist.   Die Symbole für die Vista / Server 2008-Ära tun dies jedoch nicht   Die Montage kommt und spart den Tag.

     

Zu wissen, wie diese Strukturen aussehen, ist eine Sache   ist ein anderes ...

     

Nachdem wir unsere schmuddeligen Handschuhe bekommen haben, finden wir HOOK Strukturen   die meisten relevanten Informationen selbst:

%Vor%

Sie können die Software hier herunterladen

  

Es folgt eine Übersicht zur Erkennung installierter globaler Hooks:

     
  1. Rufen Sie PsGetCurrentThread auf und rufen Sie die ETHREAD-Struktur des aktuellen Threads ab. ETHREAD ist eine undurchsichtige Datenstruktur nach dem   MSDN-Dokumentation.
  2.   
  3. Extrahieren Sie die THREADINFO-Struktur, indem Sie PsGetThreadWin32Thread aufrufen. Beide sind undokumentiert.
  4.   
  5. Entpacke das DESKTOPINFO.
  6.   
  7. Dort können Sie alle global installierten Hooks finden. Sie sind in einem Array organisiert. Jedes Element ist eine verkettete Liste und entspricht   ein bestimmter Haken (WH _ *).
  8.   

Es folgt eine Übersicht zur Erkennung installierter lokaler Hooks:

     
  1. Eine Thread-ID angegeben.
  2.   
  3. Rufen Sie PsLookupThreadByThreadId auf und rufen Sie die ETHREAD-Struktur des angegebenen Threads ab.
  4.   
  5. Extrahieren Sie die THREADINFO-Struktur, indem Sie PsGetThreadWin32Thread aufrufen.
  6.   
  7. Dort können Sie alle lokal installierten Hooks für den angegebenen Thread finden. Sie sind in einem Array organisiert. Jedes Element ist a   verknüpfte Liste und entspricht einem bestimmten Hook (WH _ *).
  8.   

Sie können die Quelle hier sehen

  

Plugin für Process Hacker 2 ( Ссылка ),   zeigt System-Hooks an und kann sich aushaken (Rechtsklick-Menü).

     

Nimm die Process Hacker-Quelle und kompiliere sie, dann füge hinzu   HookTools.vcxproj zu Plugins.sln. VS 2013 wurde verwendet. Stellen Sie Ihre Bibliothek ein   Pfad in VC ++ - Verzeichnissen.

oder verwandte Frage mit Antwort hier

Aber ich habe immer noch keinen zuverlässigen Weg gefunden, es zu tun.

    
Vijay 28.03.2013 08:04
quelle

Tags und Links