钩子CreateFileW

时间:2011-05-20 02:24:36

标签: hook createfile

我想知道进程打开/访问的文件是什么。我可以知道怎么做吗?我试图使用Deviare,一个免费的挂钩api来帮助我,但无法从他们的AIP lib或论坛中找到任何有用的信息。

我只知道我必须连接到kernel32.dll和createFileW,我不知道如何继续。

请帮助我。提前致谢。

1 个答案:

答案 0 :(得分:1)

没错。您必须在kernel32.dll中挂钩CreateFileA / W函数来监视访问。您想在自己的流程或其他流程中挂钩这些API吗? 如果要在自己的进程中挂钩函数,可以使用

void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
    BYTE *jmp = (BYTE*)malloc(5+len);
    DWORD dwback;
    VirtualProtect(src,len,PAGE_READWRITE,&dwback);   
    memcpy(jmp,src,len);
    jmp += len;   
    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
    VirtualProtect(src,len,dwback,&dwback);
    return (jmp-len);
} 

为它。这些函数将函数src(f.e.MessageBoxA())绕过函数dst。作为len你可以使用5.它返回一个指向原始函数的函数指针。 一个示例电话:

typedef int (WINAPI *__MessageBox)(
  __in_opt  HWND hWnd,
  __in_opt  LPCTSTR lpText,
  __in_opt  LPCTSTR lpCaption,
  __in      UINT uType
);
__MessageBox _MessageBox;

int cMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
//here you can change anything you want
return _MessageBox(hWnd,lpText,lpCaption,uType);
}

int main(void)
{
BYTE *hookfunc = (BYTE*)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");
_MessageBox = (__MessageBox)DetourFunc(hookfunc,(BYTE*)cMessageBox,5);
return 0;
}

这是一个usermode钩子。如果你想在全系统范围内这样做,我会使用设备驱动程序。这是一个关于此的教程。 http://www.codeproject.com/KB/system/driverdev.aspx

如果您在多字节模式下使用VC ++编译;)。 如果你想挂钩其他进程只是google DLL-Injection;)。