[求助]Hook NtCreateFile出现的囧问题。。。
|
 
- 精华
- 3
- 经验
- 754 点
- 金钱
- 1361 元
- 威望
- 40 点
- 贡献
- 13 点
|
凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
[求助]Hook NtCreateFile出现的囧问题。。。
新建一个文件要调用CreatFile,然后我就想如果想对某个特定目录不能新建文件,Hook CreateFile能不能解决问题?
代码如下- NTSTATUS
- MyNtCreateFile(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG CreateDisposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer,
- IN ULONG EaLength)
- {
- NTSTATUS status=Orig_NtCreateFile(
- FileHandle,
- DesiredAccess,
- ObjectAttributes,
- IoStatusBlock,
- AllocationSize,
- FileAttributes,
- ShareAccess,
- CreateDisposition,
- CreateOptions,
- EaBuffer,
- EaLength);
- PCHAR ProcessName;
- ULONG Process;
- 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;
- }
复制代码 结果是,第一次创建,说文件已存在,过了一会,C:\test里出现了1000个新建文本文件。。。
好吓人啊好吓人。。。
这个怎么回事啊,难道还有别的函数可以创建文件? |
|
|
|
|
|
|
|
|
 
- 精华
- 1
- 经验
- 3007 点
- 金钱
- 799 元
- 威望
- 365 点
- 贡献
- 34 点
|
2楼
发表于 2009-7-1 16:44
| 只看该作者
初步判断,是每次建立了文件之后通过CreateFile探测都被告知拒绝访问,于是就会继续用下一个名字建立文件(比如“新建 文本文档 (2).txt”)。
至于为什么能建立成功,估计是你的字符串比较的问题吧,你去掉那个判断试试。 |
|
|
FlowerCode 保留随时编辑此帖的权利,恕不另行通知。本帖可能包括一些技术上的不准确性或打字错误。FlowerCode “按原样”提供本帖,不包括任何明示或暗含的保证,包括但不限于适销性或适用于某种特殊用途的保证。
|
|
|
|
|
|
 
- 精华
- 3
- 经验
- 754 点
- 金钱
- 1361 元
- 威望
- 40 点
- 贡献
- 13 点
|
3楼
发表于 2009-7-1 17:21
| 只看该作者
| UNICODE_STRING检查包含某个字符串的函数是什么啊?或者比较前几位的函数是什么 |
|
|
|
|
|
|
|
|

- 精华
- 0
- 经验
- 218 点
- 金钱
- 103 元
- 威望
- 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;
}
字符串比较不够严密,多试试就行了。 |
|
|
我是一个小菜鸟咿呀咿呀哟~
|
|
|
|
|
|
 
- 精华
- 3
- 经验
- 754 点
- 金钱
- 1361 元
- 威望
- 40 点
- 贡献
- 13 点
|
5楼
发表于 2009-7-1 23:24
| 只看该作者
|
|
|
|
|
|
|
|
 
- 精华
- 8
- 经验
- 309 点
- 金钱
- 359 元
- 威望
- 205 点
- 贡献
- 17 点

|
6楼
发表于 2009-7-1 23:36
| 只看该作者
你先调用了Orig_ZwCreateFile然后又返回一个STATUS_ACCESS_DENIED;
无奈啊~~~ |
|
|
|
|
|
|
|
|
 
- 精华
- 3
- 经验
- 754 点
- 金钱
- 1361 元
- 威望
- 40 点
- 贡献
- 13 点
|
7楼
发表于 2009-7-1 23:58
| 只看该作者
|
|
|
|
|
|
|