注册 |登录

0GiNr技术社区论坛系统底层开发 › 查看主题

772

查看

6

回复
返回列表

大牛

PH The Great

Rank: 4Rank: 4

金钱
1490 元 
经验
808 点 
威望
40 点 
贡献
13 点 
精华
go

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

1
发表于 2009-7-1 16:20 | 只看该作者 | 倒序看帖 | 打印
凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
新建一个文件要调用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个新建文本文件。。。
好吓人啊好吓人。。。
这个怎么回事啊,难道还有别的函数可以创建文件?

TOP

0GiNr核心团队

“花”指令

Rank: 12Rank: 12

金钱
1497 元 
经验
3248 点 
威望
365 点 
贡献
34 点 
精华
2
发表于 2009-7-1 16:44 | 只看该作者
初步判断,是每次建立了文件之后通过CreateFile探测都被告知拒绝访问,于是就会继续用下一个名字建立文件(比如“新建 文本文档 (2).txt”)。

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

TOP

大牛

PH The Great

Rank: 4Rank: 4

金钱
1490 元 
经验
808 点 
威望
40 点 
贡献
13 点 
精华
3
发表于 2009-7-1 17:21 | 只看该作者
UNICODE_STRING检查包含某个字符串的函数是什么啊?或者比较前几位的函数是什么

TOP

Rank: 3

金钱
125 元 
经验
226 点 
威望
20 点 
贡献
0 点 
精华
4
发表于 2009-7-1 19:12 | 只看该作者
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

大牛

PH The Great

Rank: 4Rank: 4

金钱
1490 元 
经验
808 点 
威望
40 点 
贡献
13 点 
精华
5
发表于 2009-7-1 23:24 | 只看该作者
那怎样才是严密啊?

TOP

0GiNr核心团队

论坛管理员

Rank: 12Rank: 12

金钱
10488 元 
经验
10357 点 
威望
205 点 
贡献
17 点 
精华

技术高手

6
发表于 2009-7-1 23:36 | 只看该作者
你先调用了Orig_ZwCreateFile然后又返回一个STATUS_ACCESS_DENIED;

无奈啊~~~

TOP

大牛

PH The Great

Rank: 4Rank: 4

金钱
1490 元 
经验
808 点 
威望
40 点 
贡献
13 点 
精华
7
发表于 2009-7-1 23:58 | 只看该作者
哇,NC一句话搞定了!!膜拜~~

TOP

0GiNr安全门户 |联系我们

GMT+8, 2010-9-4 00:21.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.