Function at 0x40c710
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0xc
mov eax, dword [esp + 0x10]
push esi
push eax
call dword [sym.imp.USER32.dll_VkKeyScanA]
mov esi, eax
shr eax, 8
cmp al, 0xff
mov dword [esp + 0xc], esi
jne 0x40c733
xor eax, eax
pop esi
add esp, 0xc
ret
test al, 1
push ebp
mov ebp, dword [esp + 0x1c]
je 0x40c73f
or ebp, 4
test al, 2
je 0x40c746
or ebp, 2
test al, 4
je 0x40c74d
or ebp, 1
mov eax, dword [0x45d800]
test eax, eax
je 0x40c761
mov cl, byte [0x45d6fc]
jmp 0x40c9b3
mov al, byte [0x45f111]
push ebx
xor bl, bl
test al, al
mov byte [esp + 0xf], bl
jne 0x40c81a
mov al, byte [0x45f112]
test al, al
jne 0x40c81a
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0xa0
call esi
test ah, ah
jns 0x40c799
mov bl, 0x10
mov byte [esp + 0xf], bl
push 0xa1
call esi
test ah, ah
jns 0x40c7ab
or bl, 0x20
mov byte [esp + 0xf], bl
push 0xa2
call esi
test ah, ah
jns 0x40c7bd
or bl, 1
mov byte [esp + 0xf], bl
push 0xa3
call esi
test ah, ah
jns 0x40c7cf
or bl, 2
mov byte [esp + 0xf], bl
push 0xa4
call esi
test ah, ah
jns 0x40c7e1
or bl, 4
mov byte [esp + 0xf], bl
push 0xa5
call esi
test ah, ah
jns 0x40c7f3
or bl, 8
mov byte [esp + 0xf], bl
push 0x5b
call esi
test ah, ah
jns 0x40c802
or bl, 0x40
mov byte [esp + 0xf], bl
push 0x5c
call esi
test ah, ah
jns 0x40c8a9
or bl, 0x80
mov byte [esp + 0xf], bl
jmp 0x40c8a9
mov esi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push edi
push 0x10
call esi
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
movsx edx, ax
test edx, edx
js 0x40c83a
push 0x10
call edi
test ah, ah
jns 0x40c840
mov bl, 0x10
mov byte [esp + 0x13], bl
push 0x11
call esi
movsx eax, ax
test eax, eax
js 0x40c853
push 0x11
call edi
test ah, ah
jns 0x40c85a
or bl, 1
mov byte [esp + 0x13], bl
push 0x12
call esi
movsx ecx, ax
test ecx, ecx
js 0x40c86d
push 0x12
call edi
test ah, ah
jns 0x40c874
or bl, 4
mov byte [esp + 0x13], bl
push 0x5b
call esi
movsx edx, ax
test edx, edx
js 0x40c887
push 0x5b
call edi
test ah, ah
jns 0x40c88e
or bl, 0x40
mov byte [esp + 0x13], bl
push 0x5c
call esi
movsx eax, ax
test eax, eax
js 0x40c8a1
push 0x5c
call edi
test ah, ah
jns 0x40c8a8
or bl, 0x80
mov byte [esp + 0x13], bl
pop edi
mov eax, dword [0x45d800]
test eax, eax
je 0x40c9aa
mov al, byte [0x45d6fc]
mov cl, bl
not cl
and cl, al
je 0x40c9aa
mov bl, byte [0x45d6fc]
mov al, byte [0x45d6fe]
not cl
and bl, cl
mov byte [0x45d6fc], bl
and al, cl
mov dl, byte [0x45d6fd]
mov bl, al
shl bl, 7
mov byte [0x45d7a2], bl
mov bl, al
and bl, 0xfe
shl bl, 6
mov byte [0x45d7a3], bl
mov bl, al
and bl, 0xfc
shl bl, 5
mov byte [0x45d7a4], bl
mov bl, al
and bl, 0xf8
shl bl, 4
and dl, cl
mov byte [0x45d7a5], bl
mov bl, al
and bl, 0xc0
mov byte [0x45d6fd], dl
shl bl, 1
mov cl, al
mov dl, al
and cl, 0xf0
and dl, 0xe0
mov byte [0x45d75b], bl
shl cl, 3
mov bl, 0x80
mov byte [0x45d6fe], al
shl dl, 2
and al, bl
test cl, cl
mov byte [0x45d7a0], cl
mov byte [0x45d7a1], dl
mov byte [0x45d75c], al
jne 0x40c966
test dl, dl
mov byte [0x45d710], cl
je 0x40c96c
mov byte [0x45d710], bl
mov al, byte [0x45d7a2]
test al, al
jne 0x40c985
mov al, byte [0x45d7a3]
test al, al
mov byte [0x45d711], 0
je 0x40c98b
mov byte [0x45d711], bl
mov al, byte [0x45d7a4]
test al, al
jne 0x40c9a4
mov al, byte [0x45d7a5]
test al, al
mov byte [0x45d712], 0
je 0x40c9aa
mov byte [0x45d712], bl
mov cl, byte [esp + 0xf]
mov esi, dword [esp + 0x14]
pop ebx
mov byte [esp + 0xc], cl
mov edx, dword [esp + 0xc]
push 0xffc3d44f
push edx
push ebp
call fcn.0040c080
mov eax, dword [esp + 0x30]
mov ecx, dword [esp + 0x2c]
push 0xffc3d44d
push 1
push eax
push 0
push esi
push ecx
call fcn.0040aeb0
add esp, 0x24
pop ebp
mov eax, 1
pop esi
add esp, 0xc
ret