对内核的直接挂钩

本文详细介绍了如何在Windows系统中通过挂钩INT 1和INT 3中断处理程序来实现内核级别的函数挂钩,特别是针对IoCreateDevice()函数。通过这种方式,能够在设备驱动程序加载时进行干预,例如监控USB设备的IRP_MJ_DEVICE_CONTROL请求。文章描述了从分配内存、复制IDT、修改IDT到实现INT 1和INT 3的代理函数的整个过程,以确保目标函数能够正常执行而不会察觉到被挂钩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介
         有时在开发中,会遇到这样一种情况,当非常需要对某些内核函数进行挂钩时,而常规基于PE的挂钩,往往达不到目的。在本文中将要探讨的,是怎样直接挂钩内核函数,另外,在示例中,还要演示在系统中显示为一个基本磁盘的可移动USB存储设备,并在其上创建及管理多个分区(因为这样或那样的原因,Windows既不允许,也不能识别可移动存储设备上的多个分区,所以我们要“欺骗”一下系统)。因为本文中的示例只用作演示目的,所以只对一个函数进行了挂钩,但可对文中阐述的方法进行扩展,以处理多个函数(例如,工程中可能需要直接挂钩好几个NDIS库中的函数)。再者,你应该清楚地认识到,本文是在讲述直接挂钩,而不是研究USB存储,所以,用作示例的问题当然还可有其他的方法来解决。
 
 
         我们的问题
         USB设备在系统中表示的方式,定义在STORAGE_DEVICE_DESCRIPTOR结构的RemovableMedia字段中,此结构通常会在USBSTOR.SYS响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回。如果设备生产商想让此设备显示为一个基本磁盘,会在驱动程序中设置STORAGE_DEVICE_DESCRIPTOR 结构中RemovableMedia字段,并在响应IOCTL_STORAGE_QUERY_PROPERTY请求时返回FALSE。由此,设备在系统中就显示为一个基本磁盘,而DISK.SYS也不知道它实际上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛虫的爹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值