首页
社区
课程
招聘
[求助]hook ZwCreateFile遇到的获取文件名字和文件全路径的困惑??
发表于: 2014-8-7 09:19 3606

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

2014-8-7 09:19
3606
在我的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
支持
分享
最新回复 (2)
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
ObjectAttributes->RootDirectory  判断是否为 NULL
获取路径
NTSTATUS GetFullFilePath(IN HANDLE Handle = ObjectAttributes->RootDirectory, IN OUT PUNICODE_STRING pFilePath)
{
    NTSTATUS status;
    PVOID pObj;
    ULONG BufLength;
    ULONG i;
    POBJECT_NAME_INFORMATION pTmpStr;
   
    status = ObReferenceObjectByHandle(Handle, 0, NULL, KernelMode, &pObj, NULL );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    BufLength = pFilePath->MaximumLength+sizeof(UNICODE_STRING);
    if (BufLength < 1024) {
        BufLength = 1024;
    }
    pTmpStr = (POBJECT_NAME_INFORMATION)ExAllocatePoolWithTag(PagedPool, BufLength, FILETAG);
    if (pTmpStr == NULL) {
        ObDereferenceObject(pObj);
        return STATUS_INSUFFICIENT_RESOURCES;
    }
    memset(pTmpStr, 0, BufLength);
    i = BufLength;
    status = ObQueryNameString(pObj, pTmpStr, i, &BufLength);
    ObDereferenceObject(pObj);
    if (NT_SUCCESS(status)) {
        RtlCopyUnicodeString(pFilePath, &(pTmpStr->Name));
    }
    ExFreePoolWithTag(pTmpStr, FILETAG);
    return status;
}

否则就从 ObjectAttributes->ObjectName 中得到
2014-8-7 10:18
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我试试你给的代码哈,谢谢你。
2014-8-8 14:53
0
游客
登录 | 注册 方可回帖
返回
//