[MASM] Hook al teclado

Iniciado por binary_death, Septiembre 01, 2013, 01:59:57 PM

Tema anterior - Siguiente tema

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

Como el código que hizo linkgl, pero en ASM.

Código: asm

.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