HOOK了NtCreateFile后如何获取被操作文件名

720
2024/1/1 17:10:46
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

要获取被操作的文件名,您可以在HOOK的回调函数中进行操作。具体步骤如下:
1. 在您的HOOK回调函数中,获取`NtCreateFile`函数的参数,包括`FileObject`和`FileName`。
2. 使用`ObReferenceObjectByHandle`函数将`FileObject`转换为文件对象。
3. 使用`IoFileObjectType`对象的`FileObject->FileName`成员获取文件名。
下面是一个示例代码,演示了如何获取被操作文件的文件名:

NTSTATUS NtCreateFileHook(

????OUT?PHANDLE?FileHandle,

????IN?ACCESS_MASK?DesiredAccess,

????IN?POBJECT_ATTRIBUTES?ObjectAttributes,

????OUT?PIO_STATUS_BLOCK?IoStatusBlock,

????IN?PLARGE_INTEGER?AllocationSize?OPTIONAL,

????IN?ULONG?FileAttributes,

????IN?ULONG?ShareAccess,

????IN?ULONG?CreateDisposition,

????IN?ULONG?CreateOptions,

????IN?PVOID?EaBuffer?OPTIONAL,

????IN?ULONG?EaLength ) {

????//?调用原始的NtCreateFile函数

????NTSTATUS?status?=?OriginalNtCreateFile(

????????FileHandle,

????????DesiredAccess,

????????ObjectAttributes,

????????IoStatusBlock,

????????AllocationSize,

????????FileAttributes,

????????ShareAccess,

????????CreateDisposition,

????????CreateOptions,

????????EaBuffer,

????????EaLength

????);

????//?获取被操作的文件名

????if?(NT_SUCCESS(status))

????{

????????PFILE_OBJECT?fileObject;

????????status?=?ObReferenceObjectByHandle(*FileHandle,?FILE_READ_ATTRIBUTES,?*IoFileObjectType,?

????????KernelMode,?(PVOID*)&fileObject,?NULL);

????????if?(NT_SUCCESS(status))

????????{

????????????UNICODE_STRING?fileName?=?fileObject->FileName;

????????????//?在这里进行你的处理,例如输出文件名

????????????DbgPrint(“%wZ\n”,?&fileName);

????????????ObDereferenceObject(fileObject);

????????}

????}

????return?status; }

请注意,这只是一个示例代码,用于说明如何在HOOK NtCreateFile后获取被操作的文件名。实际应用中,您需要根据具体的需求进行修改和完善。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: Hook(钩子技术)基本知识讲解,原理