-
-
[求助]Detour Hook遇到的问题
-
发表于:
2015-3-26 17:33
6018
-
最近需要hook一些API,于是想到了Detour。想把需要hook的API都集成进去,然后根据选择的API分别hook。于是代码架构大概为:NewApi.h NewApi.cpp 用来定义和实现需要修改的API,
举例:
static int(WINAPI *OldMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW;
int WINAPI MyMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
ChangeAPI.h ChangeAPI.cpp 是一个单例,用来保存已经实现的API。
下面问题来了:
1、我在 NewApi.h 中定义了 MyMessageBoxW ,在NewApi.cpp中实现了MyMessageBoxW,
然后在ChangeAPI.cpp中
DetourAttach(&(PVOID&)OldMessageBoxW, MyMessageBoxW);
函数执行后,hook成功,但是会不停的递归调用 MyMessageBoxW。
2、我把NewApi.h 和 NewApi.cpp去掉,将 MyMessageBoxW 的定义和实现放到 ChangeAPI.cpp中,就能正确hook,且只会调用一次。
跟踪相应汇编后发现,第一种情况时,MyMessageBox中会jmp至 MessageBox的起始地址,
第二种情况会jmp回MessageBox + 5字节地址。
请教下各位,有没有遇到类似或者同样的问题,到底是我用法不对,还是Detour本身存在该bug?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)