Function at 0x4160c0
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 0x41639e
push 0
call dword [sym.imp.USER32.dll_GetKeyState]
push 0x49d430
push 0
push 0xb
push 0
call dword [sym.imp.MMFS2.dll_Ordinal_31]
mov dword [0x49d428], eax
test eax, eax
je 0x41610b
lea edi, [ebx + 4]
mov ecx, 0x40
mov esi, 0x49d430
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 0x4161ab
mov ecx, dword [ebx + 0x20c]
mov edi, dword [ebx + 0x208]
lea eax, [ecx + 2]
cmp eax, edi
jbe 0x416176
lea eax, [edi + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004646bf
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 0x41618a
mov byte [eax + ecx], 3
jmp 0x41618e
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 0x416120
lea esi, [ebx + 4]
mov ecx, 0x40
rep movsd dword es:[edi], dword [esi]
call fcn.004279d0
mov esi, dword [ebx]
xor ecx, ecx
nop
mov al, byte [ebx + ecx + 0x210]
cmp al, byte [esi + ecx + 0x2c]
jne 0x4161e5
inc ecx
cmp ecx, 4
jl 0x4161d0
jmp 0x416262
cmp ecx, 4
jge 0x416262
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x416228
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004646bf
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 0x416234
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 0x41629b
mov eax, dword [ebx + 0x218]
cmp eax, dword [ebp - 8]
je 0x416350
mov ecx, dword [ebx + 0x20c]
mov edx, dword [ebx + 0x208]
lea eax, [ecx + 5]
cmp eax, edx
jbe 0x4162d9
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004646bf
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 0x41638e
lea eax, [edx + 0x400]
push eax
push dword [ebx + 0x204]
call fcn.004646bf
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