挡截API的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/11 14:10:57
原理:远程注入DLL,通过替换目标进程的API函数地址挡截目标进程的API函数(MessageBoxA)调用。测试发现:若目标进程调用CWnd:MessageBox无法被挡截(::MessageBox才可以被挡截)?why??????
详细请看这里:
http://hi.baidu.com/ysees/blog/item/80cd5d45adc7c63786947342.html

我来解释一下,这种现象是正常的

你的hook是导入表hook

说白了只能hook到程序静态引入的函数

如果你在程序中使用::MessageBox则最终程序中确实引入了user32.dll中的MessageBoxA函数,这样可以hook到

如果你用CWnd::MessageBox来调用就不行了

或许你也知道CWnd::MessageBox最终也是调用了::MessageBox

但是你的程序没有直接导入::MessageBox

因为CWnd::MessageBox也是一个导出函数,具体名字大约是msvc60.dll之类的

是一个MFC的支持库

因此你hook导入表的时候根本找不到::MessageBox的引入

而只能找到CWnd::MessageBox的引入(这个引入的名字很复杂,是变形过的)

所以你的hook无法成功

///////////////////////////////////////////////////////////////
你所提到的问题恰恰是导入表式hook的局限性

只有改变hook的形式才能根本上解决这个问题

新的hook方式就是inline hook

网上有许多资料你去查查吧

挡截sock技术和挡截api技术
不知道这些原理可不可以教给玩家?不可以你们早说啊..别搞人来抓我
鼠标移动原理
模拟鼠标动作api函数mouse_event,它可以实现模拟鼠标按下和放开等动作。

void mouse_event(
dword dwflags, // 鼠标动作标识。
dword dx, // 鼠标水平方向位置。
dword dy, // 鼠标垂直方向位置。
dword dwdata, // 鼠标轮子转动的数量。
dword dwext