阅读:2489回复:10
请朋友们帮一下,不胜感激:用HOOK的方法怎么才能钩到文件删除和重命名呢?只读和删除得实现了,请看内容...
我现在钩ZwWriteFile和ZwSetInformationFile能实现文件的防止修改和删除,但文件的重命名和覆盖怎么办??
本来想再钩住ZwQueryInformationFile,在文件取得信息中,把文件属性改成正在打开,不过怎么都得不到当前正在操作的文件名,而是得到系统\\fonts目录下的文件,真是晕呀,哪位能帮我解答一下,谢谢了!!,下面是我的HookZwQueryInformationFile代码,是不是有问题?(请不要怀疑是内存分配的问题,我在别的函数中都能用此方法得到文件名) rc = ((REALZWQUERYINFORMATIONFILE)(RealZwQueryInformationFile))( FileHandle, IoStatusBlock, FileInformation, Length, FileInformationClass); if( !NT_SUCCESS(rc )) { return(rc); } //删除操作 if( Length ==sizeof( FILE_BASIC_INFORMATION )) { PUNICODE_STRING puniFileName; ANSI_STRING ansiFileName; IO_STATUS_BLOCK MyIoStatusBlock; PFILE_NAME_INFORMATION NameInfo; NameInfo = (PFILE_NAME_INFORMATION)ExAllocatePool( PagedPool, sizeof(FILE_NAME_INFORMATION)*256); ntStatus = ((REALZWQUERYINFORMATIONFILE)(RealZwQueryInformationFile))( FileHandle, &MyIoStatusBlock, NameInfo, sizeof(FILE_NAME_INFORMATION)*256, FileNameInformation ); if( NT_SUCCESS(ntStatus)) { PWSTR pTemp = (PWSTR)ExAllocatePool( PagedPool, sizeof(PWSTR)*NameInfo->FileNameLength); DbgPrint(\"Get file information!\\n\"); puniFileName = (PUNICODE_STRING)ExAllocatePool( PagedPool, sizeof( UNICODE_STRING)); puniFileName->Buffer = pTemp; RtlCopyMemory( puniFileName->Buffer, NameInfo->FileName, NameInfo->FileNameLength); puniFileName->Length = NameInfo->FileNameLength; puniFileName->MaximumLength = NameInfo->FileNameLength; RtlUnicodeStringToAnsiString( &ansiFileName, puniFileName, TRUE); //做测试用为E:上的特定文 if( ansiFileName.Length ==33) { DbgPrint(\"Delete file Name: %s\\n\", ansiFileName.Buffer);//就是这个得到的都是system\\fonts下的文件 } ExFreePool( puniFileName); ExFreePool( pTemp); RtlFreeAnsiString( &ansiFileName); } if( NameInfo !=NULL) { ExFreePool( NameInfo); } } |
|
最新喜欢:![]() |
沙发#
发布于:2003-10-28 13:03
用obQueryName得到文件名,再不行用hash方法。实在不行,去找那堆参考源程序,没有不行的。
重命名是在ZwSetInformationFile, 覆盖是ZwCreateFile/ZwOpenFile, 先去熟悉win32 storage API的用法再hook, |
|
板凳#
发布于:2003-10-28 13:05
保护是相对的。
我写一个跟pjf一样的东东,让所有HOOK/ifs filter全部无效。不管你如何保护,照删除,照读,除非你加密,否则全是.......。 :D :D :D :D |
|
地板#
发布于:2003-10-28 13:42
知道老大牛呢,不过公司的产品总要完成先,苦命
我还是一个一个来解决吧,再问一下:我也发现了改名的时候要了ZwSetInformationFile,难不成返回错误的值? |
|
地下室#
发布于:2003-10-28 14:07
有请 VCMFC:
还是得到问到文件名的问题? obQueryName是什么函数,我怎么没找到?还有在ZwSetInformationFile里如何判断是改名操作呢 |
|
5楼#
发布于:2003-10-28 15:42
感谢VCMFC,现在重命名的问题解决了.
谁能详细说一下,文件防止文件被覆盖的文件? |
|
6楼#
发布于:2003-10-28 22:56
保护是相对的。 是不是找到那些驱动的ATTACHEDDEVIDE然后全清0啊?? |
|
|
7楼#
发布于:2003-10-29 08:58
早上好,同学们
帮我把覆盖的问题解决了再说呀 致敬! :( :( :( |
|
8楼#
发布于:2003-10-29 09:38
[quote]保护是相对的。 是不是找到那些驱动的ATTACHEDDEVIDE然后全清0啊?? [/quote] 如果这样做,会产生什么后果呢???? 感谢 pjf大哥的长期指点,兄弟在这里谢谢你了。 回去了。 |
|
9楼#
发布于:2003-10-29 12:57
vcmfc:
你还没帮我回答问题呢,:( |
|
10楼#
发布于:2004-12-03 11:12
楼主的文件重命名问题是如何解决的呢?我试过用ZwSetInformationFile这个函数来给文件重命名,但是DDK中说它没有FileNameInformation这个参数呀,我强行给这个参数系统提示说“有一个参数错误”。
|
|
|