+ -
当前位置:首页 → 问答吧 → 再发一帖,关于API拦截,侠进。

再发一帖,关于API拦截,侠进。

时间:2011-10-29

来源:互联网

基于某些需要,我需要在程序中拦截LoadLibary和GetProcAddress这两个API函数。

程序清单如下:

1、main.exe

2、APIHook.dll(在其中拦截LoadLibary和GetProcAddress)

3、测试业务dllA.dll

4、测试业务dllB.dll

main.exe 启动后加载“APIHook.dll”,开启API HOOK

然后如果在main.exe中分别用LoadLibary和GetProcAddress去起调“测试业务dllA.dll”或者“测试业务dllB.dll”的话,那么程序能正确拦截到LoadLibary和GetProcAddress这两个API函数的调用。

但是如果在main.exe中用LoadLibary和GetProcAddress去起调“测试业务dllA.dll”,然后在“测试业务dllA.dll”中用LoadLibary和GetProcAddress去起调“测试业务dllB.dll”的话,那么后面这种情况下拦截不到这两个API的调用。

我不需要系统级的关于这两个API的拦截,只要在我的进程内拦截到就可以,为什么后面这种情况拦截不到呢?按理说还是在同一进程内的呀。

作者: zhouqinppq0830   发布时间: 2011-10-29

你的api hook应该是改导入表的,而且只改了当前加载的模块,因此dllA.dll的导入表未受影响,因此dllA.dll加载dllB.dll就没有被拦

使用嵌入或改导出表的方式更有效

作者: Lactoferrin   发布时间: 2011-10-30