Function at 0x10013f90
Capabilities:
Log keystrokes via polling
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x138
cmp byte [0x1028f947], 0
push esi
push edi
mov edi, ecx
mov byte [0x10255fdb], 0
mov dword [esp + 0x1c], edi
je 0x1001428f
mov eax, dword [0x1028f850]
cmp dword [eax], 0
je 0x1001428f
mov ecx, dword [0x1028c140]
mov eax, dword [ecx]
mov eax, dword [eax + 0x68]
call eax
test al, al
je 0x1001428f
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000d4b0
cmp dword [eax], 0
jne 0x1001428f
push dword [0x1028f94c]
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test al, 1
je 0x10014347
cmp byte [0x10255fdb], 0
jne 0x10014347
movss xmm0, dword [edi + 0xc]
lea ecx, [esp + 0x3c]
mov eax, dword [0x1028f850]
movss dword [esp + 8], xmm0
movss xmm0, dword [edi + 0x10]
push ecx
mov ecx, dword [eax]
movss dword [esp + 0x10], xmm0
call fcn.10095350
movss xmm1, dword [esp + 0xc]
mov esi, eax
mulss xmm1, dword [0x1016a498]
movss dword [esp + 0xc], xmm1
movss xmm1, dword [esp + 8]
mulss xmm1, dword [0x1016a498]
movaps xmm0, xmm1
movss dword [esp + 8], xmm1
call fcn.1000e9c0
movss dword [esp + 0x10], xmm0
movss xmm0, dword [esp + 0xc]
call fcn.1000e9c0
mulss xmm0, dword [esp + 0x10]
mulss xmm0, dword [0x1016aeb4]
addss xmm0, dword [esi]
movss dword [esp + 0x14], xmm0
movss xmm0, dword [esp + 0xc]
call fcn.1000e9e0
mulss xmm0, dword [esp + 0x10]
mulss xmm0, dword [0x1016aeb4]
addss xmm0, dword [esi + 4]
movss dword [esp + 0x10], xmm0
movss xmm0, dword [esp + 8]
call fcn.1000e9e0
movss xmm1, dword [esi + 8]
lea ecx, [esp + 0x3c]
mulss xmm0, dword [0x1016aeb4]
mov eax, dword [0x1028f850]
mov dword [esp + 0xf0], 0x7f800000
mov dword [esp + 0xec], 0x7f800000
subss xmm1, xmm0
mov dword [esp + 0xe8], 0x7f800000
mov dword [esp + 0xfc], 0x7f800000
mov dword [esp + 0xf8], 0x7f800000
mov dword [esp + 0xf4], 0x7f800000
mov dword [esp + 0x108], 0x7f800000
mov dword [esp + 0x104], 0x7f800000
mov dword [esp + 0x100], 0x7f800000
push ecx
mov ecx, dword [eax]
movss dword [esp + 0xc], xmm1
call fcn.10095350
movss xmm2, dword [esp + 0x10]
mov ecx, eax
movss xmm0, dword [esp + 0x14]
movss xmm1, dword [esp + 8]
subss xmm2, dword [ecx + 4]
subss xmm0, dword [ecx]
subss xmm1, dword [ecx + 8]
mov byte [esp + 0xd5], 1
movss dword [esp + 0xa4], xmm2
movss dword [esp + 0xa0], xmm0
mulss xmm2, xmm2
mulss xmm0, xmm0
movss dword [esp + 0xa8], xmm1
mulss xmm1, xmm1
addss xmm2, xmm0
addss xmm2, xmm1
ucomiss xmm2, dword [0x1016a430]
lahf
test ah, 0x44
jp 0x100141bb
mov byte [esp + 0xd5], 0
mov dword [esp + 0xc0], 0
lea edx, [esp + 0xe8]
mov dword [esp + 0xc4], 0
mov dword [esp + 0xc8], 0
mov dword [esp + 0xd0], 0
mov byte [esp + 0xd4], 1
mov dword [esp + 0xb0], 0
mov dword [esp + 0xb4], 0
mov dword [esp + 0xb8], 0
movss xmm1, dword [ecx + 4]
movss xmm2, dword [ecx + 8]
movss xmm0, dword [ecx]
mov ecx, dword [0x1028c18c]
push edx
lea edx, [esp + 0x1c]
movss dword [esp + 0x94], xmm0
push edx
movss dword [esp + 0x9c], xmm1
lea edx, [esp + 0x98]
movss dword [esp + 0xa0], xmm2
mov dword [esp + 0x20], vtable.CTraceFilterWorldOnly.0
mov eax, dword [ecx]
push 0x201400b
push edx
call dword [eax + 0x14]
movss xmm0, dword [esp + 0x114]
ucomiss xmm0, dword [0x1016a544]
lahf
test ah, 0x44
jp 0x10014295
mov ecx, dword [0x1028c140]
push str.play_error
mov eax, dword [ecx]
call dword [eax + 0x1b4]
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov eax, dword [0x1028f850]
lea ecx, [esp + 0x3c]
push ecx
mov ecx, dword [eax]
call fcn.10095350
mov ecx, dword [0x1028f850]
mov esi, eax
lea eax, [esp + 0x60]
push eax
mov ecx, dword [ecx]
call fcn.10095350
movss xmm1, dword [esp + 0x14]
movss xmm0, dword [esp + 0x114]
mov ecx, dword [0x10277224]
subss xmm1, dword [eax]
mulss xmm1, xmm0
addss xmm1, dword [esi]
movss dword [esp + 0x20], xmm1
movss xmm1, dword [esp + 0x10]
subss xmm1, dword [eax + 4]
mulss xmm1, xmm0
addss xmm1, dword [esi + 4]
movss dword [esp + 0x24], xmm1
movss xmm1, dword [esp + 8]
subss xmm1, dword [eax + 8]
mulss xmm1, xmm0
addss xmm1, dword [esi + 8]
movss dword [esp + 0x28], xmm1
cmp ecx, dword [0x10277228]
je 0x10014337
movq xmm0, qword [esp + 0x20]
mov eax, dword [esp + 0x28]
movq qword [ecx], xmm0
mov dword [ecx + 8], eax
add dword [0x10277224], 0xc
jmp 0x10014347
lea eax, [esp + 0x20]
push eax
push ecx
mov ecx, 0x10277220
call fcn.1002a240
push dword [0x1028f948]
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jne 0x10014372
mov byte [0x1028c195], al
mov byte [0x1028c19c], al
mov byte [0x1028c625], al
mov byte [0x1028c194], al
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov ecx, dword [0x10277224]
mov eax, 0x2aaaaaab
sub ecx, dword [0x10277220]
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
je 0x1001428f
movss xmm0, dword [0x1016aecc]
xor ecx, ecx
xor eax, eax
mov dword [esp + 0x10], ecx
movss dword [esp + 0x14], xmm0
mov dword [esp + 0xc], ecx
mov dword [esp + 8], eax
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
mov ecx, dword [0x10277224]
mov esi, dword [0x10277220]
sub ecx, esi
mov dword [esp + 0x18], eax
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, dword [esp + 0xc]
jbe 0x10014bb0
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 8]
movss xmm2, dword [ecx]
movss xmm0, dword [ecx + 4]
subss xmm0, dword [eax + esi + 4]
subss xmm2, dword [eax + esi]
movss xmm1, dword [ecx + 8]
subss xmm1, dword [eax + esi + 8]
mulss xmm0, xmm0
mulss xmm2, xmm2
mulss xmm1, xmm1
addss xmm0, xmm2
addss xmm0, xmm1
call fcn.100095a0
movss xmm1, dword [esp + 0x14]
comiss xmm1, xmm0
jbe 0x100144c1
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
mov ecx, dword [0x10277224]
mov esi, dword [0x10277220]
sub ecx, esi
mov dword [esp + 0x18], eax
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, dword [esp + 0xc]
jbe 0x10014bb0
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 8]
movss xmm2, dword [ecx]
movss xmm0, dword [ecx + 4]
subss xmm0, dword [eax + esi + 4]
subss xmm2, dword [eax + esi]
movss xmm1, dword [ecx + 8]
subss xmm1, dword [eax + esi + 8]
mulss xmm0, xmm0
mulss xmm2, xmm2
mulss xmm1, xmm1
addss xmm0, xmm2
addss xmm0, xmm1
call fcn.100095a0
mov eax, dword [esp + 0xc]
movss dword [esp + 0x14], xmm0
mov dword [esp + 0x10], eax
jmp 0x100144c5
mov eax, dword [esp + 0xc]
mov ecx, dword [0x10277224]
inc eax
add dword [esp + 8], 0xc
sub ecx, esi
mov dword [esp + 0xc], eax
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
cmp dword [esp + 0xc], ecx
jb 0x100143b2
mov ecx, dword [0x10277224]
mov eax, 0x2aaaaaab
sub ecx, esi
imul ecx
mov ecx, dword [esp + 0x10]
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, ecx
jbe 0x10014bb0
lea eax, [ecx + ecx*2]
movq xmm0, qword [esi + eax*4]
mov eax, dword [esi + eax*4 + 8]
mov dword [esp + 0x44], eax
mov eax, dword [edi + 0x30]
mov dword [esp + 0x14], eax
mov eax, dword [0x1028f850]
movq qword [esp + 0x3c], xmm0
mov ecx, dword [eax]
call fcn.1000ef10
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
mov dword [esp + 0x5c], eax
mov eax, dword [0x1028f850]
movq qword [esp + 0x54], xmm0
mov ecx, dword [eax]
call fcn.1000ebf0
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
mov dword [esp + 0x50], eax
mov eax, dword [0x1028f850]
movq qword [esp + 0x48], xmm0
mov ecx, dword [eax]
call fcn.1000f0b0
movss xmm0, dword [eax]
mov eax, dword [0x1028c5a0]
movss dword [esp + 0x18], xmm0
xorps xmm0, xmm0
comiss xmm0, dword [0x10255ff0]
mov eax, dword [eax + 0x1c]
mov dword [esp + 0x38], eax
jbe 0x100145a4
mov dword [0x1028c5e0], 0
lea ecx, [eax - 1]
xor esi, esi
mov dword [esp + 0x34], ecx
nop dword [eax]
mov eax, dword [esp + 0x14]
mov dword [edi + 0x30], eax
mov eax, dword [0x10255498]
push ecx
push 0
mov eax, dword [eax]
call eax
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
movss xmm0, dword [esp + 0x48]
movss dword [eax], xmm0
movss xmm0, dword [esp + 0x4c]
movss dword [eax + 4], xmm0
movss xmm0, dword [esp + 0x50]
movss dword [eax + 8], xmm0
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ef10
movss xmm0, dword [esp + 0x54]
movss dword [eax], xmm0
movss xmm0, dword [esp + 0x58]
movss dword [eax + 4], xmm0
movss xmm0, dword [esp + 0x5c]
movss dword [eax + 8], xmm0
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000f0b0
cmp byte [0x1028c19c], 0
movss xmm0, dword [esp + 0x18]
movss dword [eax], xmm0
jne 0x10014ab9
cmp byte [0x1028c625], 0
jne 0x10014ab9
cmp byte [0x1028c194], 0
jne 0x10014ab9
mov dword [esp + 8], 0
test esi, esi
jne 0x1001467b
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
test byte [eax], 1
je 0x1001469a
or dword [edi + 0x30], 2
jmp 0x1001469a
cmp esi, 1
je 0x10014685
cmp esi, 2
jne 0x1001469a
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
test byte [eax], 1
je 0x1001469a
or dword [edi + 0x30], 6
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
test byte [eax], 1
jne 0x100146af
and dword [edi + 0x30], 0xfffffff9
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
mov eax, dword [eax]
mov dword [esp + 0x10], eax
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
mov dword [esp + 0x8c], eax
mov eax, dword [0x1028f850]
movq qword [esp + 0x84], xmm0
mov ecx, dword [eax]
call fcn.1000ef10
mov ecx, dword [0x1027721c]
push edi
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
movq qword [esp + 0x70], xmm0
mov dword [esp + 0x78], eax
call fcn.10044340
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
test byte [eax], 1
jne 0x10014722
and dword [edi + 0x30], 0xfffffff9
test byte [esp + 0x10], 1
je 0x100147c3
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ed90
test byte [eax], 1
jne 0x100147c3
cmp esi, 2
jne 0x100147c3
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
movss xmm0, dword [eax + 8]
addss xmm0, dword [0x1016a958]
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
movss dword [esp + 0x20], xmm0
call fcn.1000ebf0
movss xmm0, dword [eax + 4]
mov eax, dword [0x1028f850]
movss dword [esp + 0xc], xmm0
mov ecx, dword [eax]
call fcn.1000ebf0
movss xmm0, dword [eax]
mov eax, dword [0x1028f850]
movss dword [esp + 0x10], xmm0
mov ecx, dword [eax]
call fcn.1000ebf0
movss xmm0, dword [esp + 0x10]
movss dword [eax], xmm0
movss xmm0, dword [esp + 0xc]
movss dword [eax + 4], xmm0
movss xmm0, dword [esp + 0x20]
movss dword [eax + 8], xmm0
mov eax, dword [0x1028f850]
mov ecx, dword [eax]
call fcn.1000ebf0
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
mov dword [esp + 0x68], eax
mov eax, dword [0x1028f850]
movq qword [esp + 0x60], xmm0
mov ecx, dword [eax]
call fcn.1000ef10
xorps xmm6, xmm6
movq xmm0, qword [eax]
mov eax, dword [eax + 8]
movq qword [esp + 0x78], xmm0
movss xmm0, dword [esp + 0x74]
comiss xmm0, xmm6
mov dword [esp + 0x80], eax
jbe 0x10014aa7
comiss xmm6, dword [esp + 0x80]
jbe 0x10014aa7
movss xmm2, dword [esp + 0x8c]
movaps xmm0, xmm2
subss xmm0, dword [esp + 0x68]
ucomiss xmm0, xmm6
lahf
test ah, 0x44
jnp 0x10014aa7
movss xmm4, dword [esp + 0x44]
xorps xmm5, xmm5
movaps xmm7, xmm4
subss xmm7, dword [0x1016a988]
comiss xmm2, xmm7
jbe 0x10014aa7
cvtps2pd xmm0, xmm0
cvttss2si ecx, xmm4
movsd qword [esp + 0x20], xmm0
nop dword [eax]
comiss xmm6, xmm4
cvttss2si eax, xmm2
jbe 0x100148c7
cmp eax, ecx
jne 0x10014972
movd xmm0, eax
movaps xmm1, xmm2
cvtdq2ps xmm0, xmm0
subss xmm1, xmm0
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edx, xmm1
movaps xmm1, xmm4
subss xmm1, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edi, xmm1
cmp edi, edx
je 0x10014915
lea eax, [edx + 1]
cmp eax, edi
je 0x10014915
lea eax, [edx + 2]
cmp eax, edi
jmp 0x10014913
cmp eax, ecx
jne 0x10014972
movd xmm0, eax
movaps xmm1, xmm2
cvtdq2ps xmm0, xmm0
subss xmm1, xmm0
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edx, xmm1
movaps xmm1, xmm4
subss xmm1, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edi, xmm1
cmp edi, edx
je 0x10014915
lea eax, [edi - 1]
cmp edx, eax
je 0x10014915
lea eax, [edi - 2]
cmp edx, eax
jne 0x1001496e
test esi, esi
jne 0x10014932
mov edi, dword [esp + 0x1c]
mov byte [0x1028c19c], 1
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014972
cmp esi, 1
jne 0x10014950
mov edi, dword [esp + 0x1c]
mov byte [0x1028c625], 1
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014972
cmp esi, 2
jne 0x1001495c
mov byte [0x1028c194], 1
mov edi, dword [esp + 0x1c]
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014972
mov edi, dword [esp + 0x1c]
comiss xmm6, xmm4
movaps xmm1, xmm2
addss xmm1, dword [0x1016a95c]
cvttss2si eax, xmm1
jbe 0x100149d1
cmp eax, ecx
jne 0x10014a79
movd xmm0, eax
cvtdq2ps xmm0, xmm0
subss xmm1, xmm0
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edx, xmm1
movaps xmm1, xmm4
subss xmm1, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edi, xmm1
cmp edi, edx
je 0x10014a1c
lea eax, [edx + 1]
cmp eax, edi
je 0x10014a1c
lea eax, [edx + 2]
cmp eax, edi
jmp 0x10014a1a
cmp eax, ecx
jne 0x10014a79
movd xmm0, eax
cvtdq2ps xmm0, xmm0
subss xmm1, xmm0
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edx, xmm1
movaps xmm1, xmm4
subss xmm1, xmm0
mulss xmm1, dword [0x1016ae04]
cvttss2si edi, xmm1
cmp edi, edx
je 0x10014a1c
lea eax, [edi - 1]
cmp edx, eax
je 0x10014a1c
lea eax, [edi - 2]
cmp edx, eax
jne 0x10014a75
test esi, esi
jne 0x10014a39
mov edi, dword [esp + 0x1c]
mov byte [0x1028c19c], 1
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014a79
cmp esi, 1
jne 0x10014a57
mov edi, dword [esp + 0x1c]
mov byte [0x1028c625], 1
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014a79
cmp esi, 2
jne 0x10014a63
mov byte [0x1028c194], 1
mov edi, dword [esp + 0x1c]
mov eax, dword [edi + 8]
add eax, dword [esp + 8]
mov dword [0x1028c5e8], eax
jmp 0x10014a79
mov edi, dword [esp + 0x1c]
xorps xmm0, xmm0
cvtss2sd xmm0, xmm5
addss xmm5, dword [0x1016a544]
mulsd xmm0, qword [0x1016a560]
addsd xmm0, qword [esp + 0x20]
cvtpd2ps xmm0, xmm0
subss xmm2, xmm0
comiss xmm2, xmm7
ja 0x10014870
mov eax, dword [esp + 8]
inc eax
mov dword [esp + 8], eax
cmp eax, 0x20
jl 0x10014660
mov ecx, dword [esp + 0x34]
inc esi
cmp esi, 3
jl 0x100145b0
mov eax, dword [esp + 0x38]
mov esi, dword [esp + 0x14]
dec eax
push eax
mov dword [edi + 0x30], esi
mov eax, dword [0x10255498]
push 0
mov eax, dword [eax]
call eax
mov eax, dword [edi + 8]
cmp eax, dword [0x1028c5e8]
jge 0x10014b1c
movss xmm0, dword [0x10255ff0]
xor eax, eax
comiss xmm0, dword [0x1016a544]
mov dword [edi + 0x24], 0
mov dword [edi + 0x28], 0
mov byte [0x1028c195], 1
mov dword [edi + 0x44], eax
jbe 0x10014b23
mov dword [0x1028c5e8], eax
jmp 0x10014b23
mov byte [0x1028c195], 0
cmp byte [0x1028c19c], 0
mov ecx, esi
mov edx, dword [0x10255fe4]
mov dword [edi + 0x30], esi
je 0x10014b49
test dl, 1
je 0x10014b49
or ecx, 2
mov byte [0x1028c19c], 0
mov dword [edi + 0x30], ecx
cmp byte [0x1028c625], 0
mov eax, ecx
je 0x10014b66
test dl, 1
je 0x10014b66
or eax, 6
mov byte [0x1028c625], 0
mov dword [edi + 0x30], eax
cmp byte [0x1028c194], 0
mov ecx, eax
mov esi, dword [0x1028c138]
je 0x10014b96
test dl, 1
je 0x10014b96
or ecx, 6
mov byte [0x1028c194], 0
mov dword [edi + 0x30], ecx
mov eax, dword [esi + 0x1c]
add eax, 3
mov dword [0x1028c5e0], eax
jmp 0x10014b9b
mov eax, dword [0x1028c5e0]
cmp eax, dword [esi + 0x1c]
jle 0x1001428f
or ecx, 4
mov dword [edi + 0x30], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret
call fcn.10029460
int3