首页
社区
课程
招聘
[求助]windows平台抓包,并获取进程、线程信息
发表于: 2025-2-12 17:41 3855

[求助]windows平台抓包,并获取进程、线程信息

2025-2-12 17:41
3855

需求场景

系统上有恶意程序外联,例如频繁发起DNS请求。需要定位发起这个DNS请求的进程和线程。
之所以想要获取线程信息,是因为有时获取到的是系统进程system(PID=4),但是实际上是其中的某个线程发起的DNS请求。

考虑到的解决方案

现有的工具是有办法定位的,但是要么需要多个工具配合比较麻烦,要么工具比较复杂,太重了。因此想写一个小程序实现定位DNS请求进程、线程信息。
但是本人对windows开发不太熟悉,参考网上资料和询问大模型的获取的信息,找到了以下几个方案:

1. ETW监控

使用ETW 追踪 MS-Windows-DNS-Client 相关的事件

优点:

  • 可以获取到进程信息
  • 开发难度低

缺点:

  • 不依赖操作系统解析的应用程序不受 ETW 追踪 MS-Windows-DNS-Client 影响
  • 可能会出现 PID=4 (System 伪进程) 的 DNS 解析
  • 只能获取到进程信息,获取不到线程信息

2. 使用gopacket抓包

优点:

  • 开发难度低

缺点:

  • gopacket本身不带进程信息,先抓到包再获取进程、线程信息又存在时间窗口的问题,可能获取不到。

3. WFP

编写 WFP Callout 驱动,注册到 FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 层,捕获 DNS 流量。

优点:

  • 可以获取全部的流量信息

缺点:

  • 开发难度大
  • ALE好像只能获取到PID信息?获取不到线程信息?同时,也存在无法穿透系统进程(system,PID=4)伪装的问题?

问题

以上哪种实现方式比较好?还有没有其他更好的方案?
谢谢


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 553
活跃值: (605)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
windows 平台当然建议WFP啦,跟着微软走就好了。
2025-2-20 09:38
0
雪    币: 4619
活跃值: (333)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
即便用wfp,抓到的dns发包进程也是svchost,因为这个进程是一个dnscache服务,系统绝大多数的dns发送都通过他,基本流程是其他进程投递lpc消息给这个进程,然后等待应答,svc发包执行解析,获得结果后应答lpc,所以要拿到正确的dns解析进程必须在查询到有dns发包时快速检索svc全部线程中有lpc等待回复的那个,基本就能拿到,当然也有极个别拿不到。实测可行
2025-2-22 10:20
0
雪    币: 25
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hook dnscache可以拿到一部分进程信息,但也仅限于一部分
2025-3-7 14:16
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
沧海浮萍_ 即便用wfp,抓到的dns发包进程也是svchost,因为这个进程是一个dnscache服务,系统绝大多数的dns发送都通过他,基本流程是其他进程投递lpc消息给这个进程,然后等待应答,svc发包执行 ...
我也遇到了这个DNS分析难题,关于你讲的这一段操作能详细讲解下吗。
2025-10-21 12:16
0
雪    币: 4619
活跃值: (333)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不好意思,这么久才回复,我本周补一个帖子吧,详细描述下相关的代码细节
2025-12-16 11:11
1
雪    币: 2815
活跃值: (12067)
能力值: (RANK:385 )
在线值:
发帖
回帖
粉丝
7
沧海浮萍_ 不好意思,这么久才回复,我本周补一个帖子吧,详细描述下相关的代码细节
很好.期待新帖子.
2025-12-16 11:33
0
雪    币: 4619
活跃值: (333)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
帖子在这里,希望能有所帮助:https://bbs.kanxue.com/thread-289486.htm
2025-12-17 15:21
0
游客
登录 | 注册 方可回帖
返回