Function at 0x4519c4
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
mov eax, dword [ebp + 8]
sub esp, 0x14
push ebx
push esi
push edi
push 9
mov edi, ecx
pop ecx
cmp word [eax + 0xc], cx
jne 0x4519f2
mov eax, dword [eax]
cmp eax, dword [edi + 0x74]
jne 0x4519f2
mov ecx, dword [edi + 0x40]
mov eax, dword [ecx]
call dword [eax]
xor al, al
pop edi
pop esi
pop ebx
leave
ret 8
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x12
call esi
shr eax, 0xf
and eax, 0xffffff01
push 0x11
mov dword [ebp - 4], eax
call esi
movzx ebx, ax
shr ebx, 0xf
push 0xa3
and bl, 1
call esi
shr eax, 0xf
and eax, 0xffffff01
push 0x10
mov dword [ebp - 8], eax
call esi
mov ecx, dword [ebp + 0xc]
movzx edx, ax
mov eax, dword [ebp + 8]
shr edx, 0xf
and dword [ecx], 0
and edx, 0xffffff01
push 9
movzx esi, word [eax + 0xc]
pop ecx
mov dword [ebp - 0x10], edx
mov byte [ebp - 0xc], dl
lea eax, [esi - 0x30]
cmp ax, cx
ja 0x451a7e
cmp byte [ebp - 8], 0
jne 0x451a61
mov eax, dword [ebp - 4]
test al, al
je 0x451a81
lea ecx, [esi - 0x30]
push ecx
mov ecx, edi
test dl, dl
je 0x451a77
call fcn.00449dbf
mov al, 1
jmp 0x4519eb
call fcn.00449e1a
jmp 0x451a70
mov eax, dword [ebp - 4]
mov dword [ebp - 8], 0x71
mov dword [ebp + 0xc], 0x70
cmp si, word [ebp - 8]
je 0x451a9b
cmp si, word [ebp + 0xc]
jne 0x451abb
test al, al
je 0x451abb
test bl, bl
jne 0x451abb
test dl, dl
jne 0x451abb
mov ecx, dword [edi + 0x40]
xor eax, eax
cmp si, word [ebp + 0xc]
setne al
mov edx, dword [ecx]
push eax
call dword [edx + 4]
jmp 0x451a70
lea eax, [esi - 0x72]
cmp ax, cx
ja 0x451af1
test bl, bl
je 0x451af1
xor eax, eax
cmp word [eax*8 + 0x4efdcc], si
je 0x451adc
inc eax
cmp eax, 5
jb 0x451ac9
or eax, 0xffffffff
test eax, eax
js 0x451af1
push dword [eax*8 + 0x4efdd0]
mov ecx, edi
call fcn.00456bb6
mov edx, dword [ebp - 0x10]
mov eax, dword [ebp + 8]
movzx eax, word [eax + 0xc]
cmp eax, 0x52
ja 0x451ca9
je 0x451c95
cmp eax, 0x28
ja 0x451bbf
je 0x451bab
sub eax, 8
je 0x451b9f
sub eax, 8
je 0x451b7b
sub eax, 0x12
je 0x451b62
sub eax, 3
je 0x451b3c
sub eax, 1
je 0x451b4f
sub eax, 1
jne 0x4519e9
cmp byte [ebp - 4], 0
je 0x451bab
mov ecx, dword [edi + 0x40]
mov eax, dword [ecx]
call dword [eax + 0x10]
jmp 0x4519e9
cmp byte [ebp - 4], 0
je 0x451bab
mov ecx, dword [edi + 0x40]
mov eax, dword [ecx]
call dword [eax + 0xc]
jmp 0x4519e9
test bl, bl
je 0x4519e9
cmp byte [ebp - 4], 0
jne 0x4519e9
test dl, dl
jmp 0x451c71
push 1
push 0xffffffffffffffff
push 0x100c
push dword [edi + 0x74]
mov byte [edi + 0x174], 0
call dword [sym.imp.USER32.dll_SendMessageW]
mov dword [edi + 0x178], eax
jmp 0x4519e9
mov ecx, edi
call fcn.0044a64f
jmp 0x451a70
test dl, dl
je 0x4519e9
mov ecx, edi
call fcn.00456101
jmp 0x4519e9
cmp eax, 0x2d
je 0x451c4d
cmp eax, 0x2e
je 0x451c3a
cmp eax, 0x30
jbe 0x4519e9
cmp eax, 0x34
jbe 0x451c22
cmp eax, 0x41
je 0x451c0c
cmp eax, 0x43
je 0x451c02
cmp eax, 0x4e
jne 0x4519e9
test bl, bl
je 0x4519e9
mov ecx, edi
call fcn.00455a61
jmp 0x451a70
test bl, bl
je 0x4519e9
jmp 0x451c5f
test bl, bl
je 0x4519e9
mov ecx, edi
push 1
call fcn.00456544
jmp 0x451a70
test bl, bl
je 0x4519e9
add eax, 0xffffffcf
mov ecx, edi
push eax
call fcn.004453dd
jmp 0x451a70
xor dl, 1
mov ecx, edi
movzx eax, dl
push eax
call fcn.00454fa6
jmp 0x451a70
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
je 0x451c6b
test dl, dl
jne 0x451c6f
mov ecx, edi
call fcn.00454071
jmp 0x451a70
test dl, dl
je 0x451c7c
test bl, bl
jne 0x4519e9
jmp 0x451a70
cmp byte [edi + 0x9f], 0
je 0x4519e9
mov ecx, edi
call fcn.004561a4
jmp 0x451a70
test bl, bl
je 0x4519e9
mov ecx, edi
call fcn.0045174a
jmp 0x451a70
cmp eax, dword [ebp - 8]
ja 0x451d79
je 0x451d53
sub eax, 0x56
je 0x451d46
dec eax
sub eax, 1
je 0x451d46
dec eax
sub eax, 1
je 0x451d32
sub eax, 0x10
je 0x451d26
sub eax, 1
je 0x451cfe
dec eax
sub eax, 1
jne 0x4519e9
push eax
cmp byte [ebp - 4], al
je 0x451cf3
mov ecx, edi
call fcn.00456373
jmp 0x451a70
mov ecx, edi
test dl, dl
je 0x451d1c
jmp 0x451c18
cmp byte [ebp - 4], 0
je 0x451d08
push 1
jmp 0x451ce7
test dl, dl
jne 0x451c14
test bl, bl
jne 0x451a70
push 1
mov ecx, edi
call fcn.004562b4
jmp 0x451a70
mov ecx, edi
call fcn.00456571
jmp 0x451a70
test bl, bl
je 0x4519e9
mov ecx, edi
call fcn.00455d3d
jmp 0x451a70
test bl, bl
je 0x4519e9
jmp 0x451a70
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
test dl, dl
jne 0x4519e9
mov ecx, edi
call fcn.00455d03
jmp 0x451a70
sub eax, 0x72
je 0x451e49
sub eax, 1
je 0x451e2b
sub eax, 1
je 0x451e07
sub eax, 1
je 0x451dee
sub eax, 1
je 0x451dc8
sub eax, 5
jne 0x4519e9
cmp byte [ebp - 4], al
je 0x4519e9
test bl, bl
jne 0x4519e9
test dl, dl
jne 0x4519e9
mov ecx, edi
call fcn.0044a483
jmp 0x451a70
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
test dl, dl
jne 0x4519e9
mov ecx, edi
call fcn.004557d6
jmp 0x451a70
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
push dword [ebp - 0xc]
push 1
jmp 0x451e1e
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
push dword [ebp - 0xc]
push 0
mov ecx, dword [edi + 0x40]
mov eax, dword [ecx]
call dword [eax + 8]
jmp 0x451a70
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
test dl, dl
jne 0x451bf6
push 1
jmp 0x451e65
cmp byte [ebp - 4], 0
jne 0x4519e9
test bl, bl
jne 0x4519e9
test dl, dl
jne 0x4519e9
push 0
mov ecx, edi
call fcn.00450be4
jmp 0x451a70