Хочу поставить хук на вызов вункции MessageBoxA(W), не только в своём приложении, а во всех. Тоесть когда будет вызываться функция например в блокноте, то в моей проге выводилось в консоль инфа которая говорит что произошел вызов MessageBoxA(W).
Почитай статьи Ms-Rem'a по перехвату Перехват API функций в Windows NT (часть 1). Основы перехвата. Перехват API функций в Windows NT (часть 2). Методы внедрения кода. Перехват API функций в Windows NT (часть 3). Нулевое кольцо.
А что есть принципиальная разница ? Перевести эти сурсы на С - 15 мин. ЗЫ. Может топик надо было назвать "дайте мне исходники готовой программы" ?
Да я одного понять не могу почему когда я вызываю функцию SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)MsgProc, 0, GetCurrentThreadId());, с параметром GetCurrentThreadId(), она вылавливает месседжбоксы только из того потока в котором обьявлена, а если я ставлю последний параметр 0 она должна же отслеживать все потоки, так ведь? А не ловит!
SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)&MessageProc,(HINSTANCE)hHandle,0); hHandle это хэндл модуля
А если у меня нет модуля, эта функция в том модуле где и SetWindowsHookEx(...), знач NULL должно быть, так?
нет не так ... у тебя же последний параметр 0 ... нужен хэндл твоей длл-ки получай его GetModuleHandle или возьми его хотябы в твоей стартовой функции к примеру она такая Код (Text): BOOLEAN WINAPI DllMain( IN HINSTANCE hDllHandle, IN DWORD nReason, IN LPVOID Reserved ) вот этот хэндл и ложи в SetWindowsHookEx
Может кто-нибудь внятно объяснить или дать ссылку на статью, как, в конце концов перехватить API без идиотских jmp в начале функции и извращений с импортом, а вполне стандартным SetWindowsHookEx? Всё, что есть в статье на wasm'e "От зеленого к красному: Глава 3: Программирование в Shell-код стиле. Важные техники системного программирования: SEH, VEH и API Hooking" - << Чтобы глобально перехватывать функции можно использовать функцию SetWindowsHook. Тогда мы будет перехватывать нужную функцию во всех текущих GUI-приложениях, а также новых, т.к. если мы вызываем функцию SetWindowsHook, то она внедряет DLL и для всех новых процессов.>> Всё.
Могу ебе сразу ответить - никак. SetWindowsHookEx не предназначен для перехвата API, хотя его зачастую используют как средство загрузки DLL в адресное пространство целевого процесса.