搜索
首页电脑教程电脑知识我们一起聊聊利用Windows页防护机制进行函数挂钩

摘要

Guard Pages是操作系统中的一种内存保护机制,用于检测和防止内存的非法访问。在Windows操作系统中,Guard Pages通常位于内存页的末尾,这些页面通常是未分配或不可访问的。Guard Pages的主要功能是提高系统的安全性,防止恶意程序或错误访问内存,从而保护系统免受潜在的风险和安全漏洞。通过使用Guard Pages,操作系统可以及时发现并阻止对内存的非法操作,确保系统的稳定性和安全性。

当程序尝试访问Guard Page时,操作系统会立即识别并触发异常,通常是访问违例异常。这种异常的产生有助于程序及时发现内存访问错误,进而采取适当的措施,如终止程序或记录错误信息,以防潜在的安全漏洞被利用。通过这种方式,系统能够保持对内存访问的控制,确保程序运行的稳定性和安全性。 Guard Page的设置为系统提供了一种有效的机制,用于监视和保护内存访问,使得任何潜在的问题都能够被及时发现和处理,从而提高了系统的稳定性和安全性。通过异常的触发,程序能够在错误发生时快速做出响应,有效地防止可能导致严重后果的内存访问问题。

Guard Pages在Windows Hooking中被广泛应用,用于监测和拦截对特定内存区域的访问。通过这种技术,可以实现对系统功能的修改或监视,为软件调试、安全研究和恶意软件分析等领域提供有力支持。Guard Pages的特点是能够检测对受保护内存的访问,并在访问发生时触发相应的处理程序。这种机制对于保护关键数据或代码非常有用,可以有效防止未经授权的访问和潜在的安全漏洞。通过合理配置Guard Pages,可以提高系统的安全性和稳定性,确保系统

实现过程

整体代码如下:

#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;
}

头文件部分:

代码从包含必要的头文件开始,包括和 ,它们分别提供了Windows API和标准I/O操作的函数和定义。

Hook函数:

本代码定义了一个钩子函数hook,用于拦截Windows应用程序中创建线程的CreateThread API函数。在钩子函数内部,展示了两个消息框,以提示CreateThread函数的调用情况并表明它已被hook。需要注意的是,在这段代码中,并没有实际调用原始的CreateThread函数,而是进行了拦截处理。

异常处理

定义了一个处理函数, 并使用AddVectoredExceptionHandler将其设置为异常处理程序, 这个函数被设计用来处理异常,特别是STATUS_GUARD_PAGE_VIOLATION,这是一种在受保护的内存页上尝试执行代码时发生的异常。 如果异常代码是STATUS_GUARD_PAGE_VIOLATION,并且指令指针(Rip)指向CreateThread函数,它会显示一条消息,并修改Rip指向钩子函数。 任何尝试调用执行CreateThread函数的操作都将被重定向到执行钩子函数。

主函数

在主函数内部,声明了一个变量old,但未被使用。 一个param变量被设置为5000,并调用AddVectoredExceptionHandler函数将处理程序函数注册为异常处理程序。 使用VirtualProtect在CreateThread函数上设置了一个守卫页面。如果尝试执行它,这将触发处理程序函数。 使用printf显示了CreateThread函数的地址。 使用CreateThread创建了一个新线程,但似乎并没有提供任何实际目的,因为该线程只是休眠了5000毫秒。 等待线程结束后,打印“YEP!”。

测试

将代码编译后执行,效果如下:

我们一起聊聊利用Windows页防护机制进行函数挂钩

图片

以上是我们一起聊聊利用Windows页防护机制进行函数挂钩的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:每日运维。如有侵权,请联系admin@php.cn删除
原子心脏游戏还没有准备好加载此保存[已解决] -Minitool原子心脏游戏还没有准备好加载此保存[已解决] -MinitoolApr 30, 2025 am 12:50 AM

由于某些原因,您可能会遇到“游戏还没有准备好加载此保存”错误。在这篇文章中,PHP.CN收集了问题的可能原因,并为您提供了5种故障排除方法。

专家Windows X-Lite最佳11 24H2安装指南专家Windows X-Lite最佳11 24H2安装指南Apr 30, 2025 am 12:49 AM

如果您需要在较低的配置计算机上享受Windows 11 24H2,则可以下载Windows X-Lite最佳11 24H2 HOME或PRO。在这里,PHP.CN软件上的这篇文章旨在向您展示Windows X-Lite最佳11 24H2下载并安装。

无支撑的PC意外接收Windows 11 22H2 -Minitool无支撑的PC意外接收Windows 11 22H2 -MinitoolApr 30, 2025 am 12:48 AM

Microsoft意外将Windows 11 22H2释放到Release Preview Channel中的Windows Insiders。一些用户认为Microsoft改变了Windows 11的硬件和系统要求。但是,这只是Windows 11中的一个错误。您可以follo

如何在Windows 11/10/8/7上使用屏幕上的键盘? -  Minitool如何在Windows 11/10/8/7上使用屏幕上的键盘? - MinitoolApr 30, 2025 am 12:47 AM

屏幕键盘是一个虚拟键盘,可在Windows 11/10/8/7上使用。如果您不知道如何在Windows计算机上打开并使用它,则可以从php.cn软件中阅读此帖子以获取一些相关信息。

privadovpn免费下载Windows,Mac,Android,iOS -Minitoolprivadovpn免费下载Windows,Mac,Android,iOS -MinitoolApr 30, 2025 am 12:46 AM

PrivadOVPN是用于Windows,MacOS,Android,iOS,Android TV等的免费VPN服务。使用此免费VPN,您可以在线访问任何内容而无需位置限制,并在浏览Internet时匿名保持匿名。检查如何下载和安装

如何在iPhone/android/笔记本电脑上删除蓝牙设备? -  Minitool如何在iPhone/android/笔记本电脑上删除蓝牙设备? - MinitoolApr 30, 2025 am 12:44 AM

无线蓝牙为人们带来了现代生活的许多便利。当您不想连接蓝牙设备时,您可以选择忘记它。但是,当您要重新建立连接时,如何重新连接并删除蓝牙呢?

Netflix观看电影和电视节目的10个最佳VPN -MinitoolNetflix观看电影和电视节目的10个最佳VPN -MinitoolApr 30, 2025 am 12:43 AM

要观看各种Netflix电影和电视节目,您可以使用VPN服务。这篇文章介绍了一些最佳的免费Netflix VPN供您参考。有关更多有用的计算机教程和工具,您可以访问php.cn软件官方网站。

Discovery Plus错误400  - 它是什么以及如何修复? -  MinitoolDiscovery Plus错误400 - 它是什么以及如何修复? - MinitoolApr 30, 2025 am 12:42 AM

当您在Discovery Plus上观看自己喜欢的电视节目和电影时,Discover Plus Plus错误400是一个通常的问题。 PHP.CN网站上的本文将介绍Discovery Plus 400和一些解决方案。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境