我想知道进程打开/访问的文件是什么。我可以知道怎么做吗?我试图使用Deviare,一个免费的挂钩api来帮助我,但无法从他们的AIP lib或论坛中找到任何有用的信息。
我只知道我必须连接到kernel32.dll和createFileW,我不知道如何继续。
请帮助我。提前致谢。
答案 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;)。