4

我正在尝试使用 SetWindowsHookEx 来捕获对 java.dll 中 API 的调用。

所以我创建了另一个 dll,并使用 setwindowsHookEx 注入到所有其他进程中

g_hHook = SetWindowsHookEx(WH_CALLWNDPROC, JLoadSetFunc, g_hHookDll, 0)

问题如下:

在尝试捕获来自进程的调用时,我注意到在对挂钩函数的几次调用已经执行后,我的 dll 被附加到该进程。

所以问题是我的挂钩机制错过了挂钩 API 的前几次调用。

请对此问题提出建议或评论以指导我。我被这个卡住了。

4

3 回答 3

3

我建议如下:

  1. 使用 SetWindowsHookEx() 注册你的钩子
  2. SendMessage() 向远程进程发送一条只有你的钩子才能理解的特殊消息
  3. 重复这个直到你的钩子回复
  4. 调用你希望你的钩子与之交互的代码

简而言之,请等待钩子完成安装,然后再尝试使用它。

于 2009-06-19T00:45:42.240 回答
1

@MSalters

一点更正:不是每个进程 - 它仅加载到导入/使用 user32.dll 的进程,并且并非所有进程都使用它(但我同意大多数进程确实使用它)。

有关更多详细信息,请参阅使用 AppInit_DLLs 注册表值

于 2009-07-22T07:48:18.627 回答
0

使用注册表项将 DLL 加载到每个进程中是一个非常肮脏的 hack:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

于 2009-06-15T11:27:07.977 回答