Título: [C] Hook en DLL Publicado por: calk9 en 16 Septiembre 2011, 15:53 pm Buenas a todos nuevamente. Estoy haciendo una DLL normal en C, la cual inyecto a un programa. Tengo que hookear una parte del programa el cual tengo el hwnd e interceptar un mensaje. Qué función debería usar para instalar el hook? SetWindowLong? Podrían dejarme algún ejemplo?
Gracias! Título: Re: [C] Hook en DLL Publicado por: naderST en 17 Septiembre 2011, 05:48 am SetWindowLongPtr
Con la DLL una vez inyectada puedes hacer esto teniendo el handle de la ventana. Código
Título: Re: [C] Hook en DLL Publicado por: calk9 en 17 Septiembre 2011, 14:59 pm Gracias! Me sirve un montón esto. Mira como a quedado mi código:
Código: WNDPROC default_procedure; Pero al compilar me da un error, sobre el "HWND hwnd = 590396;". El error es: "[Warning] initialization makes pointer from ineteger without a cast". Que estoy haciendo mal? Gracias nuevamente :) Título: Re: [C] Hook en DLL Publicado por: Eternal Idol en 17 Septiembre 2011, 15:04 pm Ahi te lo dice claramente, tenes que hacer un casting
Código: HWND hwnd = (HWND)590396; Igual eso no sirve, el HWND cambiara con cada ejecucion asi que tenes que conseguir un metodo para encontrar la ventana en tiempo de ejecucion ... PD. Las DLLs tienen DllMain y no main. Título: Re: [C] Hook en DLL Publicado por: calk9 en 17 Septiembre 2011, 15:52 pm Ahi te lo dice claramente, tenes que hacer un casting Código: HWND hwnd = (HWND)590396; Igual eso no sirve, el HWND cambiara con cada ejecucion asi que tenes que conseguir un metodo para encontrar la ventana en tiempo de ejecucion ... PD. Las DLLs tienen DllMain y no main. Gracias. El hwnd lo puedo obtener en cada ejecución de forma automática eso no es problema. Ya puse para que haga el hook en el hwnd indicado al cargarse la DLL. Pero aún así sigue sin interceptar el mensaje... hay algún error en donde indiqué el mensaje o el hwnd? Ya que creo que esta todo bien pero no me avisa al interceptar el mensaje WM_SETTEXT como debería hacerlo. También probé con WM_MOUSEMOVE y otros, pero tampoco funciona. Te dejo mi código: Código: WNDPROC default_procedure; En este caso usé la constante WM_MOUSEMOVE Gracias :) Título: Re: [C] Hook en DLL Publicado por: Eternal Idol en 17 Septiembre 2011, 17:55 pm A SetWindowLongPtr no le pasas un mensaje en particular: tenes que usar GWLP_WNDPROC.
http://msdn.microsoft.com/en-us/library/ms644898%28v=vs.85%29.aspx GWLP_WNDPROC Sets a new address for the window procedure. Título: Re: [C] Hook en DLL Publicado por: calk9 en 17 Septiembre 2011, 18:41 pm Pues me quedaría GWLP_WNDPROC en nIndex donde tengo WM_MOUSEMOVE. Donde es que debería poner el mensaje que quiero interceptar?
Gracias. Título: Re: [C] Hook en DLL Publicado por: Eternal Idol en 17 Septiembre 2011, 19:11 pm En la funcion hook donde tenes el parametro message ... tenes que comprender que hace tu codigo, estas reemplazando el procedimiento de la ventana, lee la documentacion.
Título: Re: [C] Hook en DLL Publicado por: calk9 en 17 Septiembre 2011, 20:01 pm ¡Gracias! ;-) Ya pude capturar el mensaje con una simple condición "if".
Suerte :D Título: Re: [C] Hook en DLL Publicado por: Eternal Idol en 17 Septiembre 2011, 20:19 pm De nada ::)
|