-
-
[原创]内核回调函数PsSetCreateProcessNotifyRoutine原理剖析
-
发表于:
2024-6-24 17:33
7939
-
[原创]内核回调函数PsSetCreateProcessNotifyRoutine原理剖析
实验目的:研究通过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进行&操作
最后返回与的结果给调用者。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!