首页
社区
课程
招聘
[原创]通过PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine实现进程与线程监控
发表于: 2021-9-12 20:32 19008

[原创]通过PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine实现进程与线程监控

2021-9-12 20:32
19008

    PsSetCreateProcessNotifyRoutineEx是Windows提供得一个可以通过设置回调函数实现进程监控的内核API。其在文档的定义如下:

    参数NotifyRoutine指向了CREATE_PROCESS_NOTIFY_ROUTINE_EX的指针,来指定我们需要执行的回调函数。

    参数Remove来指定是把回调函数加入回调列表中,为False则把例程添加进列表中,为True则把例程从列表中删除。当函数返回值为STATUS_SUCCESS时,则函数调用成功。

    PCREATE_PROCESS_NOTIFY_EOUTINE_EX的回调函数定义如下:

    参数Process是指向EPROCESS的指针。

    参数ProcessId则是进程ID。

    参数CreateInfo是一个指向PS_CREATE_NOTIFY_INFO的指针,当它为NULL时表明进程退出,不为NULL时表明进程创建,里面存储着要创建的进程信息。

    PS_CREATE_NOTIFY_INFO的具体定义如下所示:

    参数ImageFileName说明了要创建的进程的名字。

    参数CreationStatus说明了进程创建操作返回的NTSTATUS值。我们可以通过把这个值修改为STATUS_UNSUCCESSFUL来阻止进程的创建。

    根据上述内容我们可以写出相应的代码如下:

    其中的CreateProcessNotifyEx的实现如下:

    这里我将新创建的进程打印出来且拦截名为demo.exe的进程。

    在卸载驱动时,必须要将例程从列表中删除,否则新创建或者退出的进程会因为找不到回调函数而蓝屏。所以卸载驱动的代码如下:

    这里还必须说明的是,调用PsSetCreateProcessNotifyRoutineEx函数时,需要对强制完整性签名进行破解。破解的方法也很简单,只需要把驱动对象中的DriverSection中的Flags包含0x20就行,代码如下:

    其中的KLDR_DATA_TABLE_ENTRY的定义如下:

    代码的最终效果如下所示:

    

    相比于进程监控,设置线程监控的API相对简单,定义如下:

    参数NotifyRoutine指向了要设置的例程,而PCREATE_THREAD_NOTIFY_ROUTINE的定义如下:

    参数ProcessId和ThreadId分别代表了进程与线程ID。

    参数Create为True和False分别代表了线程的创建和销毁。


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

最后于 2021-10-17 17:12 被1900编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (6)
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2021-9-13 08:14
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
 
2021-9-16 10:48
0
雪    币: 858
活跃值: (643)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark
2021-9-18 07:56
0
雪    币: 4120
活跃值: (5822)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
这不是早就有了吗
2021-9-18 08:47
0
雪    币: 22412
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
6
blck四 这不是早就有了吗

是嘛。。没在论坛搜索到。。我以为还没人发

最后于 2021-9-27 18:51 被1900编辑 ,原因:
2021-9-18 09:40
0
雪    币: 22412
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
7
1900 是嘛。。没在论文搜索到。。我以为还没人发


最后于 2021-9-27 18:51 被1900编辑 ,原因:
2021-9-18 09:41
0
游客
登录 | 注册 方可回帖
返回
//