Function at 0x51a2a0
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x59e17a
push eax
mov eax, dword [esp + 0x20]
mov dword fs:[0], esp
sub esp, 0x18
push ebx
push ebp
push esi
xor esi, esi
push edi
cmp eax, esi
mov edi, ecx
jne 0x51a2cf
xor eax, eax
jmp 0x51a533
mov eax, dword [esp + 0x38]
cmp eax, esi
jne 0x51a2de
xor eax, eax
jmp 0x51a533
push eax
call dword [sym.imp.USER32.dll_GetMenuItemCount]
test eax, eax
je 0x51a533
mov ebx, dword [esp + 0x3c]
mov eax, ebx
and al, 2
neg al
sbb eax, eax
neg eax
inc eax
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
mov bp, ax
push 0x90
shr ebp, 0xf
and ebp, 1
mov dword [esp + 0x40], ebp
call fcn.0056dbe7
add esp, 4
mov dword [esp + 0x10], eax
cmp eax, esi
mov dword [esp + 0x30], esi
je 0x51a332
mov ecx, eax
call fcn.005165c0
mov esi, eax
mov ecx, dword [esp + 0x48]
mov dword [esp + 0x30], 0xffffffff
push ecx
mov ecx, esi
mov dword [esi + 0x7c], edi
call fcn.0051a0a0
test eax, eax
jne 0x51a35b
mov ecx, esi
call fcn.0058a815
xor eax, eax
jmp 0x51a533
mov edx, dword [esp + 0x38]
mov eax, dword [esp + 0x48]
mov ecx, ebx
mov dword [esi + 0x3c], edx
shr ecx, 9
and ecx, 1
mov dword [esi + 0x78], eax
mov dword [esi + 0x60], ecx
mov edx, ebx
mov eax, ebx
mov ecx, ebx
shr edx, 1
shr eax, 7
and ecx, 0x100
and edx, 1
and eax, 1
mov dword [edi + 0x38], ecx
push esi
mov ecx, edi
mov dword [edi + 0x30], edx
mov dword [edi + 0x20], eax
call fcn.00517e80
push 0
mov ecx, edi
call fcn.00517f50
test eax, eax
jne 0x51a3b7
mov ecx, esi
call fcn.0058a815
xor eax, eax
jmp 0x51a533
mov eax, dword [edi + 0x20]
mov dword [edi + 0x3c], ebp
test eax, eax
jne 0x51a3ea
mov ebp, dword [esi + 0x60]
xor edx, edx
mov eax, dword [esp + 0x38]
mov ecx, dword [esp + 0x48]
test ebp, ebp
setne dl
and edx, 0xffff
shl edx, 0x10
push edx
push eax
push 0x117
push ecx
call dword [sym.imp.USER32.dll_SendMessageA]
lea edx, [esp + 0x20]
mov ecx, esi
push edx
mov dword [esi + 0x70], 1
call fcn.00516b70
mov ebp, dword [eax]
mov ecx, dword [esp + 0x48]
push 0xffffffffffffffec
push ecx
mov eax, dword [eax + 4]
mov dword [esp + 0x1c], eax
call dword [sym.imp.USER32.dll_GetWindowLongA]
test eax, 0x400000
je 0x51a422
test bl, 4
jne 0x51a422
xor ebx, 8
mov ecx, dword [esp + 0x40]
mov edx, dword [esp + 0x44]
test bl, 8
mov dword [esp + 0x18], ecx
mov dword [esp + 0x1c], edx
je 0x51a446
sub ecx, ebp
mov dword [esp + 0x18], ecx
mov dword [esi + 0x74], 1
jmp 0x51a458
test bl, 4
je 0x51a458
mov eax, ebp
cdq
sub eax, edx
sar eax, 1
sub ecx, eax
mov dword [esp + 0x18], ecx
test bl, 0x20
je 0x51a469
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x1c]
sub ecx, eax
jmp 0x51a47f
test bl, 0x10
je 0x51a483
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x1c]
cdq
sub eax, edx
sar eax, 1
neg eax
add ecx, eax
mov dword [esp + 0x1c], ecx
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x14]
push ecx
push ebx
push edx
lea eax, [esp + 0x24]
push ebp
push eax
push esi
mov ecx, edi
call fcn.0051a170
push 2
mov ecx, edi
call fcn.00516050
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x1c]
mov eax, dword [esp + 0x18]
push 0x250
push ecx
mov ecx, dword [esi + 0x1c]
push ebp
push edx
push eax
push 0xffffffffffffffff
push ecx
call dword [sym.imp.USER32.dll_SetWindowPos]
mov edx, dword [esp + 0x3c]
push 0
mov ecx, edi
mov dword [edi + 4], edx
call fcn.00519da0
push esi
mov ecx, edi
call fcn.00518b30
mov eax, dword [esi + 0x70]
test eax, eax
je 0x51a514
mov eax, dword [edi + 0x20]
test eax, eax
jne 0x51a514
mov eax, dword [esi + 0x60]
mov ecx, dword [esi + 0x3c]
neg eax
sbb eax, eax
mov edx, dword [esi + 0x78]
and eax, 0x2000
and eax, 0xffff
shl eax, 0x10
push eax
push ecx
push 0x125
push edx
call dword [sym.imp.USER32.dll_SendMessageA]
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x58]
mov ecx, esi
call fcn.0058a815
mov eax, dword [edi + 0x38]
test eax, eax
je 0x51a52e
mov eax, dword [edi + 0x34]
jmp 0x51a533
mov eax, 1
mov ecx, dword [esp + 0x28]
pop edi
pop esi
pop ebp
pop ebx
mov dword fs:[0], ecx
add esp, 0x24
ret 0x18