Function at 0x41e5b0
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x1cc
push ebx
push esi
push edi
xor ebx, ebx
mov esi, dword [esp + 0x1e0]
push ebp
cmp esi, ebx
je 0x41e5d2
mov edi, esi
xor eax, eax
mov ecx, 9
rep stosd dword es:[edi], eax
cmp dword [0x434ed0], 0
jge 0x41e6df
cmp dword [0x43ab5c], 0
jne 0x41e60b
push str.WINMM.DLL
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
push str.joyGetPosEx
mov ebp, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push eax
mov dword [0x43ab5c], eax
call ebp
mov dword [0x43ab58], eax
call dword [sym.imp.WINMM.dll_joyGetNumDevs]
mov dword [0x434ed0], eax
cmp eax, 8
jle 0x41e620
mov eax, 8
mov dword [0x434ed0], eax
test eax, eax
mov dword [esp + 0x10], 0
jle 0x41e6df
mov ebp, 0x43aa5c
lea edi, [esp + 0x48]
xor eax, eax
mov ecx, 0x65
push 0x194
rep stosd dword es:[edi], eax
lea eax, [esp + 0x4c]
mov ecx, dword [esp + 0x14]
push eax
push ecx
call dword [sym.imp.WINMM.dll_joyGetDevCapsA]
mov ecx, dword [0x434ed0]
test eax, eax
jne 0x41e6ce
mov eax, dword [esp + 0x70]
mov edx, dword [esp + 0x6c]
sub eax, dword [esp + 0x6c]
shr eax, 1
add edx, eax
mov dword [ebp], eax
mov eax, dword [esp + 0x78]
mov dword [ebp - 4], edx
sub eax, dword [esp + 0x74]
mov edx, dword [esp + 0x74]
shr eax, 1
add edx, eax
mov dword [ebp + 8], eax
mov eax, dword [esp + 0x80]
mov dword [ebp + 4], edx
sub eax, dword [esp + 0x7c]
mov edx, dword [esp + 0x7c]
shr eax, 1
add edx, eax
mov dword [ebp + 0x10], eax
mov eax, dword [esp + 0x94]
mov dword [ebp + 0xc], edx
sub eax, dword [esp + 0x90]
mov edx, dword [esp + 0x90]
shr eax, 1
add edx, eax
mov dword [ebp + 0x18], eax
mov dword [ebp + 0x14], edx
add ebp, 0x20
inc dword [esp + 0x10]
cmp ecx, dword [esp + 0x10]
jg 0x41e63a
mov eax, dword [esp + 0x1e0]
lea ecx, [eax + eax*4]
lea edx, [eax + ecx*4]
lea eax, [eax + edx*2]
lea ebp, [eax*8 + 0x434418]
lea edi, [eax*8]
cmp dword [ebp], 0
je 0x41e71e
mov eax, dword [ebp + 4]
push eax
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ah, 0x80
je 0x41e715
or ebx, dword [ebp]
add ebp, 8
cmp dword [ebp], 0
jne 0x41e703
push 0x1b
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ah, 0x80
je 0x41e731
or ebx, 0x8000
mov dword [esp + 0x10], 0
xor ebp, ebp
cmp dword [edi + 0x434414], 0
mov bp, word [edi + 0x434410]
je 0x41e767
call dword [sym.imp.WINMM.dll_timeGetTime]
cmp eax, dword [edi + 0x434414]
jb 0x41e765
mov dword [edi + 0x434414], 0
jmp 0x41e767
xor ebp, ebp
test ebp, ebp
jle 0x41e7fd
cmp ebp, dword [0x434ed0]
jg 0x41e7fd
mov ecx, dword [0x43ab58]
test ecx, ecx
je 0x41e7a6
lea eax, [esp + 0x14]
lea edx, [ebp - 1]
mov dword [esp + 0x14], 0x34
mov dword [esp + 0x18], 0x48f
push eax
push edx
call ecx
test eax, eax
jne 0x41e7fd
jmp 0x41e7f5
lea eax, [esp + 0x48]
lea ecx, [ebp - 1]
push eax
push ecx
call dword [sym.imp.WINMM.dll_joyGetPos]
test eax, eax
jne 0x41e7fd
mov eax, dword [esp + 0x54]
and eax, 0xffff
mov dword [esp + 0x34], eax
mov eax, dword [esp + 0x48]
and eax, 0xffff
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x4c]
mov dword [esp + 0x28], 0
and eax, 0xffff
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x50]
and eax, 0xffff
mov dword [esp + 0x24], eax
mov dword [esp + 0x10], 1
cmp dword [esp + 0x10], 0
je 0x41e8bd
shl ebp, 5
mov eax, dword [ebp + 0x43aa3c]
cdq
lea ecx, [ebp + 0x43aa38]
and edx, 3
add eax, edx
mov ebp, dword [ecx]
sar eax, 2
mov edx, ebp
sub edx, eax
cmp edx, dword [esp + 0x1c]
jbe 0x41e831
or ebx, 4
jmp 0x41e83c
add eax, ebp
cmp eax, dword [esp + 0x1c]
jae 0x41e83c
or ebx, 8
mov edi, dword [ecx + 8]
mov eax, dword [ecx + 0xc]
cdq
and edx, 3
add eax, edx
mov edx, edi
sar eax, 2
sub edx, eax
cmp edx, dword [esp + 0x20]
jbe 0x41e85a
or ebx, 1
jmp 0x41e865
add eax, edi
cmp eax, dword [esp + 0x20]
jae 0x41e865
or ebx, 2
mov eax, dword [esp + 0x34]
and ax, 0x3ff
movzx eax, ax
shl eax, 4
or ebx, eax
test esi, esi
je 0x41e921
mov eax, dword [esp + 0x1c]
sub eax, ebp
mov dword [esi + 4], eax
mov eax, dword [esp + 0x20]
sub eax, edi
mov dword [esi + 8], eax
mov eax, dword [esp + 0x24]
sub eax, dword [ecx + 0x10]
mov edx, dword [ecx + 4]
mov ebp, dword [ecx + 0xc]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esi + 0x14], edx
sub eax, dword [ecx + 0x18]
mov dword [esi + 0x18], ebp
mov dword [esi + 0x10], eax
mov eax, dword [ecx + 0x14]
mov ecx, dword [ecx + 0x1c]
mov dword [esi + 0x1c], eax
mov dword [esi + 0x20], ecx
jmp 0x41e91b
test esi, esi
je 0x41e901
xor eax, eax
test bl, 4
je 0x41e8cd
mov eax, 0xffffffff
test bl, 8
je 0x41e8d3
inc eax
mov dword [esi + 0x14], 1
mov dword [esi + 4], eax
xor eax, eax
test bl, 1
je 0x41e8e9
mov eax, 0xffffffff
test bl, 2
je 0x41e8ef
inc eax
mov dword [esi + 0x18], 1
mov dword [esi + 8], eax
xor eax, eax
mov dword [esi + 0x1c], eax
mov dword [esi + 0x20], eax
cmp dword [edi + 0x434414], 0
jne 0x41e91b
call dword [sym.imp.WINMM.dll_timeGetTime]
add eax, 0xbb8
mov dword [edi + 0x434414], eax
test esi, esi
je 0x41e921
mov dword [esi], ebx
mov eax, ebx
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x1cc
ret 8