Function at 0x2f8aa31f5
Capabilities:
Log keystrokes via polling

Disassembly:
push rbp
mov rbp, rsp
add rsp, 0xffffffffffffff80
mov ecx, 0
mov rax, qword [sym.imp.USER32.dll_GetKeyboardState]
call rax
mov eax, dword [0x2f8ab4058]
sub ax, 0x2842
mov word [0x2f8ab4052], ax
mov r9d, 0
mov r8d, 0
mov edx, 0
mov ecx, 0x7b
mov rax, qword [sym.imp.USER32.dll_RedrawWindow]
call rax
mov rax, qword [0x2f8ab53e0]
mov eax, dword [rax]
mov dword [rbp - 0x14], eax
movzx eax, word [0x2f8ab4052]
or eax, 0x13
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405d]
or eax, 0xfffffff7
mov byte [0x2f8ab405d], al
mov ecx, 0
mov rax, qword [sym.imp.USER32.dll_GetKeyboardState]
call rax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
and eax, 0x75276d3a
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
and eax, 0x2f
mov byte [0x2f8ab405c], al
mov edx, 0
mov ecx, 0x3b
mov rax, qword [sym.imp.USER32.dll_GetSystemMenu]
call rax
movzx eax, byte [0x2f8ab405c]
sub eax, 0x6b
mov byte [0x2f8ab4050], al
mov rax, qword [0x2f8ab54f0]
mov eax, dword [rax]
mov eax, eax
mov qword [rbp - 0x40], rax
movzx eax, word [0x2f8ab4054]
movzx eax, ax
sub eax, 0x4f2ddd1d
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4052]
and ax, 0xb159
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
add eax, 0x541e50c
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
movzx eax, ax
imul eax, eax, 0xca27227d
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab4050]
and eax, 0x6c
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4052]
xor eax, 0xffffffc9
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
add eax, 0x22b6dfe7
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
xor eax, 0x74
mov byte [0x2f8ab405c], al
mov dword [rbp - 0x18], 0
movzx eax, byte [0x2f8ab405d]
movzx eax, al
xor ax, 0xae4f
mov word [0x2f8ab4052], ax
mov r9d, 0
mov r8d, 0
mov edx, 0
mov ecx, 0x1a
mov rax, qword [sym.imp.USER32.dll_RedrawWindow]
call rax
mov eax, dword [0x2f8ab4058]
sub ax, 0x7230
mov word [0x2f8ab4052], ax
mov byte [0x2f8ab405c], 0xff
movzx eax, byte [0x2f8ab405c]
and eax, 0xffffffc9
mov byte [0x2f8ab405d], al
mov qword [rbp - 0x48], 0
movzx eax, byte [0x2f8ab4050]
and eax, 0xfffffffd
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
sub eax, 0x25
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
xor eax, 0x3c
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
and eax, 0xffffff97
mov byte [0x2f8ab405d], al
movzx eax, word [0x2f8ab4052]
movzx eax, ax
and eax, 0x3c155c0f
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
sub ax, 0x1a81
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
and eax, 0xffffff8e
mov byte [0x2f8ab405c], al
mov eax, dword [0x2f8ab4058]
sub eax, 0x6bd6ebd7
mov dword [0x2f8ab4058], eax
lea rdx, [rbp - 0x40]
lea rax, [rbp - 0x48]
mov dword [rsp + 0x28], 0x40
mov dword [rsp + 0x20], 0x3000
mov r9, rdx
mov r8d, 0
mov rdx, rax
mov rcx, 0xffffffffffffffff
call fcn.2f8aa98fc
mov dword [rbp - 0x1c], eax
mov rcx, qword [rbp - 0x40]
mov rax, qword [0x2f8ab5500]
mov rdx, qword [rax]
mov rax, qword [rbp - 0x48]
mov qword [rsp + 0x20], 0
mov r9, rcx
mov r8, rdx
mov rdx, rax
mov rcx, 0xffffffffffffffff
call fcn.2f8aaf160
mov dword [rbp - 0x1c], eax
mov eax, dword [rbp - 0x14]
mov ecx, eax
call fcn.2f8aa54f8
movzx eax, byte [0x2f8ab405c]
add eax, 0xe
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
add eax, 0x2b
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
imul ax, ax, 0xa333
mov word [0x2f8ab4054], ax
mov r9d, 0
mov r8d, 0
mov edx, 0
mov ecx, 0x9f
mov rax, qword [sym.imp.USER32.dll_RedrawWindow]
call rax
mov dword [rbp - 4], 2
movzx eax, word [0x2f8ab4054]
xor ax, 0x8f0a
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab4050]
mov edx, 0x2b
imul eax, edx
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
xor eax, 0x3a
mov byte [0x2f8ab4050], al
mov dword [rbp - 8], 1
movzx eax, byte [0x2f8ab405d]
movzx eax, al
sub eax, 0xd58bd24
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab4050]
sub eax, 0x5b
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
add eax, 0x63
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
mov edx, 0x31
imul eax, edx
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
add ax, 0x3af7
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
and eax, 0x70
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4052]
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
or eax, 0xf859dd13
mov dword [0x2f8ab4058], eax
mov rax, qword [rbp - 0x48]
mov qword [rbp - 0x28], rax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xb37e
mov word [0x2f8ab4052], ax
movzx edx, byte [0x2f8ab405d]
mov eax, 0
sub eax, edx
shl eax, 4
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
or eax, 4
mov byte [0x2f8ab405d], al
mov eax, dword [0x2f8ab4058]
or ax, 0x2015
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
xor eax, 0x32
mov byte [0x2f8ab4050], al
jmp 0x2f8aa4368
movzx eax, word [0x2f8ab4052]
xor eax, 0xf
mov byte [0x2f8ab405d], al
mov eax, dword [0x2f8ab4058]
xor ax, 0xce56
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
add eax, 0x20998f64
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
add ax, 0x3b07
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab4050]
mov edx, 0xffffffaa
imul eax, edx
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405c]
add eax, 0x19
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
xor ax, 0xd943
mov word [0x2f8ab4052], ax
mov edx, 0
mov ecx, 0xf5
mov rax, qword [sym.imp.USER32.dll_ReleaseDC]
call rax
movzx eax, word [0x2f8ab4054]
xor ax, 0x5736
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
mov ecx, eax
shl eax, 7
mov edx, eax
mov eax, ecx
sub eax, edx
mov byte [0x2f8ab405c], al
call fcn.2f8aaf897
movzx eax, al
mov dword [rbp - 0x2c], eax
movzx eax, word [0x2f8ab4052]
xor eax, 0xb
mov byte [0x2f8ab405c], al
mov byte [0x2f8ab405c], 0
movzx eax, byte [0x2f8ab4050]
movzx eax, al
or ax, 0x9391
mov word [0x2f8ab4054], ax
call fcn.2f8aaf897
movzx eax, al
mov dword [rbp - 0x30], eax
movzx eax, byte [0x2f8ab4050]
movzx eax, al
xor ax, 0xd1b6
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
or eax, 0xb4a2fcb7
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
or eax, 0x51
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xcc0d
mov word [0x2f8ab4054], ax
mov eax, dword [0x2f8ab4058]
imul ax, ax, 0x43f9
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
xor eax, 0xffffffd3
mov byte [0x2f8ab4050], al
mov dword [rbp - 0xc], 0
jmp 0x2f8aa3bec
movzx eax, word [0x2f8ab4054]
or ax, 0xa986
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
sub eax, 0x3c
mov byte [0x2f8ab405c], al
mov eax, dword [0x2f8ab4058]
sub eax, 0x53
mov byte [0x2f8ab4050], al
mov eax, dword [0x2f8ab4058]
sub eax, 0x4c
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
imul ax, ax, 0x7f32
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405d]
xor eax, 0x6e
mov byte [0x2f8ab405c], al
mov eax, dword [0x2f8ab4058]
xor ax, 0x716d
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab4050]
mov edx, 0xffffffb9
imul eax, edx
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4052]
add eax, 0xd
mov byte [0x2f8ab4050], al
mov edx, dword [rbp - 4]
mov rax, qword [0x2f8ab54f0]
mov eax, dword [rax]
cmp edx, eax
jb 0x2f8aa3905
mov eax, dword [0x2f8ab4058]
and eax, 0xffffffe6
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
or ax, 0x7aff
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405d]
xor eax, 0xffffffcb
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xc356
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
or eax, 0xffffffad
mov byte [0x2f8ab405d], al
mov edx, 0
mov ecx, 0x70
mov rax, qword [sym.imp.USER32.dll_GetIconInfo]
call rax
movzx eax, byte [0x2f8ab4050]
or eax, 0xe
mov byte [0x2f8ab405c], al
jmp 0x2f8aa3bf8
movzx eax, byte [0x2f8ab405d]
xor eax, 0x3c
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
xor eax, 0xffffffe7
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405d]
mov edx, 0x65
imul eax, edx
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
xor eax, 0xffffffe4
mov byte [0x2f8ab4050], al
mov eax, dword [rbp - 4]
movsxd rdx, eax
mov rax, qword [rbp - 0x28]
add rax, rdx
mov edx, dword [rbp - 8]
movsxd rcx, edx
mov rdx, qword [rbp - 0x28]
add rdx, rcx
movzx eax, byte [rax]
mov byte [rdx], al
mov eax, dword [0x2f8ab4058]
xor ax, 0xbeb5
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405d]
or eax, 0x3f
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405c]
and eax, 4
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
mov ecx, eax
lea edx, [rax*8]
mov eax, ecx
sub eax, edx
mov byte [0x2f8ab405c], al
cmp dword [rbp - 0x18], 0
jne 0x2f8aa3add
movzx eax, word [0x2f8ab4054]
and ax, 0x9e95
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
mov edx, 0x7b
imul eax, edx
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
imul ax, ax, 0x758b
mov word [0x2f8ab4052], ax
movzx eax, word [0x2f8ab4052]
movzx eax, ax
imul eax, eax, 0x8b51fe4e
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
movzx eax, ax
imul eax, eax, 0x6ae76f93
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
add ax, 0x575e
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
movzx eax, ax
sub eax, 0x488f5089
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
or eax, 0x3c6cbe27
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
xor ax, 0x3332
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
movzx eax, al
or ax, 0x85eb
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
and ax, 0xbfa5
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
xor eax, 0xffffffe7
mov byte [0x2f8ab405d], al
movzx eax, word [0x2f8ab4054]
mov edx, 0xffffff95
imul eax, edx
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
xor eax, 0x5e
mov byte [0x2f8ab4050], al
mov dword [rbp - 0x34], 0x57
add dword [rbp - 4], 2
mov eax, dword [0x2f8ab4058]
and eax, 0x51
mov byte [0x2f8ab405d], al
mov eax, dword [0x2f8ab4058]
mov edx, 0xffffffae
imul eax, edx
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4052]
and eax, 4
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4054]
sub eax, 0x41
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4054]
sub ax, 0x1215
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405d]
or eax, 0x3c
mov byte [0x2f8ab4050], al
mov ecx, 0xc0
mov rax, qword [sym.imp.USER32.dll_GetDC]
call rax
add dword [rbp - 8], 1
movzx eax, byte [0x2f8ab405d]
movzx eax, al
and eax, 0x85c28403
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab4050]
movzx eax, al
or ax, 0xccd3
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
movzx eax, ax
or eax, 0x585cdda0
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
and eax, 0x2a
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
sub ax, 0x753
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405c]
sub eax, 0x60
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
add eax, 0x2c
mov byte [0x2f8ab4050], al
mov rax, qword [rbp - 0x40]
sub rax, 1
mov qword [rbp - 0x40], rax
add dword [rbp - 0xc], 1
mov eax, dword [rbp - 0xc]
cmp eax, dword [rbp - 0x2c]
jl 0x2f8aa37d4
mov eax, dword [0x2f8ab4058]
and eax, 0xa9563ad0
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
sub eax, 0x59
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
movzx eax, ax
and eax, 0x4af168c2
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
xor eax, 0xffffffa2
mov byte [0x2f8ab405c], al
mov eax, dword [0x2f8ab4058]
imul eax, eax, 0x83f69639
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4052]
and eax, 0xffffff84
mov byte [0x2f8ab405d], al
mov eax, dword [0x2f8ab4058]
xor eax, 0xffffffad
mov byte [0x2f8ab4050], al
mov eax, dword [0x2f8ab4058]
sub eax, 0x6bb5941d
mov dword [0x2f8ab4058], eax
sub dword [rbp - 4], 1
movzx eax, byte [0x2f8ab405d]
and eax, 0x37
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
add eax, 0x63
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4054]
or ax, 0x4906
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xd275
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
and ax, 0x99be
mov word [0x2f8ab4054], ax
mov dword [rbp - 0x10], 0
jmp 0x2f8aa41b7
movzx eax, byte [0x2f8ab405c]
movzx eax, al
or ax, 0x9efe
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
imul eax, eax, 0xc69c4914
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
xor eax, 0x23
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
xor ax, 0xa248
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
sub eax, 0x39
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
and eax, 0xffffffdc
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
sub ax, 0x1e19
mov word [0x2f8ab4052], ax
mov edx, dword [rbp - 4]
mov rax, qword [0x2f8ab54f0]
mov eax, dword [rax]
cmp edx, eax
jb 0x2f8aa3df4
movzx eax, byte [0x2f8ab4050]
movzx eax, al
and eax, 0xf4542e30
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
or ax, 0x89d
mov word [0x2f8ab4052], ax
mov byte [0x2f8ab4050], 0
mov eax, dword [0x2f8ab4058]
or eax, 0x63
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
or ax, 0xf0fb
mov word [0x2f8ab4052], ax
movzx eax, word [0x2f8ab4052]
and eax, 0x3f
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
add eax, 0x5a
mov byte [0x2f8ab4050], al
jmp 0x2f8aa41c3
movzx eax, byte [0x2f8ab405c]
xor eax, 0xffffffb9
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
and eax, 0x4e4930d3
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
movzx eax, ax
or eax, 0x260ef19d
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
sub eax, 0x34
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
add ax, 0xf51
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
mov edx, 0x4f
imul eax, edx
mov byte [0x2f8ab405d], al
mov eax, dword [rbp - 4]
movsxd rdx, eax
mov rax, qword [rbp - 0x28]
add rax, rdx
mov edx, dword [rbp - 8]
movsxd rcx, edx
mov rdx, qword [rbp - 0x28]
add rdx, rcx
movzx eax, byte [rax]
mov byte [rdx], al
mov eax, dword [0x2f8ab4058]
imul ax, ax, 0x2968
mov word [0x2f8ab4052], ax
movzx eax, word [0x2f8ab4052]
and eax, 0xffffff85
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405d]
movzx eax, al
sub ax, 0x1c8e
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
add ax, 0x7b8e
mov word [0x2f8ab4054], ax
mov ecx, 0x53
mov rax, qword [sym.imp.USER32.dll_GetDC]
call rax
movzx eax, word [0x2f8ab4052]
movzx eax, ax
and eax, 0x91324782
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
or ax, 0x531a
mov word [0x2f8ab4052], ax
cmp dword [rbp - 0x18], 0
jne 0x2f8aa4008
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xd8b3
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405c]
sub eax, 0x79
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
imul ax, ax, 0x4445
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
add eax, 0x34
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
add eax, 0x79259c74
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4052]
xor ax, 0x2c19
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
movzx eax, ax
xor eax, 0xc9eef1a6
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab4050]
or eax, 7
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
add ax, 0x4060
mov word [0x2f8ab4054], ax
mov eax, dword [0x2f8ab4058]
or eax, 0x19a9ac66
mov dword [0x2f8ab4058], eax
movzx eax, word [0x2f8ab4054]
mov edx, 0x7e
imul eax, edx
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
sub eax, 0x50
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
sub eax, 0x2b
mov byte [0x2f8ab405d], al
mov dword [rbp - 0x38], 0x57
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0x747e
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4052]
sub eax, 0x44
mov byte [0x2f8ab405d], al
movzx eax, word [0x2f8ab4054]
or eax, 0xffffffaf
mov byte [0x2f8ab405d], al
mov eax, dword [0x2f8ab4058]
xor eax, 0x2b8ef643
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
imul ax, ax, 0x6cde
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
or ax, 0x491e
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
movzx eax, al
and ax, 0x800c
mov word [0x2f8ab4052], ax
add dword [rbp - 4], 1
mov eax, dword [0x2f8ab4058]
add eax, 0x62
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4052]
or eax, 0x5f
mov byte [0x2f8ab405c], al
mov eax, dword [0x2f8ab4058]
xor ax, 0xdcd1
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
sub ax, 0x53fd
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
and ax, 0xb5a1
mov word [0x2f8ab4052], ax
mov eax, dword [0x2f8ab4058]
add eax, 0x289c90be
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405c]
movzx eax, al
sub ax, 0x21cc
mov word [0x2f8ab4054], ax
add dword [rbp - 8], 1
movzx eax, word [0x2f8ab4054]
xor ax, 0x64ee
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
or eax, 0x1f
mov byte [0x2f8ab405d], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
imul eax, eax, 0xa1d03e45
mov dword [0x2f8ab4058], eax
mov ecx, 0x68
mov rax, qword [sym.imp.USER32.dll_GetDC]
call rax
movzx eax, byte [0x2f8ab4050]
movzx eax, al
imul ax, ax, 0xfaf8
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405d]
movzx eax, al
xor ax, 0x41d1
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab405c]
sub eax, 8
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4052]
add eax, 0x63
mov byte [0x2f8ab405c], al
mov rax, qword [rbp - 0x40]
sub rax, 1
mov qword [rbp - 0x40], rax
add dword [rbp - 0x10], 1
mov eax, dword [rbp - 0x10]
cmp eax, dword [rbp - 0x30]
jl 0x2f8aa3cea
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0x307c
mov word [0x2f8ab4052], ax
movzx edx, byte [0x2f8ab405c]
mov eax, edx
shl edx, 2
sub eax, edx
shl eax, 4
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
xor ax, 0xa110
mov word [0x2f8ab4054], ax
movzx eax, word [0x2f8ab4054]
sub eax, 0x52
mov byte [0x2f8ab4050], al
movzx eax, word [0x2f8ab4054]
movzx eax, ax
and eax, 0x5627afde
mov dword [0x2f8ab4058], eax
mov eax, dword [0x2f8ab4058]
imul ax, ax, 0x29b6
mov word [0x2f8ab4052], ax
mov ecx, 0xe1
mov rax, qword [sym.imp.USER32.dll_GetDC]
call rax
add dword [rbp - 4], 1
mov eax, dword [0x2f8ab4058]
add ax, 0x4c0b
mov word [0x2f8ab4054], ax
mov eax, dword [0x2f8ab4058]
and eax, 0xd851bebd
mov dword [0x2f8ab4058], eax
movzx eax, byte [0x2f8ab405c]
xor eax, 0xffffffd2
mov byte [0x2f8ab405d], al
mov edx, 0
mov ecx, 0xb6
mov rax, qword [sym.imp.USER32.dll_ReleaseDC]
call rax
movzx eax, byte [0x2f8ab405d]
and eax, 0xffffff82
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab405c]
movzx eax, al
imul ax, ax, 0xef3a
mov word [0x2f8ab4052], ax
movzx eax, byte [0x2f8ab4050]
or eax, 0x28
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4054]
movzx eax, ax
xor eax, 0xc0cbb7fd
mov dword [0x2f8ab4058], eax
mov edx, dword [rbp - 4]
mov rax, qword [0x2f8ab54f0]
mov eax, dword [rax]
cmp edx, eax
jb 0x2f8aa4368
mov eax, dword [0x2f8ab4058]
xor eax, 0xffffffa5
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
and eax, 0xffffffc3
mov byte [0x2f8ab405c], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
add ax, 0x55f6
mov word [0x2f8ab4054], ax
movzx eax, byte [0x2f8ab4050]
xor eax, 0xffffffe9
mov byte [0x2f8ab405c], al
movzx eax, word [0x2f8ab4052]
and eax, 0xfffffff1
mov byte [0x2f8ab4050], al
movzx eax, byte [0x2f8ab4050]
movzx eax, al
xor ax, 0xddd6
mov word [0x2f8ab4052], ax
movzx eax, word [0x2f8ab4054]
add eax, 0x7b
mov byte [0x2f8ab405d], al
jmp 0x2f8aa4375
mov rax, qword [rbp - 0x40]
test rax, rax
jne 0x2f8aa365b
mov rax, qword [rbp - 0x48]
sub rsp, 0xffffffffffffff80
pop rbp
ret