Function at 0x40b4f0
Capabilities:
Log keystrokes via polling

Disassembly:
mov ecx, dword [esp + 4]
push ebx
push esi
mov edx, dword [ecx + 4]
mov eax, dword [ecx + 0xc]
mov esi, dword [ecx]
mov ebx, dword [ecx + 8]
cmp edx, 0x100
mov dword [esp + 0xc], eax
ja 0x40b591
je 0x40b626
lea ecx, [edx - 0xa1]
cmp ecx, 5
ja case.default.0x40b87f
jmp dword [ecx*4 + 0x40b92c]
mov byte [0x437325], 0
jmp case.0x40b526.161
mov byte [0x437328], 0
movsx ecx, word [esp + 0xe]
movsx eax, ax
mov dword [0x436794], ecx
mov dword [0x43679c], ecx
mov ecx, dword [0x4377ec]
mov dword [0x436790], eax
mov dword [0x436798], eax
mov edx, dword [0x437238]
lea eax, [ecx*8]
push 0x436798
sub eax, ecx
lea eax, [eax + eax*2]
lea ecx, [ecx + eax*2]
mov eax, dword [edx + ecx*4]
push eax
call dword [sym.imp.USER32.dll_ScreenToClient]
pop esi
mov byte [0x43732b], 1
xor eax, eax
pop ebx
ret
cmp edx, 0x200
ja 0x40b870
je case.0x40b87f.514
lea ecx, [edx - 0x101]
cmp ecx, 5
ja case.default.0x40b87f
jmp dword [ecx*4 + 0x40b944]
mov eax, dword [0x437780]
movsx ecx, bl
mov dword [eax*4 + 0x4373c8], ecx
inc eax
xor ebx, ebx
cmp eax, 0x14
mov dword [0x437780], eax
jl 0x40b5dc
xor eax, eax
mov dword [0x437780], eax
mov ecx, dword [0x437784]
cmp eax, ecx
jne case.default.0x40b87f
inc ecx
cmp ecx, 0x14
mov dword [0x437784], ecx
jl case.default.0x40b87f
mov dword [0x437784], ebx
pop esi
xor eax, eax
pop ebx
ret
cmp ebx, 0xd
jne 0x40b626
mov dl, byte [0x4372ea]
test dl, dl
sete dl
push edx
call fcn.0040b070
add esp, 4
mov eax, 1
pop esi
pop ebx
ret
push eax
push ebx
call fcn.0040b3a0
mov esi, eax
mov al, byte [0x437748]
xor ebx, ebx
add esp, 8
cmp al, bl
je 0x40b648
mov byte [0x437748], bl
pop esi
xor eax, eax
pop ebx
ret
lea eax, [esi - 0x11]
cmp eax, 0x94
ja case.0x40b65e.24
xor ecx, ecx
mov cl, byte [eax + 0x40b97c]
jmp dword [ecx*4 + 0x40b95c]
mov dl, byte [0x4374cd]
mov byte [0x437788], dl
jmp case.0x40b65e.24
cmp byte [0x437794], bl
jne case.0x40b65e.24
push 0x90
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x437790], al
jmp case.0x40b65e.24
cmp byte [0x437795], bl
jne case.0x40b65e.24
push 0x14
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x437791], al
jmp case.0x40b65e.24
cmp byte [0x437796], bl
jne case.0x40b65e.24
push 0x91
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x437792], al
jmp case.0x40b65e.24
cmp byte [0x437797], bl
jne case.0x40b65e.24
push 0x2d
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x437793], al
jmp case.0x40b65e.24
pop esi
mov byte [0x437748], 1
xor eax, eax
pop ebx
ret
mov eax, dword [0x437778]
mov ecx, dword [0x43777c]
cmp eax, ecx
je case.0x40b65e.24
dec eax
cmp eax, ebx
jge 0x40b717
mov eax, 0x13
cmp dword [eax*4 + 0x437464], 0x11
jne case.0x40b65e.24
mov dword [0x437778], eax
mov al, byte [0x437788]
cmp al, bl
jne case.0x40b65e.24
cmp byte [0x4374cd], bl
je case.0x40b65e.24
mov eax, dword [0x43778c]
mov byte [0x4374cd], bl
dec eax
mov dword [0x43778c], eax
cmp esi, 0x100
jae 0x40b76a
cmp byte [esi + 0x4374bc], bl
jne 0x40b76a
mov eax, dword [0x43778c]
mov byte [esi + 0x4374bc], 1
inc eax
mov dword [0x43778c], eax
mov eax, dword [0x437778]
mov dword [eax*4 + 0x437464], esi
inc eax
cmp eax, 0x14
mov dword [0x437778], eax
jl 0x40b788
xor eax, eax
mov dword [0x437778], eax
mov ecx, dword [0x43777c]
cmp eax, ecx
jne 0x40b7a4
inc ecx
cmp ecx, 0x14
mov dword [0x43777c], ecx
jl 0x40b7a4
mov dword [0x43777c], ebx
cmp esi, 0x12
je 0x40b7b2
cmp esi, 0x79
jne case.default.0x40b87f
pop esi
mov eax, 1
pop ebx
ret
push eax
push ebx
call fcn.0040b3a0
add esp, 8
xor ebx, ebx
cmp eax, 0x100
jae 0x40b7e8
cmp byte [eax + 0x4374bc], bl
je 0x40b7e8
mov ecx, dword [0x43778c]
mov byte [eax + 0x4374bc], bl
dec ecx
mov dword [0x43778c], ecx
cmp eax, 0x10
je 0x40b827
cmp eax, 0xa1
jne 0x40b85a
cmp byte [0x4374cc], bl
je case.default.0x40b87f
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jl case.default.0x40b87f
mov eax, dword [0x43778c]
mov byte [0x4374cc], bl
dec eax
pop esi
mov dword [0x43778c], eax
xor eax, eax
pop ebx
ret
cmp byte [0x43755d], bl
je case.default.0x40b87f
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jl case.default.0x40b87f
mov eax, dword [0x43778c]
mov byte [0x43755d], bl
dec eax
pop esi
mov dword [0x43778c], eax
xor eax, eax
pop ebx
ret
cmp eax, 0x12
je 0x40b868
cmp eax, 0x79
jne case.default.0x40b87f
pop esi
mov eax, 1
pop ebx
ret
add edx, 0xfffffdff
cmp edx, 5
ja case.default.0x40b87f
jmp dword [edx*4 + 0x40ba14]
mov byte [0x437327], 1
mov byte [0x437326], 1
jmp case.0x40b87f.514
mov byte [0x43732a], 1
mov byte [0x437329], 1
mov dl, byte [ecx + 8]
push 0x436790
and dl, 1
push esi
mov byte [0x437325], dl
mov ecx, dword [ecx + 8]
shr ecx, 1
mov edx, eax
and cl, 1
and edx, 0xffff
mov byte [0x437328], cl
shr eax, 0x10
mov dword [0x436790], edx
mov dword [0x436794], eax
call dword [sym.imp.USER32.dll_ClientToScreen]
mov ecx, dword [0x436794]
mov eax, dword [0x436790]
mov dword [0x43679c], ecx
mov ecx, dword [0x4377ec]
mov dword [0x436798], eax
push 0x436798
lea eax, [ecx*8]
sub eax, ecx
lea edx, [eax + eax*2]
lea eax, [ecx + edx*2]
mov ecx, dword [0x437238]
mov edx, dword [ecx + eax*4]
push edx
call dword [sym.imp.USER32.dll_ScreenToClient]
mov byte [0x43732b], 1
pop esi
xor eax, eax
pop ebx
ret