首页
社区
课程
招聘
hook ZwCreateFile遇到的获取文件名字和文件全路径的困惑??
发表于: 2014-8-5 10:06 5946

hook ZwCreateFile遇到的获取文件名字和文件全路径的困惑??

2014-8-5 10:06
5946
在我的hook ZwCreateFile函数中,我用KdPrint输出

      (1)KdPrint(("文件的根目录是: %x \n",ObjectAttributes->RootDirectory));

                  有时候输出结果是754,有时候输出结果是一连串类似数据流的东东。

      (2)KdPrint(("文件名为:%wZ\n",ObjectAttributes->ObjectName));

     有时候输出结果为\??\C:\IVU\ivu\123456.txt:|Raec25ph4sudbf0hAaq5ehw34Nf:$DATA

     有时候输出结果为:|SummaryInformation:$DATA

说实话,我现在不知道如何处理ObjectAttributes->RootDirection不为零的情形时,如何获取文件全路径。

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

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶自己
2014-8-5 10:42
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ObjectAttributes中存储的不一定是文件名,有时候也是流信息:
比如我打印出来的数据是:
{4c8cc155-6c1e-11d1_8e41-00c04fb9386d}:$DATA
2014-8-5 10:44
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
新人学习下,楼下的来解答吧。
2014-8-5 11:48
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就是没有人来回答我呢?囧。
2014-8-5 18:57
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
后来放弃这种方法了。。。。。。
2014-8-6 00:25
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
那你后来用了什么方法,可以教教我吗?
2014-8-6 08:27
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自己回答好了。
造福后人。
int rc;
WCHAR ParentDirectory[256];
ParentDirectory[0]='\0';
if(ObjectAttributes->RootDirectory!=0)
{
   PVOID Object;
   Parent=(PUNICODE_STRING)ParentDirectory;
   rc=ObReferenceObjectByHandle(ObjectAttributes->RootDirectory,0,0,KernelMode,&Object,NULL);
   if(rc==STATUS_SUCCESS)
   rc=ObQueryNameString(Object,ParentDirectory,sizeof(ParentDirectory),&BytesReturned);//获取主目录,并把主目录存储到ParentDirectory这个变量中。PS:我自己用宏KdPrint()打印数据看了,这个函数不仅可以获取目录,还可以获取整个全路径,即包含后面的文件名字。
  if(rc!=STATUS_SUCCESS)
     RtlInitUnicodeString(Parent,L"Unknown\\");
  else
  {
        RtlInitUnicodeString(Parent,L"Unknown\\");
   }
}
//下面是判断ObjectAttributes->ObjectName->Buffer的前7个字符是否为“\??\C:\”
  if(!wcsncmp(ObjectAttributes->ObjectName->Buffer,L"\\??\\c:\\",7))
{
....
   }
}
}

明白的时候,觉得很简单。不明白的时候,觉得很难。我是一个初学者,走了很多弯路,也学到很多东西。
2014-8-6 09:19
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我是来领 Kx 的
2014-8-7 10:20
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
汗!萌不萌给点解答呀?
2014-8-8 14:34
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=瀚海云烟;1306642]我是来领 Kx 的
原来你在另一个帖子里回答了。
2014-8-8 14:36
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
虽然还没解决。我问你一个问题。。为啥我在ZwCreateFile里面获取的对同一个文件的文件句柄不是同一个呢??我真心给跪了。。调试了,纠结了好几天呢。。。
2014-8-15 11:16
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
就算同一个进程,参数完全一样,句柄值也是不一样的呀,- -,没啥吧。原因,windows核心编程好像有说,不记得哪里看过了。他们在句柄表中是不一样的,但是指向的对象是一样的,句柄表里面记录的该句柄所持有的权限等属性。进一步说又到设计时候的问题了
2014-8-15 15:24
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
还没学驱动..无法帮忙..只能帮你顶一下帖子.
2014-9-18 07:03
0
游客
登录 | 注册 方可回帖
返回
//