Function at 0x7f8fc480
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x5c
push ebx
push esi
push edi
push ebp
mov ebp, dword [esp + 0x70]
mov eax, dword [ebp + 0x74]
test al, 2
jne 0x7f8fc9a7
mov bx, word [esp + 0x74]
cmp bx, 0x1b
je 0x7f8fc9a7
cmp bx, 8
je 0x7f8fc9a7
cmp bx, 0x7f
je 0x7f8fc9a7
push 0x10
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
xor esi, esi
call edi
mov si, ax
push 0x11
and esi, 0x8000
call edi
shr esi, 0xd
xor ecx, ecx
mov cx, ax
mov eax, dword [ebp + 0x74]
and ecx, 0x8000
shr ecx, 0xc
or si, cx
and eax, 4
je 0x7f8fc506
cmp bx, 9
jne 0x7f8fc506
cmp si, 8
je 0x7f8fc506
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
mov ecx, dword [ebp + 0x60]
test ch, 8
je 0x7f8fc518
cmp bx, 3
jne 0x7f8fc83e
mov edi, ebx
and edi, 0xffff
cmp edi, 9
je 0x7f8fc58a
cmp edi, 0xa
je 0x7f8fc5a0
cmp edi, 0xd
je 0x7f8fc5a0
mov eax, dword [ebp + 0xc]
mov ecx, dword [ebp + 0x10]
mov esi, ecx
mov dword [esp + 0x24], eax
sub esi, eax
mov dword [esp + 0x30], ecx
cmp bx, 0x20
mov byte [esp + 0x14], bl
jae 0x7f8fc555
cmp bx, 9
jne 0x7f8fc963
mov eax, dword [ebp + 0x4c]
test eax, eax
je 0x7f8fc56b
mov dword [ebp + 0x4c], 0
push 0
call dword [sym.imp.USER32.dll_SetCursor]
mov eax, dword [ebp + 0x74]
test ah, 2
je 0x7f8fc858
test esi, esi
jne 0x7f8fc86d
push ebp
call fcn.7f8fe850
jmp 0x7f8fc86b
test eax, eax
je 0x7f8fc52f
cmp si, 8
je 0x7f8fc52f
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
test eax, eax
je 0x7f8fc5bb
cmp si, 8
je 0x7f8fc5bb
test ch, 0x10
jne 0x7f8fc5bb
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
test cl, 4
je 0x7f8fc83e
mov eax, dword [ebp + 0xe0]
mov ecx, dword [ebp + 0xe4]
add eax, 2
cmp eax, ecx
jle 0x7f8fc5ee
push 0x501
push ebp
call fcn.7f8ff980
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
mov eax, dword [ebp + 0x4c]
test eax, eax
je 0x7f8fc604
mov dword [ebp + 0x4c], 0
push 0
call dword [sym.imp.USER32.dll_SetCursor]
mov eax, dword [esp + 0x78]
push eax
push 0xd
push 0x102
push ebp
call fcn.7f8ffd20
test eax, eax
je 0x7f8fc626
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
mov esi, 0xffffffff
push 1
lea eax, [esp + 0x28]
mov ecx, dword [ebp + 0x10]
mov dword [esp + 0x14], esi
push eax
push ecx
push ebp
call fcn.7f8f3dd0
mov edx, dword [ebp + 0x12c]
mov ecx, dword [esp + 0x24]
lea eax, [ecx + ecx*2]
mov ecx, dword [edx + eax*4 + 4]
mov eax, dword [ebp + 0x440]
mov edx, ecx
lea ecx, [ecx + ecx*4]
shl ecx, 3
sub ecx, edx
cmp word [eax + ecx*4 + 8], 1
jne 0x7f8fc7fc
mov eax, dword [ebp + 0x78]
lea ecx, [esp + 0x2c]
or eax, 0x100
push ecx
push 0
mov dword [ebp + 0x78], eax
mov eax, dword [ebp + 0x10]
push eax
push eax
push ebp
call fcn.7f904830
mov ecx, dword [ebp + 0x78]
push 0
and ecx, 0xfffffeff
lea edx, [esp + 0x20]
mov eax, dword [esp + 0x30]
push edx
add eax, esi
mov dword [ebp + 0x78], ecx
push eax
push ebp
call fcn.7f8f3dd0
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0x10]
cmp eax, edx
jne 0x7f8fc722
mov eax, dword [ebp + 0x450]
mov ecx, dword [esp + 0x1c]
mov dword [esp + 0x10], eax
mov eax, dword [ebp + 0x118]
lea edx, [ecx + ecx*2]
mov ebx, dword [esp + 0x10]
mov eax, dword [eax + edx*4 + 4]
mov dword [ebp + 0x450], eax
cmp ebx, eax
jne 0x7f8fc6e6
mov dword [esp + 0x10], esi
jmp 0x7f8fc7fc
push 0x7f91f040
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov eax, dword [0x7f91f01c]
mov ecx, dword [ebp + 0x450]
shl ecx, 2
nop
mov eax, dword [eax + 8]
lea edx, [ecx + ecx*2]
lea ebx, [edx + edx*4]
add eax, ebx
push eax
call dword [sym.imp.KERNEL32.dll_InterlockedIncrement]
push 0x7f91f040
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
jmp 0x7f8fc7fc
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x20]
mov ebx, dword [esp + 0x2c]
push 0
sub edx, ebx
mov dword [esp + 0x18], eax
inc edx
lea eax, [esp + 0x18]
mov dword [esp + 0x1c], ecx
push edx
push eax
push ebp
call fcn.7f8f3e60
mov ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x14]
cmp eax, ecx
je 0x7f8fc7fc
mov ecx, dword [ebp + 0x118]
lea ebx, [eax + eax*2]
mov eax, dword [esp + 0x1c]
nop
mov edi, dword [ecx + ebx*4 + 4]
lea edx, [eax + eax*2]
cmp edi, dword [ecx + edx*4 + 4]
je 0x7f8fc7fc
mov ebx, dword [ebp + 0x10]
mov eax, dword [ebp + 0xc]
sub ebx, eax
push 0x7f91f040
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov ecx, dword [esp + 0x1c]
mov eax, dword [ebp + 0x118]
lea edx, [ecx + ecx*2]
mov ecx, dword [0x7f91f01c]
mov esi, dword [eax + edx*4 + 4]
mov edi, dword [ecx + 8]
shl esi, 2
mov ecx, 0xf
push 0x7f91f040
lea eax, [esi + esi*2]
lea esi, [eax + eax*4]
add esi, edi
lea edi, [esp + 0x34]
rep movsd dword es:[edi], dword [esi]
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov eax, dword [ebp + 0x78]
push ebx
or eax, 0x4000000
push 2
push ebp
mov dword [ebp + 0x78], eax
mov dword [esp + 0x3c], 0x3c
mov dword [esp + 0x40], 0xffffffff
call fcn.7f9005f0
lea eax, [esp + 0x30]
push 0
push 0
mov ecx, dword [ebp + 0xc]
push eax
push ebx
push ecx
push ebp
call fcn.7f8f6320
push 0x7f8f1514
push 2
push 0xffffffffffffffff
push ebp
call fcn.7f8fe8b0
mov eax, dword [ebp + 0x78]
mov ecx, dword [esp + 0x10]
and eax, 0xfbffffff
test ecx, ecx
mov dword [ebp + 0x78], eax
jl 0x7f8fc963
mov eax, dword [ebp + 0x450]
push eax
push ebp
call fcn.7f8f4a90
mov eax, dword [esp + 0x10]
mov dword [ebp + 0x450], eax
jmp 0x7f8fc963
cmp bx, 0x20
jb 0x7f8fc84c
push 0
call dword [sym.imp.USER32.dll_MessageBeep]
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
test ah, 1
je 0x7f8fc86d
mov al, byte [esp + 0x14]
cmp al, 9
je 0x7f8fc86d
push ebp
call fcn.7f8ff2a0
mov esi, eax
mov ecx, dword [ebp + 0xe4]
mov eax, dword [ebp + 0xe0]
sub eax, esi
inc eax
cmp eax, ecx
jg 0x7f8fc990
mov eax, dword [esp + 0x24]
add eax, 3
cmp eax, ecx
jg 0x7f8fc990
mov eax, dword [esp + 0x78]
push eax
push edi
push 0x102
push ebp
call fcn.7f8ffd20
test eax, eax
je 0x7f8fc8b4
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
mov eax, dword [ebp + 0xc]
mov ecx, dword [esp + 0x24]
cmp eax, ecx
jne 0x7f8fc8ca
mov ecx, dword [esp + 0x30]
mov edx, dword [ebp + 0x10]
cmp edx, ecx
je 0x7f8fc8cf
mov esi, dword [ebp + 0x10]
sub esi, eax
mov eax, dword [ebp + 0x78]
mov ecx, dword [ebp + 0x594]
or eax, 0x200000
inc ecx
lea edx, [esp + 0x14]
push 3
push 0
mov dword [ebp + 0x78], eax
push 1
mov dword [ebp + 0x594], ecx
push edx
push ebp
call fcn.7f917dd0
mov ecx, dword [ebp + 0x78]
and eax, 0x10
shr eax, 4
shl eax, 0x16
xor eax, ecx
and eax, 0x400000
xor eax, ecx
xor ecx, ecx
mov dword [ebp + 0x78], eax
cmp byte [esp + 0x14], 9
sete cl
shl ecx, 0x17
xor ecx, eax
and ecx, 0x800000
xor ecx, eax
lea eax, [esp + 0x14]
push eax
mov dword [ebp + 0x78], ecx
push 1
push esi
push ebp
call fcn.7f8fe8b0
mov ecx, dword [ebp + 0x78]
mov eax, dword [ebp + 0x594]
and ecx, 0xffdfffff
cmp eax, 0xa
mov dword [ebp + 0x78], ecx
jb 0x7f8fc963
mov dword [ebp + 0x594], 0
mov eax, dword [ebp]
push eax
call dword [sym.imp.USER32.dll_UpdateWindow]
mov eax, dword [esp + 0x78]
shr eax, 0x10
test ah, 0x40
je 0x7f8fc979
mov eax, dword [ebp]
push eax
call dword [sym.imp.USER32.dll_UpdateWindow]
mov eax, dword [ebp + 0x74]
and eax, 0xfffffeff
mov dword [ebp + 0x74], eax
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
push 0x501
push ebp
call fcn.7f8ff980
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x5c
ret 0xc