Function at 0x40b7b0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push ebp
push esi
mov esi, ecx
mov al, byte [esi + 0x938]
test al, al
push edi
jne 0x40bc16
mov al, byte [0x9095a8]
test al, al
jne 0x40bc16
mov al, byte [esi + 0x24]
test al, al
jne 0x40bbbf
mov al, byte [0x9096c8]
test al, al
mov edi, dword [esp + 0x14]
je 0x40b814
mov al, byte [esp + 0x1c]
test al, al
jne 0x40bc16
mov eax, dword [0x4ee6d8]
cmp dword [eax], 0
je 0x40b814
mov eax, dword [eax + 0xc]
test eax, eax
je 0x40b814
push edi
call eax
add esp, 4
test eax, eax
jne 0x40bc16
cmp edi, 0x10
jne 0x40b86b
mov al, byte [esi + 0x2c6]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40b848
push 0xa1
call edi
test ah, 0x80
je 0x40b848
mov eax, dword [esp + 0x1c]
push eax
push 0xa1
mov ecx, esi
call fcn.0040bfb0
test byte [esi + 0x2c5], bl
jne 0x40bc16
push 0xa0
call edi
test ah, 0x80
jne 0x40b98b
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
cmp edi, 0x11
mov ebp, dword [esp + 0x1c]
jne 0x40b929
mov al, byte [esi + 0x2c8]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40b8a3
push 0xa3
call edi
test ah, 0x80
je 0x40b8a3
push ebp
push 0xa3
mov ecx, esi
call fcn.0040bfb0
test byte [esi + 0x2c7], bl
jne 0x40bc16
push 0xa2
call edi
test ah, 0x80
je 0x40bc16
mov edi, 0xa2
mov al, byte [esp + 0x18]
test al, al
jne case.0x40b8e4.22
lea eax, [edi - 0xc]
cmp eax, 0x21
ja case.0x40b8e4.22
xor ecx, ecx
mov cl, byte [eax + 0x40bc4c]
jmp dword [ecx*4 + 0x40bc20]
mov al, byte [esi + 0x525]
test al, al
jne 0x40b90d
mov al, byte [esi + 0x526]
test al, al
jne 0x40b90d
mov al, byte [esi + 0x285]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x60
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
cmp edi, 0x12
jne 0x40b97f
mov al, byte [esi + 0x2ca]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40b959
push 0xa5
call edi
test ah, 0x80
je 0x40b959
push ebp
push 0xa5
mov ecx, esi
call fcn.0040bfb0
test byte [esi + 0x2c9], bl
jne 0x40bc16
push 0xa4
call edi
test ah, 0x80
je 0x40bc16
mov edi, 0xa4
jmp 0x40b8c4
cmp edi, 0xa0
jne 0x40b8c4
pop edi
mov byte [esi + 0x525], 1
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40b9bb
mov al, byte [esi + 0x526]
test al, al
jne 0x40b9bb
mov al, byte [esi + 0x286]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x61
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40b9f9
mov al, byte [esi + 0x526]
test al, al
jne 0x40b9f9
mov al, byte [esi + 0x287]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x62
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40ba37
mov al, byte [esi + 0x526]
test al, al
jne 0x40ba37
mov al, byte [esi + 0x288]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x63
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40ba75
mov al, byte [esi + 0x526]
test al, al
jne 0x40ba75
mov al, byte [esi + 0x289]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x64
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40bab3
mov al, byte [esi + 0x526]
test al, al
jne 0x40bab3
mov al, byte [esi + 0x28a]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x65
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40baf1
mov al, byte [esi + 0x526]
test al, al
jne 0x40baf1
mov al, byte [esi + 0x28b]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x66
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40bb2f
mov al, byte [esi + 0x526]
test al, al
jne 0x40bb2f
mov al, byte [esi + 0x28c]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x67
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40bb69
mov al, byte [esi + 0x526]
test al, al
jne 0x40bb69
mov al, byte [esi + 0x28d]
test al, al
je case.0x40b8e4.22
push ebp
mov edi, 0x68
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40bba3
mov al, byte [esi + 0x526]
test al, al
jne 0x40bba3
mov al, byte [esi + 0x28e]
test al, al
je case.0x40b8e4.22
mov edi, 0x69
mov byte [esi + 0x525], 1
push ebp
push edi
mov ecx, esi
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov ecx, dword [0x4ee6e0]
test ecx, ecx
mov eax, dword [esp + 0x14]
je 0x40bbd9
cmp dword [ecx], 0
je 0x40bbd9
mov byte [esp + 0x1c], 0
jmp 0x40bbe1
mov cl, byte [esp + 0x1c]
test cl, cl
jne 0x40bc09
cmp eax, 0xf0
je 0x40bc09
cmp eax, 0xf1
je 0x40bc09
cmp eax, 0xf2
je 0x40bc09
cmp eax, 0xf3
je 0x40bc09
cmp eax, 0xf4
je 0x40bc09
cmp eax, 0x13
jne 0x40bc16
mov edx, dword [esp + 0x1c]
push edx
push eax
mov ecx, esi
call fcn.0040bfb0
pop edi
pop esi
pop ebp
pop ebx
ret 0xc