===关于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;
}

...全文
410 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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一条指令,就没办法。忘了叫什么名字了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