===关于Detours截获API函数,比如MessageBox===

mikeyangoo 2005-03-14 04:42:03
近期小弟做了一个关于用Detours截获全局MessageBox 的API,测试下来发先并不是所有的API都能够截获,比如在WINDOWS 核心技术中的测试文本文件保存文字时询问你的是否需要保存时的那个对话框,我始终不能截获它,按理说应该可以截获啊,另外,我也使用MessageBox 的原形截获了AfxMessageBox、MessageBoxA、MessageBoxB,但是始终不能了解到系统中到底还有哪些不能截获,以及为什么?

源码:
DLL

/////////////////////////////////////////////////////////////
#pragma data_seg("Shared")
HHOOK g_hShellHook = NULL;
#pragma data_seg()
#pragma comment(linker, "/Section:Shared,rws")

DETOUR_TRAMPOLINE(int WINAPI MineMessageBox(HWND,LPCTSTR,LPCTSTR,UINT),MessageBox);

int WINAPI NewMessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType)
{
return MineMessageBox(hWnd,"modify ok",lpCaption,uType);
}

//利用系统钩子和其他应用程序发生关联
static LRESULT WINAPI ShellProc(int code, WPARAM wParam, LPARAM lParam)
{
return(CallNextHookEx(g_hShellHook, code, wParam, lParam));
}

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
g_hShellHook = SetWindowsHookEx(WH_SHELL,(HOOKPROC)ShellProc,hInstDll,0);
DetourFunctionWithTrampoline((PBYTE)MineMessageBox,(PBYTE)NewMessageBox);
}
else if (ul_reason_for_call == DLL_PROCESS_DETACH) {
DetourRemove((PBYTE)MineMessageBox,(PBYTE)NewMessageBox);
UnhookWindowsHookEx(g_hShellHook);
}
return TRUE;
}

...全文
317 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mikeyangoo 2005-03-18
xiexie
回复
linuxpgy 2005-03-17
拦截MessageBoxA和MessageBoxW两个函数
回复
mikeyangoo 2005-03-16
TO BigFanOfCpp
我这两个东东也都试过的,关于NOTEBOOK关闭时询问保存对话框,通过APIHOOK,可以看出其原形是MESSAGEBOX的,可就是不能DETOURS 他的~
回复
BigFanOfCpp 2005-03-15
可能是函数名称的问题,因为一般的API有真实的版本(ANSI和UNICODE),比如:

#ifdef UNICODE
#define AfxMessageBox AfxMessageBoxW
#else
#define AfxMessageBox AfxMessageBoxA
#endif
回复
linuxpgy 2005-03-15
我有APIHook代码(Detours什么意思?)
http://myproject.91x.net
回复
sx_enter 2005-03-14
截获不了,应该是函数名没搞对的问题。
回复
sx_enter 2005-03-14
函数体在5byte以上的函数,都能截获,只要你能读写那个进程。
有一个api只有int 3一条指令,就没办法。忘了叫什么名字了。
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-14 04:42
社区公告
暂无公告