Hook与IoCallDriver与IofCallDriver

本文介绍了Hook在内核层如何通过IoCallDriver和IofCallDriver实现对系统请求的拦截,以及在不同传输类型下,驱动程序如何处理输入和输出缓冲区。在驱动层,根据传输类型如METHOD_BUFFERED、METHOD_IN_DIRECT等,确定缓冲区的位置以进行数据交互。
摘要由CSDN通过智能技术生成

用途之一:从内核层保护文件不被删除


IoCallDriver:一个内核例程,过滤所有的系统请求

NTSTATUS IoCallDriver(IN PDEVICE_OBJECT  DeviceObject,
    IN OUT PIRP  Irp
    );

IofCallDriver:在IoCallDriver中调用的一个例程,几乎所有的内核驱动都调用了IofCallDriver

NTSTATUS FASTCALL IofCallDriver(IN PDEVICE_OBJECT DeviceObject,
    IN OUT PIRP Irp)
{
	if(pIofCallDriver != NULL) 
	{
		// This routine will either jump immediately to IovCallDriver or
		// IoPerfCallDriver.
		return pIofCallDriver(DeviceObject, Irp, _ReturnAddress());
	}
	return IopfCallDriver(DeviceObject, Irp);
}

几乎所有的系统调用都是如此,进入之后,立刻出现一个jmp,跳到真实的调用处,这就形成了一个系统调用跳转表,只要修改这个地址,就能构成一个hook,现在安全软件能够很容易的检测到它。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值