目录
头文件部分:
Hook函数:
异常处理
主函数
测试
首页 电脑教程 电脑知识 我们一起聊聊利用Windows页防护机制进行函数挂钩

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

Mar 26, 2024 am 09:40 AM
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

热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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1262
29
C# 教程
1236
24
无法从终端访问 mysql 无法从终端访问 mysql Apr 08, 2025 pm 04:57 PM

无法从终端访问 MySQL 可能是由于:MySQL 服务未运行;连接命令错误;权限不足;防火墙阻止连接;MySQL 配置文件错误。

mysql怎么复制粘贴 mysql怎么复制粘贴 Apr 08, 2025 pm 07:18 PM

MySQL 中的复制粘贴包含以下步骤:选择数据,使用 Ctrl C(Windows)或 Cmd C(Mac)复制;在目标位置右键单击,选择“粘贴”或使用 Ctrl V(Windows)或 Cmd V(Mac);复制的数据将插入到目标位置,或替换现有数据(取决于目标位置是否已存在数据)。

vs code 可以在 Windows 8 中运行吗 vs code 可以在 Windows 8 中运行吗 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! 如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! Apr 17, 2025 pm 09:54 PM

在Laravel开发中,处理复杂的模型关系一直是个挑战,特别是当涉及到多层级的BelongsToThrough关系时。最近,我在处理一个多级模型关系的项目中遇到了这个问题,传统的HasManyThrough关系无法满足需求,导致数据查询变得复杂且低效。经过一番探索,我找到了staudenmeir/belongs-to-through这个库,它通过Composer轻松安装并解决了我的困扰。

Debian中Tigervnc支持哪些操作系统 Debian中Tigervnc支持哪些操作系统 Apr 12, 2025 pm 10:15 PM

开源VNC工具Tigervnc兼容众多操作系统,其中包括Windows、Linux和macOS。本文将详细介绍Tigervnc在Debian系统上的应用情况。Tigervnc在Debian系统的应用系统集成:在Debian系统中,Tigervnc作为VNC服务器组件被集成到系统中。用户可通过命令行工具(例如vncserver)启动VNC服务,并自定义显示设置,如分辨率和色彩深度。跨平台连接:Tigervnc客户端支持Windows、Linux和macOS,这意味着用户可以从任何运行这

sublime写好代码后如何运行 sublime写好代码后如何运行 Apr 16, 2025 am 08:51 AM

在 Sublime 中运行代码的方法有六种:通过热键、菜单、构建系统、命令行、设置默认构建系统和自定义构建命令,并可通过右键单击项目/文件运行单个文件/项目,构建系统可用性取决于 Sublime Text 的安装情况。

vscode 无法安装扩展 vscode 无法安装扩展 Apr 15, 2025 pm 07:18 PM

VS Code扩展安装失败的原因可能包括:网络不稳定、权限不足、系统兼容性问题、VS Code版本过旧、杀毒软件或防火墙干扰。通过检查网络连接、权限、日志文件、更新VS Code、禁用安全软件以及重启VS Code或计算机,可以逐步排查和解决问题。

laravel安装代码 laravel安装代码 Apr 18, 2025 pm 12:30 PM

要安装 Laravel,需依序进行以下步骤:安装 Composer(适用于 macOS/Linux 和 Windows)安装 Laravel 安装器创建新项目启动服务访问应用程序(网址:http://127.0.0.1:8000)设置数据库连接(如果需要)

See all articles