x64内核:无PsSetNotify替代方案下的API拦截与回调结构修改
需积分: 0 72 浏览量
更新于2024-08-05
收藏 472KB PDF 举报
本文主要探讨了在x64架构的Windows操作系统中,当某些版本缺乏PsSetXXXNotifyRoutineEx类型的系统回调函数时,如何实现API拦截技术。系统回调在内核级别起着关键作用,允许驱动程序监控和控制特定操作,如进程创建、线程启动、模块加载、注册表操作、错误处理、系统关闭以及对象句柄管理。
在没有PsSetXXXNotifyRoutineEx版本的函数可用的情况下,驱动程序开发者需要通过以下策略来实现回调功能:
1. **获取相关结构**:首先,需要了解内核中用于这些操作的底层结构,比如对于创建进程和线程,可能涉及`_KPRCB`或`_KPRCB64`等结构,对于模块加载则可能是`PLDR_DATA`或`PLUGPLAY_LOAD_IMAGE_CALLBACK_DATA`。这些结构中包含回调函数的注册点。
2. **修改结构中的字段**:找到相应的回调指针或注册区域,将其替换为驱动程序自定义的回调函数地址,以便在内核空间中捕获并处理所需的事件。
3. **驱动卸载时的清理**:确保在驱动卸载时,通过调用对应的移除API,如`PsRemoveCreateThreadNotifyRoutine`,以解除之前设置的回调,避免内存泄漏或不必要的干扰。
- **注册API一览**:
- **创建进程类**:`PsSetCreateProcessNotifyRoutine`用于设置进程创建通知。
- **创建线程类**:`PsSetCreateThreadNotifyRoutine`用于设置线程创建通知,`PsRemoveCreateThreadNotifyRoutine`用于移除。
- **加载模块类**:`PsSetLoadImageNotifyRoutine`和`PsRemoveLoadImageNotifyRoutine`处理模块加载和卸载。
- **注册表类**:`CmRegisterCallbackEx`用于注册和取消注册注册表操作回调。
- **错误检查类**:`KeRegisterBugCheckCallback`用于处理蓝屏错误通知。
- **关闭系统类**:`IoRegisterShutdownNotification`用于响应系统关机过程。
- **对象句柄操作类**:`ObRegisterCallbacks`用于对象操作的挂钩,如保护进程、线程不受恶意操作,涉及`OB_CALLBACK_REGISTRATION`结构。
在对象句柄操作类中,驱动通过`NTSTATUS ObRegisterCallbacks`函数注册回调,该函数接受`CallbackRegistration`结构(包含回调函数地址、处理上下文等),返回`RegistrationHandle`供后续注销使用。驱动必须指定`Version`(如`OB_FLT_REGISTRATION_VERSION`)、`OperationRegistrationCount`、`Altitude`(驱动的权限级别)和`RegistrationContext`等参数。
虽然某些版本的Windows内核可能不提供标准的回调API,但通过理解并利用底层内核结构和相关的注册/移除接口,驱动开发者可以巧妙地实现类似功能,确保在兼容性和安全性的前提下监控和干预关键操作。
2022-03-11 上传
2022-06-02 上传
2022-08-03 上传
2024-03-29 上传
2024-09-08 上传
2023-03-31 上传
2023-09-22 上传
2023-10-08 上传
2024-03-06 上传
是因为太久
- 粉丝: 23
- 资源: 295
最新资源
- 单片机串口通信仿真与代码实现详解
- LVGL GUI-Guider工具:设计并仿真LVGL界面
- Unity3D魔幻风格游戏UI界面与按钮图标素材详解
- MFC VC++实现串口温度数据显示源代码分析
- JEE培训项目:jee-todolist深度解析
- 74LS138译码器在单片机应用中的实现方法
- Android平台的动物象棋游戏应用开发
- C++系统测试项目:毕业设计与课程实践指南
- WZYAVPlayer:一个适用于iOS的视频播放控件
- ASP实现校园学生信息在线管理系统设计与实践
- 使用node-webkit和AngularJS打造跨平台桌面应用
- C#实现递归绘制圆形的探索
- C++语言项目开发:烟花效果动画实现
- 高效子网掩码计算器:网络工具中的必备应用
- 用Django构建个人博客网站的学习之旅
- SpringBoot微服务搭建与Spring Cloud实践