Function at 0x10070380
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword [0x1021b6b0]
cmp byte [eax], 0
je 0x1007064d
mov ecx, dword [0x113f18c]
push esi
mov esi, dword [eax + 0x18]
imul edx, esi, 0x380
imul eax, dword [ecx], 0x380
add edx, ecx
add eax, ecx
cmp edx, eax
je 0x1007064c
test byte [edx + 0xa53b8], 2
je 0x1007064c
test dword [edx + 0xa5220], 0x40000
jne 0x1007064c
imul eax, esi, 0x330
cmp byte [eax + 0x1014ee98], 0
je 0x1007064c
cmp byte [eax + 0x1014ee9a], 0
je 0x1007064c
mov eax, dword [0x1014d3d4]
mov al, byte [eax + 0x19c]
test al, al
jne 0x1007042c
mov eax, dword [0x1014d3d4]
mov al, byte [eax + 0x19c]
test al, al
jne 0x1007064c
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x198]
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
jae 0x1007064c
mov eax, dword [0x113f18c]
add eax, 0x480a8
push eax
call dword [0x1014ed84]
add esp, 4
test al, al
jne 0x10070486
mov ecx, dword [0x113f18c]
mov eax, dword [ecx + 0x48278]
sub eax, 0xb
cmp eax, 8
jb 0x1007064c
mov eax, dword [ecx + 0x4827c]
sub eax, 0xb
cmp eax, 8
jb 0x1007064c
lea eax, [ecx + 0x480a8]
push eax
call dword [0x1014ed8c]
add esp, 4
test eax, eax
je 0x1007064c
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1dc]
movss xmm1, dword [0x100fcbcc]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
mov eax, dword [0x1021b6b0]
divss xmm0, xmm1
mulss xmm0, dword [eax + 0x2c]
movss dword [eax + 0x2c], xmm0
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1dc]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
mov eax, dword [0x1021b6b0]
divss xmm0, xmm1
mulss xmm0, dword [eax + 0x30]
movss dword [eax + 0x30], xmm0
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1dc]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
mov eax, dword [0x1021b6b0]
divss xmm0, xmm1
mulss xmm0, dword [eax + 0x34]
movss dword [eax + 0x34], xmm0
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1a0]
mov eax, dword [0x1014d3d4]
mov edx, dword [0x1021b6b0]
mov eax, dword [eax + 0x1a0]
movd xmm1, dword [edx + 4]
movd xmm0, eax
cvtdq2ps xmm1, xmm1
mov ecx, dword [0x1021b6b0]
cvtdq2ps xmm0, xmm0
divss xmm1, xmm0
mulss xmm1, dword [ecx + 0x2c]
movss dword [ecx + 0x2c], xmm1
mov eax, dword [0x1014d3d4]
mov edx, dword [0x1021b6b0]
mov eax, dword [eax + 0x1a0]
movd xmm1, dword [edx + 4]
movd xmm0, eax
cvtdq2ps xmm1, xmm1
mov ecx, dword [0x1021b6b0]
cvtdq2ps xmm0, xmm0
divss xmm1, xmm0
mulss xmm1, dword [ecx + 0x30]
movss dword [ecx + 0x30], xmm1
mov eax, dword [0x1014d3d4]
mov edx, dword [0x1021b6b0]
mov eax, dword [eax + 0x1a0]
movd xmm1, dword [edx + 4]
movd xmm0, eax
cvtdq2ps xmm1, xmm1
mov ecx, dword [0x1021b6b0]
cvtdq2ps xmm0, xmm0
divss xmm1, xmm0
mulss xmm1, dword [ecx + 0x34]
movss dword [ecx + 0x34], xmm1
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1ac]
mov ecx, dword [0x1021b6b0]
cmp dword [ecx + 8], eax
jne 0x10070620
cmp byte [ecx + 1], 0
je 0x10070620
mov eax, dword [0x113f18c]
movss xmm0, dword [ecx + 0x2c]
addss xmm0, dword [eax - 0x19bc6c4]
movss dword [eax - 0x19bc6c4], xmm0
mov eax, dword [0x1021b6b0]
mov ecx, dword [0x113f18c]
movss xmm0, dword [eax + 0x30]
addss xmm0, dword [ecx - 0x19bc6c0]
movss dword [ecx - 0x19bc6c0], xmm0
mov eax, dword [0x1021b6b0]
mov ecx, dword [0x113f18c]
movss xmm0, dword [eax + 0x34]
addss xmm0, dword [ecx - 0x19bc6bc]
movss dword [ecx - 0x19bc6bc], xmm0
mov ecx, dword [0x1021b6b0]
mov eax, dword [0x1014d3d4]
mov eax, dword [eax + 0x1b4]
cmp dword [ecx + 0xc], eax
jne 0x1007064c
mov eax, dword [0x1014d3d4]
mov al, byte [eax + 0x1b0]
test al, al
je 0x1007064c
push 1
push 0
call dword [0x1014ed90]
add esp, 8
pop esi
ret