能力值:
( LV4,RANK:50 )
|
-
-
2 楼
没人遇到过这各问题吗??????
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个前两天我基本搞OK了。我这个人笨了就这个拦截文件创建(Zwcreatefile)都搞了一星期。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
我刚刚在网上找了一下,,好像还有个zwopenfile 也可以创建文件的,,,先试一下,,,
|
能力值:
( LV12,RANK:420 )
|
-
-
5 楼
贴代码,光说你返回失败了,谁知道你怎么写的啊~楼主该好好看看提问的智慧
|
能力值:
( LV13,RANK:330 )
|
-
-
6 楼
LZ应该贴点代码去来吧?
Zwcreatefile拦截文件创建是绝对可行的,你看看自己返回STATUS_ACCESS_DENIED的时机是否正确。
大概形式应该这样
NTSTATUS HookSSDTZwCreateFile(
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)
{
NTSTATUS ntStatus = FilterFromZwCreateFile(DesiredAccess,ObjectAttributes,FileAttributes,CreateDisposition,CreateOptions);
if(NT_SUCCESS(ntStatus))
{
// 调用原始API
ntStatus = g_OrgZwCreateFile( FileHandle,
DesiredAccess,
ObjectAttributes,
IoStatusBlock,
AllocationSize,
FileAttributes,
ShareAccess,
CreateDisposition,
CreateOptions,
EaBuffer OPTIONAL,
EaLength);
}
return ntStatus;
}
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
NTSTATUS HookZwCreateFile(
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
)
{
UNICODE_STRING ufilename;
ANSI_STRING afilename;
char * p;
int i=0;
ufilename=*(ObjectAttributes->ObjectName);
RtlUnicodeStringToAnsiString(&afilename,&ufilename,TRUE);
p=afilename.Buffer;
DbgPrint("createfile :%s\n",afilename.Buffer);
DbgPrint("ext:%s\n",p+strlen(p)-4);
if(strlen(p)>12)
if(
/*
(
((CreateDisposition & FILE_CREATE) ) ||
((CreateDisposition & FILE_OPEN_IF) ) ||
((CreateDisposition & FILE_OVERWRITE_IF) ) ||
((CreateDisposition & FILE_SUPERSEDE) )
) &&
*/
(!_strnicmp(p+strlen(p)-4,".dwg",4)) &&
udoscmp(p+4)
)
{
DbgPrint("filter\n");
return STATUS_ACCESS_DENIED;
}
//ExFreePool(ufilename.Buffer);
return RealZwCreateFile
(
FileHandle,
DesiredAccess,
ObjectAttributes,
IoStatusBlock,
AllocationSize,
FileAttributes,
ShareAccess,
CreateDisposition,
CreateOptions,
EaBuffer,
EaLength
);
}
代码没什么问题吧???
其它的程序都可以拦截,,,就autocad.exe 拦截不了,,,文件还是被创建了,,,???
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
老外写的东西就是不一样?????不知道它是怎么创建的???
|
能力值:
( LV13,RANK:330 )
|
-
-
9 楼
代码贴的太乱了,也不知道对其以下。不过原因很明确,是你的过滤规则代码出问题了,思路是没错的,自己慢慢调吧,写代码就得有点耐心啊
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
用DLL HOOK API 拦截发现,,程序确实用了 createfile ,,,驱动+DLL 拦截,,都不成功,,,WHY?
HANDLE WINAPI MyCreateFileA
(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
)
{
TCHAR exe[256]={0};
GetModuleFileName(NULL,exe,256);
TCHAR tmp[256]={0};
char *p=(char *)lpFileName;
sprintf(tmp,"[%d]%s,CreateFileA:%s\n",gnum++,exe,lpFileName);
if(dwCreationDisposition & CREATE_NEW)
if(strlen(p)>4&& !_strnicmp(p+strlen(p)-4,".dwg",4) && udoscmp((char *)lpFileName))
{
MessageBoxA(0,"","what are you doing noe",MB_OK);
//DeleteFile(lpFileName);
return 0;
}
OutputDebugString(tmp);
return TrueCreateFileA
(
lpFileName,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
hTemplateFile
);
}
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
我是返回的STATUS_ACCESS_DENIED啊,,,,代码没问题,,,用记事本就可以栏截,,,用AUTOCAD 就不行???
|
能力值:
( LV13,RANK:330 )
|
-
-
12 楼
创建文件的方法有很多,就一个ZwCreateFile想搞定全部是不可能的,“用AUTOCAD 就不行”也是正常的事。有的可能没有经过这个API就把文件给建了,自然也就截获不到了。对于这种情况你就得先确定了AUTOCAD是否真的通过CreateFile来创建文件的。你可以对该API下断点,看该API执行前后有没有文件出來。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
在你dll的函数MyCreateFileA中加个assert,如果autocad有调用ZwCreateFile函数自然会进入你的函数,弹出断言后就可以挂上调试了,看看哪里出问题了。如果没出断言 很可能是人家没调用ZwCreateFile。
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
好的,,,多谢指点
|
|
|