返回列表 发帖

[求助]Hook NtCreateFile出现的囧问题。。。

凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。

[求助]Hook NtCreateFile出现的囧问题。。。

新建一个文件要调用CreatFile,然后我就想如果想对某个特定目录不能新建文件,Hook CreateFile能不能解决问题?
代码如下
  1. NTSTATUS
  2. MyNtCreateFile(
  3.                            OUT PHANDLE FileHandle,
  4.                            IN ACCESS_MASK DesiredAccess,
  5.                            IN POBJECT_ATTRIBUTES ObjectAttributes,
  6.                            OUT PIO_STATUS_BLOCK IoStatusBlock,
  7.                            IN PLARGE_INTEGER AllocationSize,
  8.                            IN ULONG FileAttributes,
  9.                            IN ULONG ShareAccess,
  10.                            IN ULONG CreateDisposition,
  11.                            IN ULONG CreateOptions,
  12.                            IN PVOID EaBuffer,
  13.                            IN ULONG EaLength)
  14. {
  15.         NTSTATUS status=Orig_NtCreateFile(
  16.                                                                 FileHandle,
  17.                                                                 DesiredAccess,
  18.                                                                 ObjectAttributes,
  19.                                                                 IoStatusBlock,
  20.                                                                 AllocationSize,
  21.                                                                 FileAttributes,
  22.                                                                 ShareAccess,
  23.                                                                 CreateDisposition,
  24.                                                                 CreateOptions,
  25.                                                                 EaBuffer,
  26.                                                                 EaLength);
  27.         PCHAR ProcessName;
  28.         ULONG Process;
  29.         if(!wcsncmp(ObjectAttributes->ObjectName->Buffer,L"\\??\\C:\\test\\",12))
  30.         {
  31.                 DbgPrint("Object name is %wZ",ObjectAttributes->ObjectName);
  32.                 Process=(ULONG)PsGetCurrentProcess();
  33.                 ProcessName=(PCHAR)(Process+0x174);
  34.                 DbgPrint("Proname is %s",ProcessName);
  35.                 return STATUS_ACCESS_DENIED;
  36.         }
  37.         return status;
  38. }
复制代码
结果是,第一次创建,说文件已存在,过了一会,C:\test里出现了1000个新建文本文件。。。
好吓人啊好吓人。。。
这个怎么回事啊,难道还有别的函数可以创建文件?

初步判断,是每次建立了文件之后通过CreateFile探测都被告知拒绝访问,于是就会继续用下一个名字建立文件(比如“新建 文本文档 (2).txt”)。

至于为什么能建立成功,估计是你的字符串比较的问题吧,你去掉那个判断试试。
FlowerCode 保留随时编辑此帖的权利,恕不另行通知。本帖可能包括一些技术上的不准确性或打字错误。FlowerCode “按原样”提供本帖,不包括任何明示或暗含的保证,包括但不限于适销性或适用于某种特殊用途的保证。

TOP

UNICODE_STRING检查包含某个字符串的函数是什么啊?或者比较前几位的函数是什么

TOP

if(!wcsncmp(ObjectAttributes->ObjectName->Buffer,L"\\??\\C:\\test\\",12))

        {

                DbgPrint("Object name is %wZ",ObjectAttributes->ObjectName);

                Process=(ULONG)PsGetCurrentProcess();

                ProcessName=(PCHAR)(Process+0x174);

                DbgPrint("Proname is %s",ProcessName);

                return STATUS_ACCESS_DENIED;

        }

        return status;

}
字符串比较不够严密,多试试就行了。
我是一个小菜鸟咿呀咿呀哟~

TOP

那怎样才是严密啊?

TOP

你先调用了Orig_ZwCreateFile然后又返回一个STATUS_ACCESS_DENIED;

无奈啊~~~

TOP

哇,NC一句话搞定了!!膜拜~~

TOP

返回列表