Siehe
%Vor%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:
Sie können die Software hier herunterladen
Es folgt eine Übersicht zur Erkennung installierter globaler Hooks:
- Rufen Sie PsGetCurrentThread auf und rufen Sie die ETHREAD-Struktur des aktuellen Threads ab. ETHREAD ist eine undurchsichtige Datenstruktur nach dem MSDN-Dokumentation.
- Extrahieren Sie die THREADINFO-Struktur, indem Sie PsGetThreadWin32Thread aufrufen. Beide sind undokumentiert.
- Entpacke das DESKTOPINFO.
- 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 _ *).
Es folgt eine Übersicht zur Erkennung installierter lokaler Hooks:
- Eine Thread-ID angegeben.
- Rufen Sie PsLookupThreadByThreadId auf und rufen Sie die ETHREAD-Struktur des angegebenen Threads ab.
- Extrahieren Sie die THREADINFO-Struktur, indem Sie PsGetThreadWin32Thread aufrufen.
- 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 _ *).
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.