Rumah > Artikel > tutorial komputer > Mari kita bincangkan tentang menggunakan mekanisme perlindungan halaman Windows untuk mengaitkan fungsi
Guard Pages ialah mekanisme perlindungan memori dalam sistem pengendalian, digunakan untuk mengesan dan menghalang capaian haram kepada ingatan. Dalam sistem pengendalian Windows, Halaman Pengawal biasanya terletak di hujung halaman memori, yang biasanya tidak diperuntukkan atau tidak boleh diakses. Fungsi utama Guard Pages adalah untuk meningkatkan keselamatan sistem dan menghalang program berniat jahat atau ralat daripada mengakses memori, sekali gus melindungi sistem daripada potensi risiko dan kelemahan keselamatan. Dengan menggunakan Halaman Pengawal, sistem pengendalian boleh menemui dan menghalang operasi haram pada memori dengan segera, memastikan kestabilan dan keselamatan sistem.
Apabila program cuba mengakses Halaman Pengawal, sistem pengendalian akan segera mengenali dan mencetuskan pengecualian, biasanya pengecualian pelanggaran akses. Penjanaan pengecualian ini membantu program mengesan ralat capaian memori dalam masa, dan kemudian mengambil langkah yang sewajarnya, seperti menamatkan atur cara atau merekod maklumat ralat, untuk mengelakkan potensi kelemahan keselamatan daripada dieksploitasi. Dengan cara ini, sistem boleh mengekalkan kawalan ke atas akses memori dan memastikan kestabilan dan keselamatan operasi program. Tetapan Halaman Pengawal menyediakan sistem dengan mekanisme yang berkesan untuk memantau dan melindungi akses memori, supaya sebarang masalah yang berpotensi dapat ditemui dan ditangani dalam masa, sekali gus meningkatkan kestabilan dan keselamatan sistem. Melalui pencetusan pengecualian, program boleh bertindak balas dengan cepat apabila ralat berlaku, dengan berkesan menghalang masalah capaian memori yang boleh membawa kepada akibat yang serius.
Guard Pages digunakan secara meluas dalam Windows Hooking untuk memantau dan memintas akses kepada kawasan memori tertentu. Melalui teknologi ini, fungsi sistem boleh diubah suai atau dipantau, memberikan sokongan kukuh untuk bidang seperti penyahpepijatan perisian, penyelidikan keselamatan dan analisis perisian hasad. Halaman Pengawal menampilkan keupayaan untuk mengesan akses kepada memori yang dilindungi dan mencetuskan pengendali yang sesuai apabila akses berlaku. Mekanisme ini berguna untuk melindungi data atau kod kritikal daripada akses tanpa kebenaran dan potensi lubang keselamatan. Dengan mengkonfigurasi Halaman Pengawal dengan betul, anda boleh meningkatkan keselamatan dan kestabilan sistem serta memastikan sistem
Kod keseluruhan adalah seperti berikut:
#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; }
Kod bermula dengan memasukkan fail pengepala yang diperlukan, termasuk dan , yang masing-masing menyediakan fungsi dan definisi untuk API Windows dan operasi I/O standard.
Kod ini mentakrifkan cangkuk fungsi cangkuk, yang digunakan untuk memintas fungsi API CreateThread yang mencipta benang dalam aplikasi Windows. Di dalam fungsi cangkuk, dua kotak mesej dipaparkan untuk menggesa panggilan fungsi CreateThread dan menunjukkan bahawa ia telah disambungkan. Perlu diingatkan bahawa dalam kod ini, fungsi CreateThread asal sebenarnya tidak dipanggil, tetapi dipintas.
Tentukan fungsi pengendali dan tetapkannya sebagai pengendali pengecualian menggunakan AddVectoredExceptionHandler Fungsi ini direka bentuk untuk mengendalikan pengecualian, khususnya STATUS_GUARD_PAGE_VIOLATION, yang merupakan pengecualian yang berlaku apabila cuba melaksanakan kod pada halaman memori yang dilindungi. Jika kod pengecualian ialah STATUS_GUARD_PAGE_VIOLATION dan penunjuk arahan (Rip) menghala ke fungsi CreateThread, ia akan memaparkan mesej dan mengubah suai Rip untuk menghala ke fungsi cangkuk. Sebarang percubaan untuk memanggil fungsi CreateThread akan diubah hala ke fungsi cangkuk.
Di dalam fungsi utama, pembolehubah lama diisytiharkan tetapi tidak digunakan. Pembolehubah param ditetapkan kepada 5000 dan fungsi AddVectoredExceptionHandler dipanggil untuk mendaftarkan fungsi pengendali sebagai pengendali pengecualian. Gunakan VirtualProtect untuk menyediakan halaman pengawal pada fungsi CreateThread. Ini akan mencetuskan fungsi pengendali jika anda cuba melaksanakannya. Menggunakan printf menunjukkan alamat fungsi CreateThread. Satu utas baharu dicipta menggunakan CreateThread, tetapi itu nampaknya tidak memberi sebarang tujuan sebenar kerana utas itu hanya tidur selama 5000 milisaat. Selepas menunggu benang tamat, cetak "YEP!".
Kompilkan kod dan laksanakannya, kesannya adalah seperti berikut:
Gambar
Atas ialah kandungan terperinci Mari kita bincangkan tentang menggunakan mekanisme perlindungan halaman Windows untuk mengaitkan fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!