Function at 0x40c440
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push ebp
push esi
mov esi, ecx
mov al, byte [esi + 0xb38]
test al, al
push edi
jne 0x40c8a6
mov al, byte [0x8dd730]
test al, al
jne 0x40c8a6
mov al, byte [esi + 0x24]
test al, al
jne 0x40c84f
mov al, byte [0x8dd850]
test al, al
mov edi, dword [esp + 0x14]
je 0x40c4a4
mov al, byte [esp + 0x1c]
test al, al
jne 0x40c8a6
mov eax, dword [0x4cfbf8]
cmp dword [eax], 0
je 0x40c4a4
mov eax, dword [eax + 0xc]
test eax, eax
je 0x40c4a4
push edi
call eax
add esp, 4
test eax, eax
jne 0x40c8a6
cmp edi, 0x10
jne 0x40c4fb
mov al, byte [esi + 0x2c6]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40c4d8
push 0xa1
call edi
test ah, 0x80
je 0x40c4d8
mov eax, dword [esp + 0x1c]
push eax
push 0xa1
mov ecx, esi
call fcn.0040cc40
test byte [esi + 0x2c5], bl
jne 0x40c8a6
push 0xa0
call edi
test ah, 0x80
jne 0x40c61b
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
cmp edi, 0x11
mov ebp, dword [esp + 0x1c]
jne 0x40c5b9
mov al, byte [esi + 0x2c8]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40c533
push 0xa3
call edi
test ah, 0x80
je 0x40c533
push ebp
push 0xa3
mov ecx, esi
call fcn.0040cc40
test byte [esi + 0x2c7], bl
jne 0x40c8a6
push 0xa2
call edi
test ah, 0x80
je 0x40c8a6
mov edi, 0xa2
mov al, byte [esp + 0x18]
test al, al
jne case.0x40c574.22
lea eax, [edi - 0xc]
cmp eax, 0x21
ja case.0x40c574.22
xor ecx, ecx
mov cl, byte [eax + 0x40c8dc]
jmp dword [ecx*4 + 0x40c8b0]
mov al, byte [esi + 0x525]
test al, al
jne 0x40c59d
mov al, byte [esi + 0x526]
test al, al
jne 0x40c59d
mov al, byte [esi + 0x285]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x60
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
cmp edi, 0x12
jne 0x40c60f
mov al, byte [esi + 0x2ca]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov bl, 0x80
test bl, al
jne 0x40c5e9
push 0xa5
call edi
test ah, 0x80
je 0x40c5e9
push ebp
push 0xa5
mov ecx, esi
call fcn.0040cc40
test byte [esi + 0x2c9], bl
jne 0x40c8a6
push 0xa4
call edi
test ah, 0x80
je 0x40c8a6
mov edi, 0xa4
jmp 0x40c554
cmp edi, 0xa0
jne 0x40c554
pop edi
mov byte [esi + 0x525], 1
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c64b
mov al, byte [esi + 0x526]
test al, al
jne 0x40c64b
mov al, byte [esi + 0x286]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x61
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c689
mov al, byte [esi + 0x526]
test al, al
jne 0x40c689
mov al, byte [esi + 0x287]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x62
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c6c7
mov al, byte [esi + 0x526]
test al, al
jne 0x40c6c7
mov al, byte [esi + 0x288]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x63
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c705
mov al, byte [esi + 0x526]
test al, al
jne 0x40c705
mov al, byte [esi + 0x289]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x64
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c743
mov al, byte [esi + 0x526]
test al, al
jne 0x40c743
mov al, byte [esi + 0x28a]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x65
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c781
mov al, byte [esi + 0x526]
test al, al
jne 0x40c781
mov al, byte [esi + 0x28b]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x66
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c7bf
mov al, byte [esi + 0x526]
test al, al
jne 0x40c7bf
mov al, byte [esi + 0x28c]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x67
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c7f9
mov al, byte [esi + 0x526]
test al, al
jne 0x40c7f9
mov al, byte [esi + 0x28d]
test al, al
je case.0x40c574.22
push ebp
mov edi, 0x68
push edi
mov ecx, esi
mov byte [esi + 0x525], 1
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov al, byte [esi + 0x525]
test al, al
jne 0x40c833
mov al, byte [esi + 0x526]
test al, al
jne 0x40c833
mov al, byte [esi + 0x28e]
test al, al
je case.0x40c574.22
mov edi, 0x69
mov byte [esi + 0x525], 1
push ebp
push edi
mov ecx, esi
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov ecx, dword [0x4cfc00]
test ecx, ecx
mov eax, dword [esp + 0x14]
je 0x40c869
cmp dword [ecx], 0
je 0x40c869
mov byte [esp + 0x1c], 0
jmp 0x40c871
mov cl, byte [esp + 0x1c]
test cl, cl
jne 0x40c899
cmp eax, 0xf0
je 0x40c899
cmp eax, 0xf1
je 0x40c899
cmp eax, 0xf2
je 0x40c899
cmp eax, 0xf3
je 0x40c899
cmp eax, 0xf4
je 0x40c899
cmp eax, 0x13
jne 0x40c8a6
mov edx, dword [esp + 0x1c]
push edx
push eax
mov ecx, esi
call fcn.0040cc40
pop edi
pop esi
pop ebp
pop ebx
ret 0xc