Function at 0x408d40
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 8
push ebx
mov ebx, dword [sym.imp.USER32.dll_GetKeyState]
push esi
push edi
xor edi, edi
mov esi, ecx
push 0x10
mov dword [esp + 0x10], edi
mov dword [esp + 0x14], edi
call ebx
mov ecx, dword [esp + 0x1c]
and eax, 0x8000
neg eax
sbb eax, eax
and al, 0xee
add eax, 0x14
cmp ecx, 0x6b
mov dword [0x41b43c], eax
jne 0x408da0
fld dword [esi + 0x9c]
fcomp dword [0x4143ec]
fnstsw ax
test ah, 1
je 0x4091c5
fld dword [esi + 0x9c]
fadd dword [0x4143f0]
jmp 0x409034
cmp ecx, 0x31
jne 0x408db4
mov dword [esi + 0x9c], 0x3f800000
jmp 0x40903a
cmp ecx, 0x51
jne 0x408dc8
mov dword [esi + 0x9c], 0x3faa3d71
jmp 0x40903a
cmp ecx, 0x32
jne 0x408ddc
mov dword [esi + 0x9c], 0x40000000
jmp 0x40903a
cmp ecx, 0x57
jne 0x408df0
mov dword [esi + 0x9c], 0x3fd47ae1
jmp 0x40903a
cmp ecx, 0x33
jne 0x408e04
mov dword [esi + 0x9c], 0x40400000
jmp 0x40903a
cmp ecx, 0x34
jne 0x408e18
mov dword [esi + 0x9c], 0x40800000
jmp 0x40903a
cmp ecx, 0x35
jne 0x408e2c
mov dword [esi + 0x9c], 0x40a00000
jmp 0x40903a
cmp ecx, 0x36
jne 0x408e40
mov dword [esi + 0x9c], 0x40c00000
jmp 0x40903a
cmp ecx, 0x37
jne 0x408e54
mov dword [esi + 0x9c], 0x40e00000
jmp 0x40903a
cmp ecx, 0x38
jne 0x408e68
mov dword [esi + 0x9c], 0x41000000
jmp 0x40903a
cmp ecx, 0x39
jne 0x408e7c
mov dword [esi + 0x9c], 0x41100000
jmp 0x40903a
cmp ecx, 0x50
jne 0x408e99
push edi
mov ecx, esi
call fcn.0040a6d0
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x43
jne 0x408eb7
push 1
mov ecx, esi
call fcn.0040a6d0
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x42
jne 0x408ed4
push edi
mov ecx, esi
call fcn.0040aba0
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x54
jne 0x408ef0
mov ecx, esi
call fcn.0040a750
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x46
je 0x4091b4
cmp ecx, 0x7a
je 0x4091b4
cmp ecx, 0x45
jne 0x408f20
mov ecx, dword [esi + 0x68]
xor eax, eax
cmp ecx, edi
mov ecx, esi
sete al
mov dword [esi + 0x68], eax
call fcn.00409920
jmp 0x4091bb
cmp ecx, 0x70
jne 0x408f4f
mov ecx, esi
call fcn.00409c30
mov ecx, dword [esi + 0x70]
push edi
push 0x8008
push 0x111
push ecx
call dword [sym.imp.USER32.dll_SendMessageA]
pop edi
pop esi
mov eax, 1
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x71
jne 0x408f6c
push edi
mov ecx, esi
call fcn.00409a40
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x72
jne 0x408f8a
push 1
mov ecx, esi
call fcn.00409a40
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x73
jne 0x408fa8
push 2
mov ecx, esi
call fcn.00409a40
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x58
jne 0x408fc4
mov ecx, esi
call fcn.00409a10
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x48
jne 0x408ff5
mov ecx, esi
call fcn.00409c30
mov edx, dword [esi + 0x70]
push edi
push 0x8009
push 0x111
push edx
call dword [sym.imp.USER32.dll_SendMessageA]
mov edi, 1
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x6d
jne 0x40905d
fld dword [esi + 0x9c]
fcomp dword [0x4143f4]
fnstsw ax
test ah, 0x41
jne 0x4091c5
fld dword [esi + 0x9c]
fcomp dword [0x4143f0]
fnstsw ax
test ah, 0x41
jne 0x4091c5
fld dword [esi + 0x9c]
fsub dword [0x4143f0]
fstp dword [esi + 0x9c]
mov eax, dword [esi + 0x9c]
mov ecx, esi
push eax
mov edi, 1
call fcn.00408c90
call fcn.004042a0
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x1b
jne 0x409094
mov ebx, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push 0x5b
call ebx
test ah, 0x80
jne 0x4091c5
push 0x11
call ebx
test ah, 0x80
jne 0x4091c5
mov ecx, esi
call fcn.00409c30
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x25
jne 0x4090bc
mov ecx, dword [esi + 0x8c]
mov edx, dword [esp + 0xc]
sub ecx, eax
mov dword [esi + 0x8c], ecx
mov ecx, dword [0x41b43c]
sub edx, ecx
mov dword [esp + 0xc], edx
jmp 0x409184
cmp ecx, 0x27
jne 0x40910f
mov ecx, dword [esi + 0x8c]
add ecx, eax
mov eax, dword [esp + 0xc]
mov dword [esi + 0x8c], ecx
mov edx, dword [0x41b43c]
add eax, edx
mov dword [esp + 0xc], eax
lea eax, [esp + 0xc]
push eax
push 0x11
call ebx
mov ecx, dword [esi + 0x90]
mov edx, dword [esi + 0x8c]
shr eax, 0xf
and eax, 1
push eax
push ecx
push edx
mov ecx, esi
call fcn.00408b00
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x26
jne 0x409161
mov edx, dword [esi + 0x90]
mov ecx, dword [esp + 0x10]
add edx, eax
mov dword [esi + 0x90], edx
mov eax, dword [0x41b43c]
add ecx, eax
mov dword [esp + 0x10], ecx
lea ecx, [esp + 0xc]
push ecx
push 0x11
call ebx
mov edx, dword [esi + 0x90]
mov ecx, esi
shr eax, 0xf
and eax, 1
push eax
mov eax, dword [esi + 0x8c]
push edx
push eax
call fcn.00408b00
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
cmp ecx, 0x28
jne 0x4091c5
mov ecx, dword [esi + 0x90]
mov edx, dword [esp + 0x10]
sub ecx, eax
mov dword [esi + 0x90], ecx
mov ecx, dword [0x41b43c]
sub edx, ecx
mov dword [esp + 0x10], edx
lea edx, [esp + 0xc]
push edx
push 0x11
call ebx
mov ecx, dword [esi + 0x8c]
shr eax, 0xf
and eax, 1
push eax
mov eax, dword [esi + 0x90]
push eax
push ecx
mov ecx, esi
call fcn.00408b00
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc
mov ecx, esi
call fcn.00409970
mov edi, 1
call fcn.004042a0
mov eax, edi
pop edi
pop esi
pop ebx
add esp, 8
ret 0xc