Function at 0x4097f0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xc
push ebx
mov ebx, ecx
push esi
push edi
mov eax, dword [ebx]
cmp dword [eax + 0xd0], 1
jle 0x409aca
push 0
call dword [sym.imp.USER32.dll_GetKeyState]
push 0x4ab260
call dword [sym.imp.USER32.dll_GetKeyboardState]
mov dword [0x4ab25c], eax
test eax, eax
je 0x409835
lea edi, [ebx + 4]
mov ecx, 0x40
mov esi, 0x4ab260
rep movsd dword es:[edi], dword [esi]
xor edx, edx
lea edi, [ebx + 0x104]
mov dword [ebp - 4], edx
movzx esi, byte [edi + edx - 0x100]
movzx eax, byte [edi + edx]
xor eax, esi
test eax, 0xffffff80
je 0x4098cb
mov ecx, dword [ebx + 0x20c]
mov edi, dword [ebx + 0x208]
lea eax, [ecx + 2]
cmp eax, edi
jbe 0x409896
lea eax, [edi + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.0047123a
mov ecx, dword [ebx + 0x20c]
add esp, 8
add dword [ebx + 0x208], 0x400
mov edx, dword [ebp - 4]
mov dword [ebx + 0x204], eax
mov eax, dword [ebx + 0x204]
cmp esi, 0x80
jae 0x4098aa
mov byte [eax + ecx], 3
jmp 0x4098ae
mov byte [eax + ecx], 2
mov eax, dword [ebx + 0x20c]
lea edi, [ebx + 0x104]
mov ecx, dword [ebx + 0x204]
mov byte [ecx + eax + 1], dl
add dword [ebx + 0x20c], 2
inc edx
mov dword [ebp - 4], edx
cmp edx, 0x100
jl 0x409840
lea esi, [ebx + 4]
mov ecx, 0x40
rep movsd dword es:[edi], dword [esi]
call fcn.00432320
mov esi, dword [ebx]
xor ecx, ecx
nop
mov al, byte [ebx + ecx + 0x210]
cmp al, byte [esi + ecx + 0x2c]
jne 0x409908
inc ecx
cmp ecx, 4
jl 0x4098f0
jmp 0x40998e
cmp ecx, 4
jge 0x40998e
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x40994f
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.0047123a
mov ecx, dword [ebx + 0x20c]
add esp, 8
add dword [ebx + 0x208], 0x400
mov dword [ebx + 0x204], eax
mov eax, dword [ebx + 0x204]
xor edx, edx
mov byte [ecx + eax], 4
nop dword [eax + eax]
mov ecx, dword [ebx + 0x204]
add ecx, dword [ebx + 0x20c]
movzx eax, byte [esi + edx + 0x2c]
mov byte [ecx + edx + 1], al
movzx eax, byte [esi + edx + 0x2c]
mov byte [ebx + edx + 0x210], al
inc edx
cmp edx, 4
jl 0x409960
add dword [ebx + 0x20c], 5
lea eax, [ebp - 0xc]
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
lea eax, [ebp - 0xc]
push eax
mov eax, dword [ebx]
mov eax, dword [eax + 0x18]
push dword [eax + 0x1d0]
call dword [sym.imp.USER32.dll_ScreenToClient]
mov eax, dword [ebx + 0x214]
cmp eax, dword [ebp - 0xc]
jne 0x4099c7
mov eax, dword [ebx + 0x218]
cmp eax, dword [ebp - 8]
je 0x409a7c
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x409a05
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.0047123a
mov ecx, dword [ebx + 0x20c]
add esp, 8
add dword [ebx + 0x208], 0x400
mov dword [ebx + 0x204], eax
mov eax, dword [ebx + 0x204]
mov byte [ecx + eax], 5
mov eax, dword [ebx + 0x20c]
mov ecx, dword [ebx + 0x204]
mov edx, dword [ebp - 0xc]
sar edx, 8
mov byte [ecx + eax + 1], dl
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x204]
movzx eax, byte [ebp - 0xc]
mov byte [edx + ecx + 2], al
mov eax, dword [ebx + 0x20c]
mov ecx, dword [ebx + 0x204]
mov edx, dword [ebp - 8]
sar edx, 8
mov byte [ecx + eax + 3], dl
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x204]
movzx eax, byte [ebp - 8]
mov byte [edx + ecx + 4], al
mov eax, dword [ebp - 0xc]
add dword [ebx + 0x20c], 5
mov dword [ebx + 0x214], eax
mov eax, dword [ebp - 8]
mov dword [ebx + 0x218], eax
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 1]
cmp eax, edx
jbe 0x409aba
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.0047123a
mov ecx, dword [ebx + 0x20c]
add esp, 8
add dword [ebx + 0x208], 0x400
mov dword [ebx + 0x204], eax
mov eax, dword [ebx + 0x204]
mov byte [ecx + eax], 1
inc dword [ebx + 0x20c]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret