首页
社区
课程
招聘
[原创]内核回调函数PsSetCreateProcessNotifyRoutine原理剖析
发表于: 2024-6-24 17:33 7384

[原创]内核回调函数PsSetCreateProcessNotifyRoutine原理剖析

2024-6-24 17:33
7384

实验目的:研究通过PsSetCreateProcessNotifyRoutine注册的进程启停通知回调函数是如何被系统调用的。
废话不多说,直接开整~

图片描述
从堆栈可知,我们的回调函数是通过nt!PspCallProcessNotifyRoutines+0x255调用的。那么通过IDA加载内核nt模块,查看此函数的伪代码如下:
图片描述
图片描述
我只截取关键的部分了,途中1,2,3标注的地方值得我们注意。
1说明函数ExReferenceCallBackBlock()要通过v20这个索引访问一个全局数组变量PspCreateProcessNotifyRoutine,3处做v20最大值的判断>=0x40就跳出循环,说明PspCreateProcessNotifyRoutine数组最大是0x40个,10进制就是64个,这告诉我们系统内部最多支持注册64个回调函数。

图片描述
图片描述
1中取数组PspCreateProcessNotifyRoutine中具体的某一项,付给callBackEntry局部变量
2中对callBackEntry与0xFFFFFFFFFFFFFFF0进行&操作
最后返回与的结果给调用者。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 1210
活跃值: (1914)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果回调函数的地址不是8字节对齐,是不是必炸
2024-6-27 10:08
0
游客
登录 | 注册 方可回帖
返回
//