Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - kub0x

#1341
Buenas .NET(adictos),

he observado que por este foro circulan peticiones de usuarios que desean introducirse en el mundo del hooking en Windows y he decidido codear una breve aplicación, comentada al detalle para su buen entendimiento y poder comprender las nociones básicas del Hooking.

La verdad que aprendí hace unos 2 días, me puse en C a codearlo pero .NET me tira más, ya después de leer la documentación de MSDN (abajo os dejo el link) y utilizar un poquito (la Web) Pinvoke para declarar las funciones del API ya pude completar el programa.

El programa simplemente establece un Hook de tipo LowLevelKeyBoard, captura las teclas interceptadas por el hook y finalmente las guarda una a una en un fichero de la carpeta actual.

Link Documentacion Hooks-> http://msdn.microsoft.com/en-us/library/windows/desktop/ms632589%28v=vs.85%29.aspx

Como no, comparto con vosotros el Source del programa. Está codeado bajo el Framework 4.0 y desarrollado en Visual Basic .NET (VS 2010)

Link de descarga -> http://www.mediafire.com/?4fbdmx5obwu5k10

Source:

Código (VB.NET) [Seleccionar]

Imports System.Runtime.InteropServices
Imports System.IO
Imports System.Threading
Imports System.Windows.Forms
Public Class Form1
   Enum Constantes As Integer
       WH_KEYBOARD_LL = 13
       HC_ACTION = 0
       WM_KEYDOWN = &H100
       WM_KEYUP = &H101
       WM_SYSKEYDOWN = &H104
       WM_SYSKEYUP = &H105
   End Enum '-> Constantes utilizadas en el Hook Global
   <StructLayout(LayoutKind.Sequential)> _
   Public Class KBDLLHOOKSTRUCT
       Public vkCode As UInt32
       Public scanCode As UInt32
       Public flags As UInt32
       Public time As UInt32
       Public dwExtraInfo As UIntPtr
   End Class '-> Estructura que contiene los mensajes interceptados por el Hook
#Region "Declaraciones_API"
   <DllImport("user32.dll")> _
   Friend Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal lpfn As HookProc, ByVal hInstance As IntPtr, ByVal threadId As Integer) As Integer
   End Function

   <DllImport("user32.dll")> _
   Friend Shared Function CallNextHookEx(ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As KBDLLHOOKSTRUCT) As Integer
   End Function
   <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
   Public Shared Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr
   End Function
   <DllImport("user32.dll", SetLastError:=True)> _
   Public Shared Function UnhookWindowsHookEx(ByVal hhk As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function
#End Region '-> Declaraciones de APIs para el uso de Hooks (SetWindowsHookEx...)
   Enum HookType As Integer
       WH_JOURNALRECORD = 0
       WH_JOURNALPLAYBACK = 1
       WH_KEYBOARD = 2
       WH_GETMESSAGE = 3
       WH_CALLWNDPROC = 4
       WH_CBT = 5
       WH_SYSMSGFILTER = 6
       WH_MOUSE = 7
       WH_HARDWARE = 8
       WH_DEBUG = 9
       WH_SHELL = 10
       WH_FOREGROUNDIDLE = 11
       WH_CALLWNDPROCRET = 12
       WH_KEYBOARD_LL = 13
       WH_MOUSE_LL = 14
   End Enum '-> Tipos de Hooks para monitorizar mensajes
   'Declaramos un delegado y le asignamos sus respectivos argumentos
   Delegate Function HookProc(ByVal code As Integer, ByVal wParam As IntPtr, ByVal lParam As KBDLLHOOKSTRUCT) As Integer
   Private CallbackDelegate As HookProc = Nothing
   'Declaramos la variable Hook. Será la encargada de almacenar la direccion de memoria del Hook
   Dim hook As IntPtr = IntPtr.Zero
   'Procedimiento asociado al puntero AddressOf(CallBackDelegate)
   Private Function HookprocHandler(ByVal code As Integer, ByVal wParam As IntPtr, ByVal lParam As KBDLLHOOKSTRUCT) As Integer
       Try
           'Code es la variable encargada de decir si existe un mensaje. Si code !=0 no habra nada.
           If (code < 0) Then
               'Damos paso al siguiente Hook y procedemos con el continuamiento del Sistema
               Return CallNextHookEx(IntPtr.Zero, code, wParam, lParam)
           Else
               Dim sr As New StreamWriter(CurDir() & "\log.txt", True)
               'Segun el código devuelto a la pulsación de la tecla (257,258)
               Select Case wParam
                   Case Constantes.WM_KEYDOWN, Constantes.WM_SYSKEYDOWN
                       Dim key As Char = ChrW(lParam.vkCode) 'Imprimimos el caracter ASCII en pantalla
                       sr.Write(key)
               End Select
               sr.Close()
               Return CallNextHookEx(IntPtr.Zero, code, wParam, lParam)
           End If
       Catch ex As Exception
       End Try
       Return 1
   End Function
   Private Sub Iniciar_Hook()
       Try
           'Asociamos a dicho procedimiento un puntero hacia el controlador del Hook (HookProcHandler)
           CallbackDelegate = New HookProc(AddressOf HookprocHandler)
           If hook <> 0 Then
               'Desinstalamos el Hook
               UnhookWindowsHookEx(hook)
               hook = IntPtr.Zero
               btn_hook.Text = "Hookear Teclado"
           Else
               'Instalamos un Hook Global (LowLevelKeyBoard) y llamamos a la funcion HookProcHandler
               'Los ultimos dos parametros indican el HINSTANCE y PID, se utilizarian en caso de Hook local _
               'empleados en juegos y demás.
               hook = SetWindowsHookEx(HookType.WH_KEYBOARD_LL, CallbackDelegate, 0, 0)
               btn_hook.Text = "Desinstalar Hook"
               FileSystem.Kill(CurDir() & "\log.txt")
           End If
       Catch ex As Exception
       End Try

   End Sub
   Private Sub btn_hook_Click(sender As System.Object, e As System.EventArgs) Handles btn_hook.Click
       Iniciar_Hook()
   End Sub
End Class


Espero que os haya gustado el aporte. Cualquier duda que pueda surgir con el tema posteadla aquí, no olvideis que esto es lo más básico, los hooks tienen muchísimo juego.

Un Saludo ;)
#1342
Cita de: BlackZeroX (Astaroth) en 26 Marzo 2012, 20:58 PM
Mira buscando algoritmos para diccionario llego aquí, me quedo con el de vb6 no me pide nada extra que instalar.

