Function at 0x40b160
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword [esp + 4]
push ebx
push esi
mov edx, dword [eax + 4]
mov ecx, dword [eax + 0xc]
mov esi, dword [eax]
mov ebx, dword [eax + 8]
cmp edx, 0x100
mov dword [esp + 0xc], ecx
ja 0x40b20f
je 0x40b2b5
lea eax, [edx - 0xa1]
cmp eax, 5
ja case.default.0x40b50e
jmp dword [eax*4 + 0x40b5b8]
mov byte [0x432234], 1
jmp 0x40b1bf
mov byte [0x432237], 1
jmp 0x40b1bf
mov byte [0x432234], 0
jmp 0x40b1bf
mov byte [0x432237], 0
movsx eax, cx
movsx ecx, word [esp + 0xe]
mov dword [0x431768], eax
mov dword [0x431770], eax
mov eax, dword [0x4326e4]
mov edx, dword [0x432180]
mov dword [0x43176c], ecx
mov dword [0x431774], ecx
lea ecx, [eax*8]
push 0x431770
sub ecx, eax
shl ecx, 4
mov eax, dword [ecx + edx]
push eax
call dword [sym.imp.USER32.dll_ScreenToClient]
pop esi
mov byte [0x43223a], 1
xor eax, eax
pop ebx
ret
cmp edx, 0x200
ja 0x40b4ff
je case.0x40b50e.514
lea eax, [edx - 0x101]
cmp eax, 5
ja case.default.0x40b50e
jmp dword [eax*4 + 0x40b5d0]
mov eax, dword [0x432678]
movsx ecx, bl
mov dword [eax*4 + 0x4322c8], ecx
inc eax
xor ebx, ebx
cmp eax, 0x14
mov dword [0x432678], eax
jl 0x40b25a
xor eax, eax
mov dword [0x432678], eax
mov ecx, dword [0x43267c]
cmp eax, ecx
jne case.default.0x40b50e
inc ecx
cmp ecx, 0x14
mov dword [0x43267c], ecx
jl case.default.0x40b50e
mov dword [0x43267c], ebx
pop esi
xor eax, eax
pop ebx
ret
cmp ebx, 0xd
jne 0x40b2b5
mov al, byte [0x4326e2]
xor ebx, ebx
cmp al, bl
jne 0x40b2ad
cmp dword [0x4326e4], ebx
jne 0x40b2ad
cmp byte [0x432205], bl
sete dl
push edx
call fcn.0040a7d0
add esp, 4
pop esi
mov eax, 1
pop ebx
ret
push ecx
push ebx
call fcn.0040b010
mov esi, eax
mov al, byte [0x432644]
xor ebx, ebx
add esp, 8
cmp al, bl
je 0x40b2d7
mov byte [0x432644], bl
pop esi
xor eax, eax
pop ebx
ret
lea eax, [esi - 0x11]
cmp eax, 0x94
ja case.0x40b2ed.24
xor ecx, ecx
mov cl, byte [eax + 0x40b608]
jmp dword [ecx*4 + 0x40b5e8]
mov dl, byte [0x4323c9]
mov byte [0x432680], dl
jmp case.0x40b2ed.24
cmp byte [0x43268c], bl
jne case.0x40b2ed.24
push 0x90
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x432688], al
jmp case.0x40b2ed.24
cmp byte [0x43268d], bl
jne case.0x40b2ed.24
push 0x14
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x432689], al
jmp case.0x40b2ed.24
cmp byte [0x43268e], bl
jne case.0x40b2ed.24
push 0x91
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x43268a], al
jmp case.0x40b2ed.24
cmp byte [0x43268f], bl
jne case.0x40b2ed.24
push 0x2d
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
mov byte [0x43268b], al
jmp case.0x40b2ed.24
pop esi
mov byte [0x432644], 1
xor eax, eax
pop ebx
ret
mov eax, dword [0x432670]
mov ecx, dword [0x432674]
cmp eax, ecx
je case.0x40b2ed.24
dec eax
cmp eax, ebx
jge 0x40b3a6
mov eax, 0x13
cmp dword [eax*4 + 0x432364], 0x11
jne case.0x40b2ed.24
mov dword [0x432670], eax
mov al, byte [0x432680]
cmp al, bl
jne case.0x40b2ed.24
cmp byte [0x4323c9], bl
je case.0x40b2ed.24
mov eax, dword [0x432684]
mov byte [0x4323c9], bl
dec eax
mov dword [0x432684], eax
cmp esi, 0x100
jae 0x40b3f9
cmp byte [esi + 0x4323b8], bl
jne 0x40b3f9
mov eax, dword [0x432684]
mov byte [esi + 0x4323b8], 1
inc eax
mov dword [0x432684], eax
mov eax, dword [0x432670]
mov dword [eax*4 + 0x432364], esi
inc eax
cmp eax, 0x14
mov dword [0x432670], eax
jl 0x40b417
xor eax, eax
mov dword [0x432670], eax
mov ecx, dword [0x432674]
cmp eax, ecx
jne 0x40b433
inc ecx
cmp ecx, 0x14
mov dword [0x432674], ecx
jl 0x40b433
mov dword [0x432674], ebx
cmp esi, 0x12
je 0x40b441
cmp esi, 0x79
jne case.default.0x40b50e
pop esi
mov eax, 1
pop ebx
ret
push ecx
push ebx
call fcn.0040b010
add esp, 8
xor ebx, ebx
cmp eax, 0x100
jae 0x40b477
cmp byte [eax + 0x4323b8], bl
je 0x40b477
mov ecx, dword [0x432684]
mov byte [eax + 0x4323b8], bl
dec ecx
mov dword [0x432684], ecx
cmp eax, 0x10
je 0x40b4b6
cmp eax, 0xa1
jne 0x40b4e9
cmp byte [0x4323c8], bl
je case.default.0x40b50e
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jl case.default.0x40b50e
mov eax, dword [0x432684]
mov byte [0x4323c8], bl
dec eax
pop esi
mov dword [0x432684], eax
xor eax, eax
pop ebx
ret
cmp byte [0x432459], bl
je case.default.0x40b50e
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jl case.default.0x40b50e
mov eax, dword [0x432684]
mov byte [0x432459], bl
dec eax
pop esi
mov dword [0x432684], eax
xor eax, eax
pop ebx
ret
cmp eax, 0x12
je 0x40b4f7
cmp eax, 0x79
jne case.default.0x40b50e
pop esi
mov eax, 1
pop ebx
ret
add edx, 0xfffffdff
cmp edx, 5
ja case.default.0x40b50e
jmp dword [edx*4 + 0x40b6a0]
mov byte [0x432236], 1
mov byte [0x432235], 1
jmp case.0x40b50e.514
mov byte [0x432239], 1
mov byte [0x432238], 1
mov dl, byte [eax + 8]
push 0x431768
and dl, 1
push esi
mov byte [0x432234], dl
mov eax, dword [eax + 8]
shr eax, 1
mov edx, ecx
and al, 1
and edx, 0xffff
mov byte [0x432237], al
shr ecx, 0x10
mov dword [0x431768], edx
mov dword [0x43176c], ecx
call dword [sym.imp.USER32.dll_ClientToScreen]
mov eax, dword [0x431768]
mov ecx, dword [0x43176c]
mov dword [0x431770], eax
mov eax, dword [0x4326e4]
mov dword [0x431774], ecx
push 0x431770
lea edx, [eax*8]
sub edx, eax
mov eax, dword [0x432180]
shl edx, 4
mov ecx, dword [edx + eax]
push ecx
call dword [sym.imp.USER32.dll_ScreenToClient]
mov byte [0x43223a], 1
pop esi
xor eax, eax
pop ebx
ret