Function at 0x412460
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x158
mov eax, dword [0x4fc00c]
xor eax, esp
mov dword [esp + 0x154], eax
mov eax, dword [ebp + 0x10]
push esi
push edi
push eax
push dword [ebp + 0xc]
mov esi, ecx
mov dword [esp + 0x20], esi
call fcn.00411690
test al, al
jne 0x4124a8
pop edi
pop esi
mov ecx, dword [esp + 0x154]
xor ecx, esp
call fcn.0047d312
mov esp, ebp
pop ebp
ret 0xc
xor eax, eax
mov byte [esp + 0xf], 0x32
mov word [esp + 0x124], ax
xorps xmm0, xmm0
lea eax, [esp + 0x140]
push eax
sub esp, 8
movups xmmword [esp + 0x134], xmm0
movups xmmword [esp + 0x144], xmm0
movsd xmm0, qword [0x4f3d98]
movsd qword [esp], xmm0
call fcn.004c0b10
add esp, 0xc
xorps xmm0, xmm0
xor eax, eax
movsd qword [esp + 0x130], xmm0
fstp qword [esp + 0x138]
mov word [esp + 0x124], ax
call fcn.0041c1a0
mov dword [eax + 8], 6
call fcn.00420dc0
cmp byte [eax + 0x62], 0
jne 0x413027
call fcn.00420dc0
mov edi, eax
mov al, byte [edi + 0x61]
test al, 0xf0
je 0x412560
movzx ecx, al
and ecx, 0xf
push ecx
mov ecx, 0x4fe450
call fcn.00440a60
movzx eax, word [0x4fe456]
push ecx
push eax
movzx eax, word [0x4fe454]
mov ecx, 0x4fe450
push eax
call fcn.004407c0
mov byte [edi + 0x61], 0
cmp byte [edi + 0x60], 0
jne 0x412578
call fcn.00423ed0
lea ecx, [eax + 8]
call fcn.00445df0
jmp 0x413018
call fcn.0041e7c0
mov edi, eax
mov al, byte [edi + 0x44]
mov byte [esp + 0xe], al
call fcn.00443960
movzx ecx, byte [esp + 0xe]
imul ecx, ecx, 0x208
cmp byte [ecx + eax + 0x144], 0
je 0x4125d5
mov al, byte [ecx + eax + 0x250]
test al, al
je 0x4125d5
mov al, byte [edi + 0x44]
mov byte [esp + 0xe], al
call fcn.00443960
movzx ecx, byte [esp + 0xe]
imul ecx, ecx, 0x208
push 6
add ecx, 0x13c
add ecx, eax
call fcn.00447bd0
test eax, eax
jne 0x4125e5
push 0x1b
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
cwde
test eax, 0x10000
je 0x4125f2
cmp dword [esi + 0x2ec], 2
je 0x413027
call dword [sym.imp.WINMM.dll_timeGetTime]
movsd xmm0, qword [esp + 0x138]
addsd xmm0, qword [esp + 0x130]
movsd xmm1, qword [0x4f3d58]
mov dword [esp + 0x120], eax
xor eax, eax
comisd xmm0, xmm1
movsd qword [esp + 0x130], xmm0
jb 0x41263c
subsd xmm0, xmm1
mov eax, 1
movsd qword [esp + 0x130], xmm0
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm0, qword [esp + 0x140]
movsd qword [esp + 0x128], xmm0
call fcn.0041c1a0
mov ecx, eax
call fcn.0041c290
call fcn.0042dc50
mov edi, eax
xor edx, edx
cmp byte [edi + 0x474], dl
jbe 0x4126a3
xor ecx, ecx
nop word [eax + eax]
mov eax, dword [edi + 0x470]
lea ecx, [ecx + 0x260]
xor esi, esi
inc edx
mov word [ecx + eax - 0xc], si
movzx eax, byte [edi + 0x474]
cmp edx, eax
jl 0x412680
mov esi, dword [esp + 0x18]
cmp dword [esi + 0x2ec], 2
jne 0x4126be
mov al, byte [esp + 0xf]
test al, al
je 0x413027
dec al
mov byte [esp + 0xf], al
lea eax, [esp + 0x84]
push eax
call fcn.0041e7c0
mov ecx, eax
call fcn.0041def0
mov ecx, esi
movups xmm1, xmmword [eax]
movq xmm0, qword [eax + 0x10]
mov eax, dword [eax + 0x18]
mov dword [esp + 0x38], eax
movd eax, xmm1
movq qword [esp + 0x30], xmm0
push eax
call fcn.00411920
test al, al
jne 0x412717
call fcn.0041c1a0
cmp byte [eax + 0xe], 1
je 0x41270d
mov byte [eax + 0xe], 1
mov dword [eax + 0x14], 0x3cd79436
mov dword [esi + 0x2ec], 2
mov eax, 8
lea edx, [esi + 0x18]
mov dword [esp + 0x10], eax
cmp byte [edx - 0x10], 0
movss xmm6, dword [0x4f3cd0]
je 0x4127da
movzx eax, word [edx + 0x14]
test ax, ax
je 0x4127ab
movss xmm5, dword [edx + 0xc]
movaps xmm0, xmm6
movss xmm1, dword [edx + 4]
subss xmm0, xmm5
movss xmm2, dword [edx + 8]
dec eax
movss xmm3, dword [edx - 4]
movss xmm4, dword [edx]
mulss xmm1, xmm5
mov word [edx + 0x14], ax
mulss xmm2, xmm5
addss xmm5, dword [edx + 0x10]
mulss xmm3, xmm0
mulss xmm4, xmm0
comiss xmm5, xmm6
addss xmm3, xmm1
movss dword [edx + 0xc], xmm5
addss xmm4, xmm2
movss dword [edx - 0xc], xmm3
movss dword [edx - 8], xmm4
jae 0x412798
test ax, ax
jne 0x4127ab
mov eax, dword [edx + 4]
mov ecx, dword [edx + 8]
mov dword [edx - 0xc], eax
mov dword [edx - 8], ecx
mov dword [edx + 0xc], 0x3f800000
movss xmm0, dword [edx + 0xc]
mulss xmm0, dword [0x4f3db0]
comiss xmm6, xmm0
ja 0x4127c0
movaps xmm0, xmm6
movss xmm4, dword [0x4f3fa4]
mulss xmm0, xmm4
cvttss2si eax, xmm0
mov word [edx + 0x28], ax
mov eax, dword [esp + 0x10]
jmp 0x4127e2
movss xmm4, dword [0x4f3fa4]
movzx ecx, word [edx + 0x40]
test cx, cx
je 0x412845
movss xmm2, dword [edx + 0x38]
movaps xmm0, xmm6
movd xmm1, dword [edx + 0x30]
subss xmm0, xmm2
mov edi, dword [edx + 0x34]
cvtdq2ps xmm1, xmm1
mulss xmm1, xmm0
movd xmm0, edi
cvtdq2ps xmm0, xmm0
mulss xmm0, xmm2
addss xmm2, dword [edx + 0x3c]
addss xmm1, xmm0
comiss xmm2, xmm6
cvttss2si eax, xmm1
movss dword [edx + 0x38], xmm2
mov dword [edx + 0x2c], eax
lea eax, [ecx - 1]
mov word [edx + 0x40], ax
jae 0x412837
test ax, ax
jne 0x412841
mov dword [edx + 0x2c], edi
mov dword [edx + 0x38], 0x3f800000
mov eax, dword [esp + 0x10]
add edx, 0x58
sub eax, 1
mov dword [esp + 0x10], eax
jne 0x412723
movzx eax, word [esi + 0x2e0]
test ax, ax
je 0x4128c7
movss xmm2, dword [esi + 0x2d8]
movaps xmm1, xmm6
movss xmm3, dword [esi + 0x2d4]
subss xmm1, xmm2
movaps xmm0, xmm3
dec eax
mulss xmm0, xmm2
mov word [esi + 0x2e0], ax
addss xmm2, dword [esi + 0x2dc]
mulss xmm1, dword [esi + 0x2d0]
comiss xmm2, xmm6
addss xmm1, xmm0
movss dword [esi + 0x2d8], xmm2
movss dword [esi + 0x2cc], xmm1
jae 0x4128b5
test ax, ax
jne 0x4128c7
movss dword [esi + 0x2cc], xmm3
mov dword [esi + 0x2d8], 0x3f800000
cmp byte [esi + 0x2f8], 0
movzx eax, word [esi + 0x2fa]
jne 0x412919
test ax, ax
jns 0x4128fd
add eax, 0xa
mov word [esi + 0x2fa], ax
test ax, ax
jle 0x412971
xor eax, eax
mov word [esi + 0x2fa], ax
jmp 0x412971
jle 0x412971
add eax, 0xfffffff6
mov word [esi + 0x2fa], ax
test ax, ax
jns 0x412971
xor eax, eax
mov word [esi + 0x2fa], ax
jmp 0x412971
mov ecx, 0xbe
cmp ax, cx
jge 0x412934
add eax, 0xa
mov word [esi + 0x2fa], ax
cmp ax, cx
jle 0x41294c
jmp 0x412945
jle 0x41294c
add eax, 0xfffffff6
mov word [esi + 0x2fa], ax
cmp ax, cx
jge 0x41294c
mov word [esi + 0x2fa], cx
add word [esi + 0x2fc], 2
mov ecx, 0xb4
mov ax, word [esi + 0x2fc]
cmp ax, cx
jle 0x412971
add eax, 0xffffff4c
mov word [esi + 0x2fc], ax
cmp byte [esi + 0x300], 0
je 0x4129dd
movss xmm1, dword [esi + 0x304]
comiss xmm6, xmm1
jbe 0x412994
addss xmm1, dword [0x4f3be8]
comiss xmm1, xmm6
jmp 0x4129a4
comiss xmm1, xmm6
jbe 0x4129bb
subss xmm1, dword [0x4f3be8]
comiss xmm6, xmm1
movss dword [esi + 0x304], xmm1
jbe 0x4129bb
movaps xmm1, xmm6
mov dword [esi + 0x304], 0x3f800000
movaps xmm0, xmm6
subss xmm0, xmm1
mulss xmm1, xmm4
mulss xmm0, dword [0x4f3b84]
addss xmm0, xmm1
cvttss2si eax, xmm0
mov word [esi + 0x308], ax
call fcn.00420dc0
cmp byte [eax + 0xc], 0
je 0x412a3a
mov ax, word [esp + 0x124]
test ax, ax
je 0x412a3a
mov ecx, 0xffff
add ax, cx
mov word [esp + 0x124], ax
call dword [sym.imp.WINMM.dll_timeGetTime]
sub eax, dword [esp + 0x120]
movsd xmm0, qword [esp + 0x128]
movd xmm1, eax
cvtdq2pd xmm1, xmm1
shr eax, 0x1f
addsd xmm1, qword [eax*8 + 0x4f44f0]
comisd xmm0, xmm1
ja 0x412a05
jmp 0x413018
mov eax, dword [0x4fe4d8]
movaps xmm0, xmmword [0x4f44a0]
push 0x4fe554
movups xmmword [esp + 0x150], xmm0
mov ecx, dword [eax]
push 1
push eax
call dword [ecx + 0x54]
mov eax, dword [0x4fe4d8]
push 0x4fe56c
push 1
push eax
mov ecx, dword [eax]
call dword [ecx + 0x58]
mov eax, dword [0x4fe490]
lea edx, [esp + 0x20]
push edx
mov dword [esp + 0x24], 0
mov dword [esp + 0x28], 0
mov eax, dword [eax*4 + 0x4fe498]
mov dword [esp + 0x2c], eax
mov eax, dword [0x4fe4d8]
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x34], 0
mov dword [esp + 0x38], 4
mov ecx, dword [eax]
push 1
push eax
call dword [ecx + 0x68]
mov eax, dword [0x4fe4d8]
push 0
push 0
push 0
mov ecx, dword [eax]
push ecx
mov dword [esp], 0x3f800000
push 3
push dword [0x4fe4c8]
push eax
call dword [ecx + 0xbc]
mov ecx, dword [0x4fe4d8]
lea eax, [esp + 0x14c]
push 0
push 0
push eax
mov eax, dword [0x4fe490]
mov edx, dword [ecx]
push dword [eax*4 + 0x4fe4ac]
push ecx
call dword [edx + 0xc0]
mov eax, dword [0x4fe490]
lea edx, [esp + 0x148]
push 0x4fe4c8
push 1
push edx
mov eax, dword [eax*4 + 0x4fe4ac]
mov dword [esp + 0x154], eax
mov eax, dword [0x4fe4d8]
push 1
push eax
mov ecx, dword [eax]
call dword [ecx + 0xb8]
movsx eax, word [esi + 0x2c4]
mov ecx, eax
or ecx, 0xffffff00
shl ecx, 8
or ecx, eax
shl ecx, 8
or ecx, eax
push ecx
sub esp, 0x18
mov dword [esp + 0x14], 0x3f800000
mov dword [esp + 0x10], 0x3f800000
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0x44340000
mov dword [esp], 0x44a00000
push 2
call fcn.0042dc50
xorps xmm3, xmm3
xorps xmm2, xmm2
mov ecx, eax
call fcn.0042ed20
movzx esi, word [esi]
mov edi, dword [0x4fe4d8]
call fcn.0042dc50
mov edx, eax
lea ecx, [esp + 0x40]
lea eax, [esp + 0xa0]
push eax
call fcn.0044d350
push ecx
push esi
mov eax, ecx
mov dword [esp + 0x84], 0x3f800000
push eax
push 2
push 9
push edi
mov ecx, edx
mov dword [esp + 0x80], 0x3f800000
mov dword [esp + 0x6c], 0x3f800000
mov dword [esp + 0x58], 0x3f800000
call fcn.0042f110
mov edi, dword [esp + 0x18]
movss xmm0, dword [0x4f3cd0]
movss xmm1, dword [edi + 0x2d8]
movaps xmm2, xmm1
addss xmm2, xmm1
comiss xmm0, xmm2
ja 0x412c0f
movaps xmm2, xmm0
mulss xmm2, dword [0x4f3fa4]
subss xmm0, xmm1
mov ecx, 0xff
mulss xmm1, dword [0x4f4014]
cvttss2si eax, xmm2
mulss xmm0, dword [0x4f3fa4]
sub cx, ax
movzx edx, cx
cvttss2si eax, xmm0
movss xmm0, dword [0x4f3fbc]
comiss xmm1, xmm0
movzx eax, ax
jbe 0x412c51
movaps xmm1, xmm0
test ax, ax
je 0x412cbe
xorps xmm0, xmm0
comiss xmm0, xmm1
jae 0x412cbe
movsx ecx, ax
shl ecx, 0x18
movsx eax, dx
or ecx, eax
or ecx, 0xffff00
push ecx
sub esp, 0x18
mov dword [esp + 0x14], 0x3d000000
mov dword [esp + 0x10], 0x3e940000
mov dword [esp + 0xc], 0x3ea80000
mov dword [esp + 8], 0x3f140000
mov dword [esp + 4], 0x42000000
movss dword [esp], xmm1
push 1
call fcn.0042dc50
movss xmm3, dword [edi + 0x2e8]
mov ecx, eax
movss xmm2, dword [edi + 0x2e4]
call fcn.0042ed20
lea esi, [edi + 4]
mov edi, 8
push ecx
mov ecx, esi
call fcn.004132a0
add esi, 0x58
sub edi, 1
jne 0x412cc6
mov edi, dword [esp + 0x18]
cmp word [edi + 0x2fa], 0
je 0x412dbf
movsx ecx, word [edi + 0x2fc]
call fcn.00401030
mulss xmm0, dword [0x4f411c]
mov ax, word [edi + 0x2fa]
cvttss2si ecx, xmm0
sub ax, cx
movsx esi, ax
shl esi, 0x18
mov eax, esi
or eax, 0x101010
push eax
sub esp, 0x18
mov dword [esp + 0x14], 0x3cc00000
mov dword [esp + 0x10], 0x3e500000
mov dword [esp + 0xc], 0x3ebc0000
mov dword [esp + 8], 0x3f140000
mov dword [esp + 4], 0x41c00000
mov dword [esp], 0x43500000
push 1
call fcn.0042dc50
movss xmm3, dword [0x4f4054]
mov ecx, eax
movss xmm2, dword [0x4f4094]
call fcn.0042ed20
or esi, 0xffffff
push esi
sub esp, 0x18
mov dword [esp + 0x14], 0x3cc00000
mov dword [esp + 0x10], 0x3e500000
mov dword [esp + 0xc], 0x3ebc0000
mov dword [esp + 8], 0x3f140000
mov dword [esp + 4], 0x41c00000
mov dword [esp], 0x43500000
push 1
call fcn.0042dc50
movss xmm3, dword [0x4f4050]
mov ecx, eax
movss xmm2, dword [0x4f4090]
call fcn.0042ed20
movzx eax, word [edi + 0x308]
test ax, ax
je 0x412ed4
movss xmm0, dword [edi + 0x304]
movss xmm1, dword [0x4f3cd0]
cwde
subss xmm1, xmm0
mulss xmm0, dword [0x4f3b84]
shl eax, 0x18
or eax, 0xffffff
push eax
mulss xmm1, dword [0x4f3e50]
sub esp, 0x18
mov dword [esp + 0x38], eax
mov dword [esp + 0x14], 0x3cc00000
addss xmm1, xmm0
movss xmm0, dword [edi + 0x30c]
mov dword [esp + 0x10], 0x3e180000
mov dword [esp + 0xc], 0x3ec80000
mov dword [esp + 8], 0x3f140000
mov dword [esp + 4], 0x41c00000
mov dword [esp], 0x43180000
push 1
movss dword [esp + 0x34], xmm1
movss dword [esp + 0x30], xmm0
call fcn.0042dc50
movss xmm4, dword [esp + 0x30]
mov ecx, eax
movss xmm2, dword [0x4f3f8c]
movaps xmm3, xmm4
call fcn.0042ed20
movss xmm0, dword [esp + 0x14]
mov esi, 8
addss xmm4, dword [0x4f3e98]
addss xmm0, dword [0x4f3f8c]
add edi, 0x310
movss dword [esp + 0x10], xmm4
movss dword [esp + 0x14], xmm0
nop word [eax + eax]
push dword [esp + 0x1c]
movaps xmm3, xmm4
movaps xmm2, xmm0
push ecx
mov ecx, edi
call fcn.00411400
movss xmm4, dword [esp + 0x10]
add edi, 0xc
movss xmm0, dword [esp + 0x14]
addss xmm4, dword [0x4f3e98]
movss dword [esp + 0x10], xmm4
sub esi, 1
jne 0x412ea0
mov esi, dword [0x4fe4d8]
call fcn.0042dc50
mov edx, eax
lea ecx, [esp + 0x40]
lea eax, [esp + 0xa0]
push eax
call fcn.0044d350
push ecx
push dword [ebp + 8]
mov eax, ecx
mov dword [esp + 0x84], 0x3f800000
push eax
push 1
push 7
push esi
mov ecx, edx
mov dword [esp + 0x80], 0x3f800000
mov dword [esp + 0x6c], 0x3f800000
mov dword [esp + 0x58], 0x3f800000
call fcn.0042f110
call fcn.0041c1a0
mov edi, dword [0x4fe4d8]
movzx esi, word [eax]
call fcn.0042dc50
mov edx, eax
lea ecx, [esp + 0x40]
lea eax, [esp + 0xe0]
push eax
call fcn.0044d350
push ecx
push esi
mov eax, ecx
mov dword [esp + 0x84], 0x3f800000
push eax
push 0
push 7
push edi
mov ecx, edx
mov dword [esp + 0x80], 0x3f800000
mov dword [esp + 0x6c], 0x3f800000
mov dword [esp + 0x58], 0x3f800000
call fcn.0042f110
push dword [0x4fe4d8]
call fcn.0041c1a0
mov ecx, eax
call fcn.0041c3a0
push 0
mov ecx, 0x4fe450
call fcn.004404e0
mov esi, dword [sym.imp.WINMM.dll_timeGetTime]
call esi
sub eax, dword [esp + 0x120]
movsd xmm1, qword [esp + 0x128]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
addsd xmm0, qword [eax*8 + 0x4f44f0]
comisd xmm1, xmm0
ja 0x412fe8
divsd xmm0, xmm1
cvttsd2si eax, xmm0
mov word [esp + 0x124], ax
call esi
sub eax, dword [esp + 0x120]
movsd xmm0, qword [esp + 0x128]
movd xmm1, eax
cvtdq2pd xmm1, xmm1
shr eax, 0x1f
addsd xmm1, qword [eax*8 + 0x4f44f0]
comisd xmm0, xmm1
ja 0x412fe8
mov esi, dword [esp + 0x18]
call fcn.00420dc0
cmp byte [eax + 0x62], 0
je 0x412522
mov eax, dword fs:[0x2c]
mov ecx, dword [eax]
mov eax, dword [0x502e88]
cmp eax, dword [ecx + 4]
jle 0x413087
push 0x502e88
call fcn.0047d453
add esp, 4
cmp dword [0x502e88], 0xffffffff
jne 0x413087
push 0x6028
push 0
push 0x502e90
call fcn.0047ebc0
add esp, 0xc
mov byte [0x502e9c], 0
push 0x4c8500
call fcn.0047d765
add esp, 4
push 0x502e88
call fcn.0047d409
add esp, 4
mov ecx, 0x502e90
call fcn.00420060
call fcn.00442700
mov edi, eax
mov dword [esp + 0x14], 0
cmp byte [edi + 0x2f8], 0
jbe 0x4130de
xor esi, esi
nop dword [eax + eax]
mov ecx, dword [edi + 0x2f4]
push 1
push edi
add ecx, esi
call fcn.004466b0
mov ecx, dword [esp + 0x14]
add esi, 0x260
movzx eax, byte [edi + 0x2f8]
inc ecx
mov dword [esp + 0x14], ecx
cmp ecx, eax
jl 0x4130b0
mov esi, dword [esp + 0x18]
call fcn.0042dc50
mov edi, eax
mov dword [esp + 0x14], 0
cmp byte [edi + 0x474], 0
jbe 0x41312e
xor esi, esi
nop dword [eax + eax]
mov ecx, dword [edi + 0x470]
push 1
push edi
add ecx, esi
call fcn.004466b0
mov ecx, dword [esp + 0x14]
add esi, 0x260
movzx eax, byte [edi + 0x474]
inc ecx
mov dword [esp + 0x14], ecx
cmp ecx, eax
jl 0x413100
mov esi, dword [esp + 0x18]
movzx eax, word [esi]
push eax
call fcn.0043add0
mov ecx, eax
call fcn.0043af50
xor eax, eax
mov word [esi], ax
push 0x1b
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
cwde
test eax, 0x10000
jne 0x413143
mov ecx, dword [esp + 0x15c]
mov al, 1
pop edi
pop esi
xor ecx, esp
call fcn.0047d312
mov esp, ebp
pop ebp
ret 0xc