Function at 0x1000e590
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x24
mov eax, dword [0x100c50e4]
xor eax, esp
mov dword [esp + 0x20], eax
push ebx
push esi
push edi
mov edi, ecx
mov ecx, dword [ebp + 8]
lea eax, [ecx - 0x100]
cmp eax, 9
ja case.0x1000e5c2.259
movzx eax, byte [eax + 0x1000e9c0]
jmp dword [eax*4 + 0x1000e9ac]
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x12
mov byte [edi + 0x630], 0
call esi
mov edx, dword [ebp + 0x10]
mov ecx, dword [ebp + 0xc]
movsx ebx, ax
shr ebx, 0x1f
test bl, bl
je case.0x1000e601.13
test edx, 0x1000000
jne case.0x1000e601.13
lea eax, [ecx - 0xc]
cmp eax, 0x21
ja case.0x1000e601.13
movzx eax, byte [eax + 0x1000e9d4]
jmp dword [eax*4 + 0x1000e9cc]
push edx
push ecx
push dword [ebp + 8]
push dword [edi + 0xc4]
call dword [sym.imp.USER32.dll_DefWindowProcW]
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x20]
xor ecx, esp
call fcn.10083210
mov esp, ebp
pop ebp
ret 0xc
push 0x11
call esi
movsx esi, ax
push 0x10
shr esi, 0x1f
call dword [sym.imp.USER32.dll_GetKeyState]
movsx ecx, ax
shr ecx, 0x1f
movzx eax, bl
shl eax, 2
or ecx, eax
lea eax, [esi + esi]
or ecx, eax
mov dword [esp + 0x24], ecx
mov ecx, dword [ebp + 0xc]
lea eax, [ecx - 8]
cmp eax, 0xd5
ja case.0x1000e66e.10
movzx eax, byte [eax + 0x1000ea60]
jmp dword [eax*4 + 0x1000e9f8]
mov esi, 0x12c
jmp 0x1000e73b
mov esi, 0x12d
jmp 0x1000e73b
mov esi, 0x12e
jmp 0x1000e73b
mov esi, 0x12f
jmp 0x1000e73b
mov esi, 0x130
jmp 0x1000e73b
mov esi, 0x131
jmp 0x1000e73b
mov esi, 0x132
jmp 0x1000e73b
mov esi, 0x133
jmp 0x1000e73b
mov esi, 0x134
jmp 0x1000e73b
mov esi, 0x135
jmp 0x1000e73b
mov esi, 7
jmp 0x1000e73b
mov esi, 8
jmp 0x1000e73b
mov esi, 9
jmp 0x1000e73b
mov esi, 0xd
jmp 0x1000e73b
mov esi, 0x136
jmp 0x1000e73b
mov esi, 0x137
jmp 0x1000e73b
mov esi, 0x138
jmp 0x1000e73b
mov esi, 0x139
jmp 0x1000e73b
mov esi, 0x13a
jmp 0x1000e73b
mov esi, 0x13b
jmp 0x1000e73b
mov esi, 0x2f
jmp 0x1000e73b
mov esi, 0x60
jmp 0x1000e73b
mov esi, 0x5b
jmp 0x1000e73b
mov esi, 0x5c
jmp 0x1000e73b
mov esi, 0x5d
jmp 0x1000e73b
mov esi, ecx
mov dword [edi + 0x3b4], 0x989680
cmp byte [edi + 0x3b8], 0
je 0x1000e779
cmp dword [edi + 0x3b0], 0x989680
jge 0x1000e779
movups xmm0, xmmword [edi + 0x3c0]
sub esp, 0x10
mov byte [edi + 0x3b8], 0
mov eax, esp
mov ecx, edi
push 0
movups xmmword [eax], xmm0
call fcn.1004b2e0
mov eax, dword [edi]
mov ecx, edi
push 3
call dword [eax + 0xcc]
mov eax, dword [esp + 0x24]
lea ecx, [edi + 0x35c]
mov dword [esp + 0x14], eax
lea eax, [esp + 0x10]
push eax
lea eax, [esp + 0x1c]
mov dword [esp + 0x14], esi
push eax
call fcn.1007ada0
mov eax, dword [esp + 0x20]
mov edx, dword [esp + 0x24]
cmp byte [eax + 0xd], 0
jne 0x1000e7f0
cmp esi, dword [eax + 0x10]
jne 0x1000e7bc
cmp edx, dword [eax + 0x14]
setl cl
test cl, cl
jne 0x1000e7f0
cmp eax, dword [edi + 0x35c]
je 0x1000e7f0
mov ecx, dword [eax + 0x18]
test ecx, ecx
je 0x1000e7f0
lea ebx, [edi + 0x630]
test ebx, ebx
je 0x1000e7df
mov byte [ebx], 1
mov eax, dword [edi]
push 0
push 0
push ecx
mov ecx, edi
call dword [eax + 0x10c]
jmp 0x1000e809
lea ebx, [edi + 0x630]
test ebx, ebx
je 0x1000e7fd
mov byte [ebx], 0
mov eax, dword [edi]
mov ecx, edi
push edx
push esi
call dword [eax + 0xa0]
test eax, eax
jne case.0x1000e5c2.259
cmp byte [ebx], al
jne case.0x1000e5c2.259
push dword [ebp + 0x10]
push dword [ebp + 0xc]
push dword [ebp + 8]
push dword [edi + 0xc4]
call dword [sym.imp.USER32.dll_DefWindowProcW]
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x20]
xor ecx, esp
call fcn.10083210
mov esp, ebp
pop ebp
ret 0xc
push dword [ebp + 0x10]
push dword [ebp + 0xc]
push ecx
push dword [edi + 0xc4]
call dword [sym.imp.USER32.dll_DefWindowProcW]
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x20]
xor ecx, esp
call fcn.10083210
mov esp, ebp
pop ebp
ret 0xc
cmp dword [edi + 0x638], 0
je 0x1000e88a
cmp byte [edi + 0x63c], 0
jne 0x1000e88a
push 0
call dword [sym.imp.USER32.dll_SetCursor]
mov byte [edi + 0x63c], 1
mov esi, dword [ebp + 0xc]
cmp esi, 0x80
jae 0x1000e8ab
push esi
call fcn.100905f0
add esp, 4
test eax, eax
je 0x1000e8ab
cmp byte [edi + 0x630], 0
jne case.0x1000e5c2.259
mov word [esp + 0x24], si
mov ebx, 0x3ff
mov dword [esp + 0x26], 0
mov ecx, 1
mov edx, dword [esp + 0x24]
lea eax, [edx + 0x2800]
cmp ax, bx
ja 0x1000e8da
mov word [edi + 0x632], si
jmp case.0x1000e5c2.259
lea eax, [edx + 0x2400]
cmp ax, bx
ja 0x1000e904
mov ax, word [edi + 0x632]
mov ecx, 2
mov word [esp + 0x24], ax
xor eax, eax
mov word [esp + 0x26], si
mov word [edi + 0x632], ax
lea eax, [esp + 0x24]
push ecx
push eax
push 0
mov ecx, edi
call fcn.1000cb00
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x20]
xor ecx, esp
call fcn.10083210
mov esp, ebp
pop ebp
ret 0xc
mov eax, dword [ebp + 0xc]
cmp eax, 0xffff
je 0x1000e993
cmp byte [edi + 0x630], 0
jne 0x1000e993
mov dword [esp + 0x26], 0
movzx ecx, ax
cmp eax, 0x10000
jae 0x1000e960
mov eax, 1
mov word [esp + 0x24], cx
lea ecx, [esp + 0x24]
push eax
push ecx
jmp 0x1000e90a
add eax, 0xffff0000
and ecx, 0x3ff
shr eax, 0xa
sub eax, 0x2800
sub ecx, 0x2400
mov word [esp + 0x24], ax
mov eax, 2
mov word [esp + 0x26], cx
lea ecx, [esp + 0x24]
push eax
push ecx
jmp 0x1000e90a
mov ecx, dword [esp + 0x2c]
mov eax, 1
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.10083210
mov esp, ebp
pop ebp
ret 0xc