关于监控文件系统上的IRP序列

最近在写一个基于生物免疫学原理的恶意代码检测系统,其中需要应用程序在Windows内核中产生的IRP序列。本文总结一下怎么获得文件系统上的IRP序列。希望对需要ring0主动向ring3频繁通信的朋友有点帮助


基本框架是Minifilter。向minifilter注册回调函数来监控走过文件系统设备上的IRP。

Minifilter框架详见微软WDK文档:http://msdn.microsoft.com/en-us/library/ff540402.aspx


接下来就是如何拿到IRP序列并传输到ring3层:

首先得申请一块ring0和ring3的共享内存

1. ExAllocatePool申请一块非分页内存

2. IoAllocateMdl得到内存块的描述符列表MDL

3. MmBuildMdlForNonPagedPool将2中得到的MDL更新成物理页的描述符

通过向minifilter发送消息(FilterSendMessage),或者通过DeviceIoControl,来获得ring0中申请的内存的ring3地址

1. 在处理ring3消息的函数中通过MmMapLockedPages将物理页映射到当前进程地址空间,拿到虚拟地址

2. 将得到的当前进程地址空间地址通过输出缓冲区传回ring3


接下来就可以通过向那段共享内存写入数据,并用事件(Event)来通知ring3接收数据。这时候注意得让ring3在读取完毕后通过一个事件或者别的同步手段通知内核继续IRP捕获。

能这么做的原因是minifilter似乎已经完成了IRP请求的序列化,通过测试发现,针对单个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值