elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Hook global para los Windows Messages?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hook global para los Windows Messages?  (Leído 3,386 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Hook global para los Windows Messages?
« en: 31 Mayo 2013, 20:43 pm »

¿ Alguien sería tán amable de mostrarme un código para crear un Hook de bajo nivel GLOBAL (que funcione FUERA del Form) para manejar los mensajes de windows (En concreto WM_MOUSEWHEEL) ?

Esto he aprendido a hacerlo dentro del Form con la Interface "IMessageFilter", pero cuando lo intento hacer para que funcione fuera del form no hay manera, todo lo que consigo son un par de Fails!,

Me han explicado la manera de hacerlo global, se puede hacer importando la librería user32.dll (La función "SetWindowsHookEx") para crear un low-level hook para interceptar los mensajes de Windows, la teoría la tengo, pero no sé hacerlo, me trabo en el punto de intentar usar la función "SetWindowsHookEx" y crear el sub para interceptar los mensajes (if m.message = &HX then...), todo el código que encuentro es para C++/C#, y para lo poco que encuentro de VBNET, (que además tiene poco que ver con los mensajes que quiero interceptar) ni me entero, bastante dificil.

Lo que necesito es hacer algo como esto:

Pseudo-código:
Código
  1. Dim mousewheel_up as boolean
  2. Dim mousewheel_down as boolean
  3.  
  4. Sub that Overides the windows messages to set the mousewheel booleans
  5.  
  6.    If mousewheel_up then msgbox("MouseWheel up")
  7.    If mousewheel_down then msgbox("MouseWheel down")
  8.  
  9. End sub

Pero como ya digo, fuera del form.

Un saludo.


« Última modificación: 31 Mayo 2013, 20:48 pm por EleKtro H@cker » En línea

Maurice_Lupin


Desconectado Desconectado

Mensajes: 356

GPS


Ver Perfil WWW
Re: Hook global para los Windows Messages?
« Respuesta #1 en: 28 Junio 2013, 05:40 am »

Cuando intento usar funciones de la API en vb.net, siempre recurro a este sitio. Quizá lo haz visitado.

Sobre la función setWindowshookex, encontré esto:

http://www.pinvoke.net/default.aspx/user32.setwindowshookex


En línea

Un error se comete al equivocarse.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Hook global para los Windows Messages?
« Respuesta #2 en: 28 Junio 2013, 11:06 am »

@Maurice_Lupin

Gracias, ya no recordaba que hice esta pregunta xD

Al final ya lo conseguí, conseguí usar la API para capturar si la rueda que se mueve es la de arriba o la de abajo, lo que no conseguí era una vez capturado, reproducir ese movimiento del ratón fuera de la APP, es decir mover la rueda del ratón, así que lo dejé a medias.

Bueno,
un saludo!
En línea

Maurice_Lupin


Desconectado Desconectado

Mensajes: 356

GPS


Ver Perfil WWW
Re: Hook global para los Windows Messages?
« Respuesta #3 en: 28 Junio 2013, 22:50 pm »

Cuando requiero usar funciones de la API, lo que hago es buscar code en C/C++ y pasarlo a VB.NET guiandome con http://www.pinvoke.net

Incluso consegui el serial del USB.

Saludos y si puedes postea tu code para aprender.
En línea

Un error se comete al equivocarse.
kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Hook global para los Windows Messages?
« Respuesta #4 en: 29 Junio 2013, 00:05 am »

Cuando requiero usar funciones de la API, lo que hago es buscar code en C/C++ y pasarlo a VB.NET guiandome con http://www.pinvoke.net

Yo hago exactamente lo mismo. Primero busco en MSDN implementaciones e info en C/C++ sobre las API a utilizar y después el equivalente en VB.NET (en mi caso) a través de Pinvoke. De esta manera comprendes mejor el funcionamiento y uso de éstas.

Recomiendo esta práctica :D

Saludos.
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Hook global para los Windows Messages?
« Respuesta #5 en: 1 Julio 2013, 11:02 am »

Acabo de descubrir que para enviar un "scroll up/scroll down" se hace con la función SendInput: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx

si puedes postea tu code para aprender.

Código
  1. Public Class Form1
  2.  
  3.    Public Structure Point
  4.        Public X As Integer
  5.        Public Y As Integer
  6.    End Structure
  7.  
  8.    Public Structure Msllhookstruct
  9.        Public Location As Point
  10.        Public MouseData As Integer
  11.        Public Flags As Integer
  12.        Public Time As Integer
  13.        Public ExtraInfo As Integer
  14.    End Structure
  15.  
  16.    Private Delegate Function HookProc(nCode As Integer, wParam As Integer, ByRef lParam As Msllhookstruct) As Integer
  17.  
  18.  
  19.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
  20.    Private Shared Function SetWindowsHookEx(ByVal hookType As Integer, ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr
  21.    End Function
  22.  
  23.    <System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
  24.    Private Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As Msllhookstruct) As IntPtr
  25.    End Function
  26.  
  27.    Public Hook As IntPtr
  28.  
  29.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  30.        Hook = SetWindowsHookEx(14, AddressOf Proc, Process.GetCurrentProcess().MainModule.BaseAddress.ToInt32(), 0)
  31.    End Sub
  32.  
  33.    Private Function Proc(nCode As Integer, wParam As Integer, ByRef lParam As Msllhookstruct) As IntPtr
  34.        If wParam = 522 Then
  35.            Dim Delta = CShort(lParam.MouseData >> 16)
  36.  
  37.            If Delta > 0 Then
  38.                ' Up
  39.                MsgBox("Up")
  40.            ElseIf Delta < 0 Then
  41.                ' Down
  42.                MsgBox("Down")
  43.            End If
  44.        End If
  45.  
  46.        Return CallNextHookEx(Hook, nCode, wParam, lParam)
  47.    End Function
  48.  
  49. End Class
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Microsoft integrará Office a Facebook Messages
Noticias
Novlucker 3 1,839 Último mensaje 16 Noviembre 2010, 22:20 pm
por jdc
Keyboard hook windows desde dll
Programación C/C++
patilanz 5 2,868 Último mensaje 2 Enero 2015, 14:40 pm
por ThunderCls
windows promete lanzar un antisploits global
Seguridad
el padre de los hackers 1 1,783 Último mensaje 7 Noviembre 2015, 07:17 am
por MCKSys Argentina
Android Messages para PC estará vinculado a la cuenta de nuestro móvil
Noticias
wolfbcn 0 1,838 Último mensaje 13 Abril 2018, 15:10 pm
por wolfbcn
Hook Library Windows
Ingeniería Inversa
Geovane 0 1,632 Último mensaje 30 Octubre 2018, 16:05 pm
por Geovane
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines