[MASM] Hook al teclado

  • 0 Respuestas
  • 5004 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado binary_death

  • *
  • Underc0der
  • Mensajes: 18
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email

[MASM] Hook al teclado

  • en: Septiembre 01, 2013, 01:59:57 pm
Como el código que hizo linkgl, pero en ASM.

Código: (asm) [Seleccionar]
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data?
h_hook      HHOOK ?
kb_hook     KBDLLHOOKSTRUCT <>
msg         MSG <>
kb_ptr      DWORD ?
key_buffer  DB 1
h_buffer    HANDLE ?

.code
start:
invoke AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov     [h_buffer], eax
lea     ebx, LowLevelKeyboardProc
invoke  SetWindowsHookEx, WH_KEYBOARD_LL, ebx, 0, 0
mov     [h_hook], eax

message_proc:
    invoke  GetMessage, addr msg, NULL, 0, 0
    cmp     eax, TRUE
    jz      process_msg
    invoke  UnhookWindowsHookEx, [h_hook]
    invoke  ExitProcess, 0
    process_msg:
        invoke  TranslateMessage, addr msg
        invoke  DispatchMessage, addr msg
        jmp message_proc

LowLevelKeyboardProc:
    cmp     dword ptr[esp+4], 00h
    jae     process_hook
    return:
        invoke  CallNextHookEx, 0, dword ptr[esp+4], dword ptr[esp+8], dword ptr[esp+0Ch]
        retn
    process_hook:
        cmp     dword ptr[esp+8], WM_KEYDOWN
        jnz     return
        mov     ebx, [esp+0Ch]
        mov     ebx, [ebx+00h]
        mov     byte ptr[key_buffer],bl
        invoke  WriteConsole, [h_buffer], addr key_buffer, 1, NULL, NULL
        jmp return

ret
end start