Heim > Artikel > Computer-Tutorials > Lassen Sie uns über die Verwendung des Windows-Seitenschutzmechanismus für das Funktions-Hooking sprechen
Guard Pages ist ein Speicherschutzmechanismus im Betriebssystem, der dazu dient, illegale Zugriffe auf den Speicher zu erkennen und zu verhindern. In Windows-Betriebssystemen befinden sich Guard Pages normalerweise am Ende von Speicherseiten, die normalerweise nicht zugewiesen sind oder auf die nicht zugegriffen werden kann. Die Hauptfunktion von Guard Pages besteht darin, die Sicherheit des Systems zu verbessern und zu verhindern, dass Schadprogramme oder Fehler auf den Speicher zugreifen, wodurch das System vor potenziellen Risiken und Sicherheitslücken geschützt wird. Durch die Verwendung von Guard Pages kann das Betriebssystem illegale Vorgänge im Speicher umgehend erkennen und verhindern und so die Stabilität und Sicherheit des Systems gewährleisten.
Wenn ein Programm versucht, auf die Guard-Seite zuzugreifen, erkennt das Betriebssystem dies sofort und löst eine Ausnahme aus, normalerweise eine Zugriffsverletzungsausnahme. Die Generierung dieser Ausnahme hilft dem Programm, Speicherzugriffsfehler rechtzeitig zu erkennen und dann geeignete Maßnahmen zu ergreifen, z. B. das Beenden des Programms oder das Aufzeichnen von Fehlerinformationen, um zu verhindern, dass potenzielle Sicherheitslücken ausgenutzt werden. Auf diese Weise kann das System die Kontrolle über den Speicherzugriff behalten und die Stabilität und Sicherheit des Programmbetriebs gewährleisten. Die Einstellung von Guard Page bietet dem System einen wirksamen Mechanismus zur Überwachung und zum Schutz des Speicherzugriffs, sodass potenzielle Probleme rechtzeitig erkannt und behoben werden können, wodurch die Stabilität und Sicherheit des Systems verbessert wird. Durch das Auslösen von Ausnahmen kann das Programm schnell reagieren, wenn ein Fehler auftritt, und so effektiv Speicherzugriffsprobleme verhindern, die schwerwiegende Folgen haben können.
Guard Pages werden häufig beim Windows Hooking verwendet, um den Zugriff auf bestimmte Speicherbereiche zu überwachen und abzufangen. Durch diese Technologie können Systemfunktionen geändert oder überwacht werden, was Bereiche wie Software-Debugging, Sicherheitsforschung und Malware-Analyse stark unterstützt. Guard Pages bieten die Möglichkeit, Zugriffe auf geschützten Speicher zu erkennen und bei Zugriff entsprechende Handler auszulösen. Dieser Mechanismus ist nützlich, um kritische Daten oder Code vor unbefugtem Zugriff und potenziellen Sicherheitslücken zu schützen. Durch die ordnungsgemäße Konfiguration von Guard Pages können Sie die Sicherheit und Stabilität des Systems verbessern und sicherstellen, dass das System
Der Gesamtcode lautet wie folgt:
#include #include // Hook函数功能 HANDLE hook(LPSECURITY_ATTRIBUTES rcx, SIZE_T rdx, LPTHREAD_START_ROUTINE r8, LPVOID r9, DWORD stck1, LPDWORD stck2) { MessageBoxA(0, "CreateThread() was called!", "YAY!", 0); MessageBoxA(0, "Hooked CreateThread", "YAY!", 0); // 这里调用原始CreateThread函数 //return CreateThread(rcx, rdx, r8, r9, stck1, stck2); return NULL; } LONG WINAPI handler(EXCEPTION_POINTERS * ExceptionInfo) { if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_GUARD_PAGE_VIOLATION) { if (ExceptionInfo->ContextRecord->Rip == (DWORD64) &CreateThread) { printf("[!] Exception (%#llx)!" , ExceptionInfo->ExceptionRecord->ExceptionAddress); printf("nClick a key to continue...n"); getchar(); ExceptionInfo->ContextRecord->Rip = (DWORD64) &hook; printf("Modified RIP Points to: %#llxn", ExceptionInfo->ContextRecord->Rip); printf("Hook Function = %#llxn", (DWORD64) &hook); } return EXCEPTION_CONTINUE_EXECUTION; } return EXCEPTION_CONTINUE_SEARCH; } int main() { DWORD old = 0; DWORD param = 5000; AddVectoredExceptionHandler(1, &handler); VirtualProtect(&CreateThread, 1, PAGE_EXECUTE_READ | PAGE_GUARD, &old); printf("CreateThread addr = %#pn", &CreateThread); HANDLE hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE) &Sleep, ¶m, 0, 0); WaitForSingleObject(hThread, param); printf("YEP!n"); return 0; }
Der Code beginnt mit der Einbindung der notwendigen Header-Dateien, einschließlich und, die Funktionen und Definitionen für die Windows-API bzw. Standard-E/A-Operationen bereitstellen.
Dieser Code definiert einen Hook-Funktions-Hook, der zum Abfangen der CreateThread-API-Funktion verwendet wird, die Threads in Windows-Anwendungen erstellt. Innerhalb der Hook-Funktion werden zwei Meldungsfelder angezeigt, die den Aufruf der CreateThread-Funktion veranlassen und anzeigen, dass sie eingehängt wurde. Es ist zu beachten, dass in diesem Code die ursprüngliche CreateThread-Funktion nicht tatsächlich aufgerufen, sondern abgefangen wird.
Definieren Sie eine Handlerfunktion und legen Sie sie mit AddVectoredExceptionHandler als Ausnahmehandler fest. Diese Funktion dient zur Behandlung von Ausnahmen, insbesondere von STATUS_GUARD_PAGE_VIOLATION, einer Ausnahme, die auftritt, wenn versucht wird, Code auf einer geschützten Speicherseite auszuführen. Wenn der Ausnahmecode STATUS_GUARD_PAGE_VIOLATION lautet und der Anweisungszeiger (Rip) auf die CreateThread-Funktion zeigt, wird eine Meldung angezeigt und der Rip so geändert, dass er auf die Hook-Funktion zeigt. Jeder Versuch, die CreateThread-Funktion aufzurufen, wird an die Hook-Funktion umgeleitet.
Innerhalb der Hauptfunktion wird eine Variable old deklariert, aber nicht verwendet. Eine Parametervariable wird auf 5000 gesetzt und die Funktion AddVectoredExceptionHandler wird aufgerufen, um die Handlerfunktion als Ausnahmehandler zu registrieren. Verwenden Sie VirtualProtect, um eine Schutzseite für die CreateThread-Funktion einzurichten. Dadurch wird die Handler-Funktion ausgelöst, wenn Sie versuchen, sie auszuführen. Mit printf wird die Adresse der CreateThread-Funktion angezeigt. Mit CreateThread wird ein neuer Thread erstellt, aber das scheint keinen wirklichen Zweck zu erfüllen, da der Thread nur 5000 Millisekunden lang schläft. Nachdem Sie auf das Ende des Threads gewartet haben, geben Sie „YEP!“ aus.
Kompilieren Sie den Code und führen Sie ihn aus. Der Effekt ist wie folgt:
Bilder
Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Verwendung des Windows-Seitenschutzmechanismus für das Funktions-Hooking sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!