Nota: Compila con un FrameWork mas bajo a el 4... ya que no usas todo el potencial del mismo...

Dulces Lunas!¡.

Buen consejo. La verdad que en máquinas virtuales ya sufrí con dicha compilación bajo el Framework 4.0, tuve que instalarlo en ambas máquinas.

Cita de: P4nd3m0n1um en 26 Marzo 2012, 00:39 AM
tienes alguno que supone empiece de 9 -> 0... Z -> A?

estaría bueno agregar eso.

Estoy en ello. La verdad que el proyecto lo abandoné por falta de creatividad en ultima instancia (como adorno mis comidas de cabeza) pero aseguro que lo terminaré. Por ahora adelanto que calcula en un diccionario todas las combinaciones alfabeticas de X longitud de cadena.

Cita de: 79137913 en 26 Marzo 2012, 20:12 PM
HOLA!!!

Te basaste en el mio http://foro.elhacker.net/programacion_visual_basic/source_brute_force_dictionary_creator_7913-t325748.0.html ?

XD

Te recomiendo poner minimo de cadena tambien

GRACIAS POR LEER!!!

Para nada jeje :D El tuyo al parecer por el código es más completo. Si le echas un vistazo al código de esta aplicación (creo que lo deje lleno de comentarios para entender el cod. fuente) verás que los procedimientos que implemente son muy sencillos.

Gracias a todos por echarle un vistacillo al programa :)

Saludos!
#1343
Cita de: Segurida en 24 Marzo 2012, 16:05 PM
Hola, ¿podrías re-subirlo?, el enlace está caído, muchas gracias.

Vaya, parece ser que mediafire lo eliminó porque no disponía de cuenta en tal dominio.

Lo he movido a 4shared.com. He corregido el link de descarga del primer Post y os adjunto aquí el dicho Link.

Generador de Diccionario -> http://www.4shared.com/rar/L_AjQLzh/file.html
Contraseña -> kub0x.NET

Gracias por la notificación,

Un Saludo.
#1344
Solo falta que quites el timer y pongas un bucle infinito y lo duermes con un sleep durante X segundos (el intervalo que tienes puesto en el timer).

Gualá, así tienes un timer con una sentencia de control.

La verdad es que en .NET me divierto más :D

Saludos.
#1345
Como ya sabras puedes combinar Visual Basic .NET con varios lenguajes de la lista.

Asp .NET como vb .net es un lenguaje de la plataforma .NET. Aunque tenga cambios en su sintaxis si le echas un vistazo verás que se asimila bastante... y no es mal lenguaje, brinda muchas posibilidades.

Si te vas a poner con Asp .Net deberias de revisar tambien php, ambos lenguajes sirven para implementar servicios web ("creo").

Soy más de programar aplicaciones de escritorio :D

Saludos.
#1346
Buenas otra vez,

si has programado la aplicación y crees que la causa del error está en alguna parte del codigo o que simplemente está incompleto pues puedes postearlo para que podamos ayudarte.

saludos.
#1347
De nada, para eso estamos ;)

Un saludo.
#1348
Buenas Cess1209,

Debes de dar más datos sobre lo que quieres hacer ;) ¿Las pulsaciones de dichas teclas a que programa las quieres enviar? ¿Qué lenguaje (Script, interpretado o compilado) de programación utilizas para codear la aplicación? ¿Qué métodos utilizas? Cuanta mas info dejes mejor, así los foreros podremos ayudar.

Un saludo.
#1349
Hacking / Re: ¿Ip spoofing?
20 Marzo 2012, 21:52 PM
Cita de: soyloqbuskas en 20 Marzo 2012, 21:46 PM
OOOK! estaba en lo cierto! el wireshark enmascara los seqnum, al desabilitar esta opcion comprobe que el seqnum que se pone en el paquete enviado es el seqnum que pones en hping3 +1, por tanto si pongo en el terminal lo siguiente:
entonces se enviara un paquete  a dicha ip cuyo seq num es: 1235!!!!!

Ahora solo me queda hacer la prueba para ver si el navegador del host victima habre mi fichero html haciendo el ip-spoofing! si lo consigo os hare un tutorial!! jeje ;)

No estaría mal que nos contaras como realizaste el IP Spoofing :p

Saludos.
#1350
La API GetAsyncKeyState mejor ni tocarla en .NET. Podría decirse que para algunas tareas (para un juego por ejemplo) cumple su función, pero para un Keylogger es una pésima librería.

Lo más eficiente para el monitoreo de teclas pulsadas es hookear el teclado del usuario, para ello busca sobre hooks o hooks en VB.NET. Si controlas de C solo tienes que implementar dicho codigo en .NET.

Saludos.