我想知道进程打开/访问的文件是什么。我可以知道该怎么做吗?我尝试使用 Deviare,一个免费的 hooking api 来帮助我,但无法从他们的 AIP 库或论坛中找到任何有用的信息。
我只知道我必须连接到 kernel32.dll 和 createFileW,但我不确定如何继续。
请帮助我。提前致谢。
我想知道进程打开/访问的文件是什么。我可以知道该怎么做吗?我尝试使用 Deviare,一个免费的 hooking api 来帮助我,但无法从他们的 AIP 库或论坛中找到任何有用的信息。
我只知道我必须连接到 kernel32.dll 和 createFileW,但我不确定如何继续。
请帮助我。提前致谢。
这是正确的。您必须在 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 (fe 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;
}
那是一个用户模式钩子。如果您想在系统范围内执行此操作,我将使用设备驱动程序。这是一个关于这个的教程。http://www.codeproject.com/KB/system/driverdev.aspx
如果你使用 VC++ 编译多字节模式;)。如果您想挂接其他进程,只需 google DLL-Injection ;)。