Function at 0x415af0
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 0x415dce
push 0
call dword [sym.imp.USER32.dll_GetKeyState]
push 0x4a0420
push 0
push 0xb
push 0
call dword [sym.imp.MMFS2.dll_Ordinal_31]
mov dword [0x4a0418], eax
test eax, eax
je 0x415b3b
lea edi, [ebx + 4]
mov ecx, 0x40
mov esi, 0x4a0420
rep movsd dword es:[edi], dword [esi]
xor edx, edx
lea edi, [ebx + 0x104]
mov dword [ebp - 4], edx
nop word [eax + eax]
movzx esi, byte [edi + edx - 0x100]
movzx eax, byte [edi + edx]
xor eax, esi
test eax, 0xffffff80
je 0x415bdb
mov ecx, dword [ebx + 0x20c]
mov edi, dword [ebx + 0x208]
lea eax, [ecx + 2]
cmp eax, edi
jbe 0x415ba6
lea eax, [edi + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004643ef
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 0x415bba
mov byte [eax + ecx], 3
jmp 0x415bbe
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 0x415b50
lea esi, [ebx + 4]
mov ecx, 0x40
rep movsd dword es:[edi], dword [esi]
call fcn.004262f0
mov esi, dword [ebx]
xor ecx, ecx
nop
mov al, byte [ebx + ecx + 0x210]
cmp al, byte [esi + ecx + 0x2c]
jne 0x415c15
inc ecx
cmp ecx, 4
jl 0x415c00
jmp 0x415c92
cmp ecx, 4
jge 0x415c92
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x415c58
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004643ef
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
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 0x415c64
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 0x415ccb
mov eax, dword [ebx + 0x218]
cmp eax, dword [ebp - 8]
je 0x415d80
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x415d09
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004643ef
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 0x415dbe
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004643ef
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