Function at 0x180027890
Capabilities:
Log keystrokes via polling

Disassembly:
mov qword [rsp + 8], rbx
push rdi
sub rsp, 0x20
movsxd rbx, ecx
movzx edi, dl
cmp ebx, 0x41
jl 0x1800278ca
cmp ebx, 0x5a
jg 0x18002791e
mov ecx, 0x14
call qword [sym.imp.USER32.dll_GetKeyState]
and al, 1
cmp al, dil
jne 0x180027910
lea eax, [rbx + 0x20]
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
lea eax, [rbx - 0x30]
cmp eax, 9
ja 0x18002791e
test dil, dil
je 0x1800278f1
lea rdx, [0x180000000]
movzx eax, byte [rbx + rdx + 0xb5da0]
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
test r8b, r8b
je 0x180027910
lea rdx, [0x180000000]
movzx eax, byte [rbx + rdx + 0xb5d90]
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
movzx eax, bl
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
lea rdx, [0x180000000]
test dil, dil
je case.0x180027951.198
lea eax, [rbx - 0xba]
cmp eax, 0x28
ja case.0x180027951.198
cdqe
movzx eax, byte [rdx + rax + 0x27b84]
mov ecx, dword [rdx + rax*4 + 0x27b50]
add rcx, rdx
jmp rcx
mov al, 0xd1
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2a
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x3b
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x5f
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x3a
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x3f
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x5e
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xa1
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x26
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2f
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x3e
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
test r8b, r8b
je case.0x180027a07.59
lea eax, [rbx - 0x32]
cmp eax, 0x25
ja case.0x180027a07.59
cdqe
movzx eax, byte [rdx + rax + 0x27bd8]
mov ecx, dword [rdx + rax*4 + 0x27bb0]
add rcx, rdx
jmp rcx
mov al, 0x40
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x23
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x80
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x7e
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xbd
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x7c
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xb5
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xac
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
add ebx, 0xffffffe0
cmp ebx, 0xc2
ja case.0x180027a95.45
movsxd rax, ebx
movzx eax, byte [rdx + rax + 0x27c38]
mov ecx, dword [rdx + rax*4 + 0x27c00]
add rcx, rdx
jmp rcx
mov al, 0x20
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xf1
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2b
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2c
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2d
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x2e
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x27
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x60
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x5b
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x5c
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x5d
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0xe7
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov al, 0x3c
mov rbx, qword [rsp + 0x30]
add rsp, 0x20
pop rdi
ret
mov rbx, qword [rsp + 0x30]
xor al, al
add rsp, 0x20
pop rdi
ret