首页
社区
课程
招聘
[旧帖] [求助]Hook ZwDeviceIoControlFile后如果过滤? 0.00雪花
发表于: 2009-8-6 18:30 6807

[旧帖] [求助]Hook ZwDeviceIoControlFile后如果过滤? 0.00雪花

2009-8-6 18:30
6807
Hook ZwDeviceIoControlFile 后怎么过滤呢,是不是通过它的参数?
ZwDeviceIoControlFile(

IN HANDLE FileHandle,

IN HANDLE Event OPTIONAL,

IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,

IN PVOID ApcContext OPTIONAL,

OUT PIO_STATUS_BLOCK IoStatusBlock,

IN ULONG IoControlCode,

IN PVOID InputBuffer OPTIONAL,

IN ULONG InputBufferLength,

OUT PVOID OutputBuffer OPTIONAL,

IN ULONG OutputBufferLength

);
使用HANDLE FileHandle这个参数吗?
它代表是的是设备对象?和驱动对象是一样的?
我想通过IoGetDeviceObjectPointer取得要HOOK的驱动的DEVICE_OBJECT,再通过DEVICE_OBJECT获取其DRIVER_OBJECT,不知道这个函数转入的HANDLE是什么,那位前辈可以告诉我吗?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶等人 ,指点
2009-8-6 22:47
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
3
IoGetDeviceObjectPointer是通过对象名而不是对象句柄来获取对象指针。
通过对象句柄来获取对象指针应该使用ObReferenceObjectByHandle
这里ZwDeviceIoControlFile传入的就是一个Handle,一般是代表Device的FileObject的句柄,使用ObReferenceObjectByHandle得到其指针后再进一步得到DeviceObject。
2009-8-6 22:58
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢,小聪大大指点!
2009-8-6 23:35
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
NTSTATUS NewZwDeviceIoControlFile(
                                                                  IN HANDLE FileHandle,
                                                                  IN HANDLE Event OPTIONAL,
                                                                  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
                                                                  IN PVOID ApcContext OPTIONAL,
                                                                  OUT PIO_STATUS_BLOCK IoStatusBlock,
                                                                  IN ULONG IoControlCode,
                                                                  IN PVOID InputBuffer OPTIONAL,
                                                                  IN ULONG InputBufferLength,
                                                                  OUT PVOID OutputBuffer OPTIONAL,
                                                                  IN ULONG OutputBufferLength
                                                                  )
                                                                  
                                                                  
                                                                  
                                                                  
{
        //        LONG numconn;
        //        LONG i;
        NTSTATUS rc;
        PFILE_OBJECT pFile;
        PDEVICE_OBJECT pDev;
        PDRIVER_OBJECT pDrv;
        rc = InstallTCPDriverHook();
        if(NT_SUCCESS(rc))
        {

       
        rc =ObReferenceObjectByHandle(FileHandle,0,*IoFileObjectType,
                                                        KernelMode,(PVOID*)&pFile,0);
        if(NT_SUCCESS(rc))
        {
               
                pDev = pFile->DeviceObject;
                pDrv= pDev->DriverObject;
                DbgPrint("转换句柄Rc:%08x,句柄:%08x,DEVICE:%08x!\n",pDrv,pDrv_tcpip,pDev);
                if(pDrv_tcpip == pDrv)
                {
                        DbgPrint("找到句柄!\n");
                }
        //        else{
        //                DbgPrint("句柄没有找到!\n");
        //        }
        }

        }
       

        rc = ((ZWDEVICEIOCONTROLFILE)(OldZwDeviceIoControlFile)) (FileHandle,
                Event,
                ApcRoutine,
                ApcContext,
                IoStatusBlock,
                IoControlCode,
                InputBuffer,
                InputBufferLength,
                OutputBuffer,
                OutputBufferLength
                );
return rc;
}
这样写对不对呢?
2009-8-7 22:28
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
其中pDrv_tcpip我是这样获取的        ntStatus = IoGetDeviceObjectPointer(&deviceTCPUnicodeString, FILE_READ_DATA, &pFile_tcp, &pDev_tcp);
        if(!NT_SUCCESS(ntStatus))
        {
                DbgPrint("查找失败!\n");
                return ntStatus;
        }
        pDrv_tcpip = pDev_tcp->DriverObject;
2009-8-7 22:30
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
自己顶上去,等高手回答!
2009-8-9 11:44
0
游客
登录 | 注册 方可回帖
返回
//