首页
社区
课程
招聘
[原创]对象名字劫持,如何隐藏IRP DISPATCH HOOK
发表于: 2012-2-11 22:37 13298

[原创]对象名字劫持,如何隐藏IRP DISPATCH HOOK

2012-2-11 22:37
13298

翻看大学写的代码,发现一段XXX代码,遂写成篇简单文章。
驱动程序中通过一个驱动对象名来获取对应的驱动对象通常是调用ObReferenceObjectByName,ObReferenceObjectByName的声明如下
NTSTATUS
ObReferenceObjectByName (
    __in PUNICODE_STRING ObjectName,
    __in ULONG Attributes,
    __in_opt PACCESS_STATE AccessState,
    __in_opt ACCESS_MASK DesiredAccess,
    __in POBJECT_TYPE ObjectType,
    __in KPROCESSOR_MODE AccessMode,
    __inout_opt PVOID ParseContext,
    __out PVOID *Object
    )
对象管理器就会根据ObjectName去遍历对应对象目录下的所有对象,看哪些对象的名字跟ObjectName匹配。那驱动对象的名字是存储在哪里呢?答案就是在
OBJECT_HEADER_NAME_INFO里面。
typedef struct _OBJECT_HEADER_NAME_INFO {
    POBJECT_DIRECTORY Directory;   //对象所属的路径
    UNICODE_STRING Name;//对象名
    ULONG QueryReferences;
} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;

那这样修改对象名,那通过ObReferenceObjectByName就无法获取到正确的驱动对象了。下面介绍如何隐藏IRP DISPATCH HOOK。

1) 调用ObReferenceObjectByName获取\FileSystem\ntfs对应的驱动对象的指针pDrvObj
2)替换掉你想要替换的DISPACTH指针
3)修改\FileSystem\ntfs这个名字
        OBJECT_HEADER* lpObjectHeader = NULL;
        POBJECT_HEADER_NAME_INFO lpObjectNameInfo = NULL;
        UNICODE_STRING uniXX;
        RtlInitUnicodeString (&uniXX, L"Hello 123");       
        RtlCopyUnicodeString(&pDrvObj->DriverName,&uniXX);
        lpObjectHeader = OBJECT_TO_OBJECT_HEADER(pDrvObj);
        lpObjectNameInfo = (POBJECT_HEADER_NAME_INFO)((DWORD)lpObjectHeader - (DWORD)lpObjectHeader->NameInfoOffset);
        RtlCopyUnicodeString(&lpObjectNameInfo->Name,&uniXX);
4) 保存好原来的驱动对象信息
        RtlCopyMemory(&pDrvObject,pDrvObj,sizeof(DRIVER_OBJECT));
5)用IoCreateDriverc创建一个同名的驱动对象,初始化DISPACTH指针为原始指针
NTKERNELAPI
NTSTATUS
IoCreateDriver(
    __in_opt PUNICODE_STRING DriverName,
    __in PDRIVER_INITIALIZE  DriverEntry
    );

任务完成。其他用途自由发挥。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (9)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
部分ARK的作者没这么好骗。
2012-2-11 23:11
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
有bin来测试下么。
2012-2-13 13:15
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
4
liner没那么好骗的,都曝光了
2012-2-13 13:30
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
发出来就不好骗了.
通过符号链接什么的也能间接找到.
2012-2-13 16:22
0
雪    币: 13564
活跃值: (3912)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习    谢谢分享
2012-2-15 23:37
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
膜拜啊。。。首页留名呢....谢谢楼主分享.....
2012-2-16 06:41
0
雪    币: 321
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个方法很邪恶。
2012-2-16 09:25
0
雪    币: 15
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
哈哈 明白楼主最后一句话的真谛了
2012-2-16 09:35
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼主,暂且留名标记
2012-2-27 12:05
0
游客
登录 | 注册 方可回帖
返回
//