首页
社区
课程
招聘
[求助]minifilter怎么拦截进程启动参数?
2022-4-17 13:00 8762

[求助]minifilter怎么拦截进程启动参数?

2022-4-17 13:00
8762

之前经过大侠们指点已成功实现minifilter做R0和R3通讯拦截文件加载和启动,但发现只能拦截文件路径,对于启动参数似乎没找到相关的结构属性。查了网上资料都是通过EPROCESS、PEB结构或者Hook CreateProcess获取exe的启动参数,但在minifitler中此时进程还没有创建成功,没有EPROCESS、PEB这些结构,那么和文件路径一起的启动参数在哪里获取呢?翻遍了IRP的各个属性都没找到。难道还要再挂钩CreateProcess才能拦截到lpCommandLine参数?

 

更新:下面有大佬提到用ProcessNotifyExRoutineEx来拦截进程创建获取启动参数---这个方案经测试可行,但是却带来另一个问题:如果一台多用户计算机上A、B、C三个用户同时登陆,并且每个用户在各自的session都启动了同一个R3的监控程序(运行在不同session),那么此时如果ProcessNotifyExRoutineEx拦截到一个进程启动事件,怎么判断是哪个session发起的进程启动事件?又怎么向运行在这个session的R3程序发送fltSendMessage消息呢?如果是在minifilter的PreOperation会有一个ClientCookie参数标识是哪个客户端发起的,可以解决用户标识问题(却解决不了启动参数拦截问题);但是在ProcessNotifyExRoutineEx中没有这个ClientCookie参数,虽然可以拦截启动参数,却又解决不了客户端识别的问题。。。。继续请教各位大佬有没有更完美的方案既能拦截启动参数,又能标识分辨客户端调用fltSendMessage回发消息呢?


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

最后于 2022-4-18 00:45 被碧水秋沙编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 333
活跃值: (970)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
fatcateatrat 2022-4-17 13:22
2
0
PsSetCreateProcessNotifyRoutine+PsGetProcessPEB
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
碧水秋沙 2022-4-17 13:38
3
0
fatcateatrat PsSetCreateProcessNotifyRoutine+PsGetProcessPEB

这个是我最开始用的方案,见这里,后来走不下去了才用的minifilter方案。


这个能和minifilter放在一起用吗?程序结构上似乎有些不太一样,minifilter主要是对PreOperation和PostOperation这些预操作和后操作函数做编程,PsSetCreateProcessNotifyRoutine分派函数得放到外面去了,不知道还能不能调用fltsendmessage这些flt的函数。我来试试。

最后于 2022-4-17 13:39 被碧水秋沙编辑 ,原因:
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
碧水秋沙 2022-4-17 14:08
4
0
fatcateatrat PsSetCreateProcessNotifyRoutine+PsGetProcessPEB
经测试行不通,直接蓝屏了。PsSetCreateProcessNotifyRoutine返回类型是VOID,minifilter PreOperation的返回类型是FLT_PREOP_CALLBACK_STATUS,两者返回类型都不一样,如果在PsSetCreateProcessNotifyRoutine中调用fltsendmessage向R3发送消息,忽略不返回FLT_PREOP_SUCCESS_WITH_CALLBACK传递到下一层minifilter的话,直接蓝屏崩溃。

继续等待各路大侠们的解决方案。
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2022-4-17 16:57
5
0
PsSetCreateProcessNotifyRoutineEx
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
碧水秋沙 2022-4-17 18:42
6
0
hzqst PsSetCreateProcessNotifyRoutineEx

修正回复,调整了一下似乎运行通过了。PsSetCreateProcessNotifyRoutineEx可以和minifilter一起使用,把minifilter的PreOperation和PostOperation置空不处理就可以了,不过这样的话就没有cookie了,不能分辨是与哪个客户端通信,实现上还是有缺陷。

最后于 2022-4-18 09:06 被碧水秋沙编辑 ,原因:
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
碧水秋沙 2022-4-21 16:28
7
0
看来还是得自己来解决:
内核PsSetCreateProcessNotifyRoutineEx创建进程时在CreateInfo会有父进程ID参数parenetId,把它传回给R3通过ProcessIdToSessionId得到父进程所在sessionID,再通过sessionID查到对应session的R3监听程序
雪    币: 892
活跃值: (1270)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Hbruce 2022-6-21 15:49
8
0
CreateInfo 不是有CommandLine 么
雪    币: 180
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_rrxdklkv 2022-7-23 15:30
9
0
楼主,我们也需要开发一个文件保护工具,为了防止文件被病毒破坏和未授权人工破坏,所以想做到保护某个文件夹只能授权进程和输入密码的人才能访问。查了资料minifilter应该能实现,看了你这个论坛的发帖感觉跟你做的东西类似。所以想详细请教,Q2407971992期待赐教
雪    币: 2496
活跃值: (211)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bjdxwgb 2023-9-7 09:02
10
0
minifilter中看了下avscan,并不能全拦截.启动了几个程序,并没有经过postcreate
游客
登录 | 注册 方可回帖
返回