SetWindowsHookEx - Dll Injection пропускает первые несколько звонков - PullRequest
4 голосов
/ 15 июня 2009

Я пытаюсь использовать SetWindowsHookEx для захвата вызовов API в java.dll.

Итак, я создал еще одну DLL и внедрил во все другие процессы, используя setwindowsHookEx

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

Проблема заключается в следующем:

При попытке перехвата вызовов из процесса я заметил, что моя dll подключается к этому процессу после того, как пара вызовов перехваченной функции уже была выполнена.

Так что проблема в том, что мой механизм перехвата пропускает первые несколько вызовов перехваченного API.

Пожалуйста, предложите или прокомментируйте эту проблему, чтобы направлять меня. Я ужасно застрял с этим.

Ответы [ 3 ]

3 голосов
/ 19 июня 2009

Я предлагаю следующее:

  1. Зарегистрируйте свой хук, используя SetWindowsHookEx ()
  2. SendMessage () для удаленного процесса со специальным сообщением, которое понимает только ваша ловушка
  3. Повторяйте это, пока ваш крючок не ответит
  4. Назовите код, с которым вы хотите, чтобы ваш хук взаимодействовал с

Короче говоря, дождитесь окончания установки крючка, прежде чем пытаться его использовать.

1 голос
/ 22 июля 2009

@ MSalters

Небольшое исправление: не для каждого процесса - он загружается только в процессы, которые импортируют / используют user32.dll, и не все процессы используют его (однако я согласен, что большинство процессов его используют).

Подробнее см. Работа со значением реестра AppInit_DLLs .

0 голосов
/ 15 июня 2009

Существует очень грязный хак для загрузки библиотек DLL в каждый процесс с помощью ключа реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...