Function at 0x100c9ca0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x48
mov eax, dword [0x102a2000]
xor eax, ebp
mov dword [esp + 0x40], eax
call fcn.100a1f00
mov esi, eax
lea eax, [esp + 0x1c]
push eax
push dword [0x102a7378]
call dword [sym.imp.USER32.dll_GetClientRect]
movq xmm0, qword [esp + 0x1c]
movq xmm1, qword [esp + 0x24]
psubd xmm1, xmm0
cvtdq2ps xmm0, xmm1
movlps qword [esi + 8], xmm0
lea eax, [esp + 0x10]
push eax
call dword [sym.imp.KERNEL32.dll_QueryPerformanceCounter]
mov eax, dword [esp + 0x10]
mov ecx, dword [esp + 0x14]
mov edx, eax
sub edx, dword [0x102a7370]
mov edi, ecx
sbb edi, dword [0x102a7374]
movd xmm0, edi
movd xmm1, edx
punpckldq xmm1, xmm0
movq qword [esp + 8], xmm1
fild qword [esp + 8]
fstp dword [esp]
movss xmm0, dword [esp]
fild qword [0x102a7368]
fstp dword [esp + 4]
divss xmm0, dword [esp + 4]
movss dword [esi + 0x10], xmm0
mov dword [0x102a7374], ecx
mov dword [0x102a7370], eax
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x11
call edi
movzx eax, ax
shr eax, 0xf
mov byte [esi + 0xf8], al
push 0x10
call edi
movzx eax, ax
shr eax, 0xf
mov byte [esi + 0xf9], al
push 0x12
call edi
movzx eax, ax
shr eax, 0xf
mov byte [esi + 0xfa], al
mov byte [esi + 0xfb], 0
call fcn.100a1f00
mov edi, eax
cmp byte [eax + 0x353], 0
je 0x100c9dc4
movsd xmm0, qword [edi + 0xe0]
cvttps2dq xmm0, xmm0
movlps qword [esp + 0x2c], xmm0
lea eax, [esp + 0x2c]
push eax
push dword [0x102a7378]
call dword [sym.imp.USER32.dll_ClientToScreen]
push dword [esp + 0x30]
push dword [esp + 0x30]
call dword [sym.imp.USER32.dll_SetCursorPos]
mov dword [edi + 0xe0], 0xff7fffff
mov dword [edi + 0xe4], 0xff7fffff
call dword [sym.imp.USER32.dll_GetForegroundWindow]
test eax, eax
je 0x100c9e28
mov ecx, dword [0x102a7378]
cmp eax, ecx
je 0x100c9df8
push ecx
push eax
call dword [sym.imp.USER32.dll_IsChild]
test eax, eax
je 0x100c9e28
lea ebx, [esp + 0x2c]
push ebx
call dword [sym.imp.USER32.dll_GetCursorPos]
test eax, eax
je 0x100c9e28
push ebx
push dword [0x102a7378]
call dword [sym.imp.USER32.dll_ScreenToClient]
test eax, eax
je 0x100c9e28
movsd xmm0, qword [esp + 0x2c]
cvtdq2ps xmm0, xmm0
movlps qword [edi + 0xe0], xmm0
mov eax, 0xffffffff
cmp byte [esi + 0xa8], 0
je 0x100c9e43
cmp dword [0x102a1fdc], eax
jne 0x100c9e54
jmp 0x100c9ed6
call fcn.100adf80
cmp dword [0x102a1fdc], eax
je 0x100c9ed6
mov dword [0x102a1fdc], eax
call fcn.100a1f00
test byte [eax], 0x20
jne 0x100c9ed6
mov esi, eax
call fcn.100adf80
mov ecx, eax
xor eax, eax
cmp ecx, 0xffffffff
je 0x100c9ecf
cmp byte [esi + 0xa8], 0
jne 0x100c9ecf
dec ecx
cmp ecx, 7
ja case.default.0x100c9e82
jmp dword [ecx*4 + 0x10152cac]
mov eax, 0x7f01
jmp 0x100c9ec6
mov eax, 0x7f00
jmp 0x100c9ec6
mov eax, 0x7f86
jmp 0x100c9ec6
mov eax, 0x7f85
jmp 0x100c9ec6
mov eax, 0x7f84
jmp 0x100c9ec6
mov eax, 0x7f83
jmp 0x100c9ec6
mov eax, 0x7f82
jmp 0x100c9ec6
mov eax, 0x7f89
jmp 0x100c9ec6
mov eax, 0x7f88
push eax
push 0
call dword [sym.imp.USER32.dll_LoadCursorA]
push eax
call dword [sym.imp.USER32.dll_SetCursor]
call fcn.100a1f00
xorps xmm0, xmm0
movups xmmword [eax + 0x2fc], xmm0
movups xmmword [eax + 0x30c], xmm0
movups xmmword [eax + 0x31c], xmm0
movups xmmword [eax + 0x32c], xmm0
movups xmmword [eax + 0x33c], xmm0
mov dword [eax + 0x34c], 0
test byte [eax], 2
je 0x100ca0f6
mov esi, eax
cmp byte [0x102a737c], 0
je 0x100c9f28
movzx eax, byte [0x102a7391]
jmp 0x100c9f49
lea eax, [esp + 0x2c]
push eax
push 1
push 0
call sub.XINPUT1_3.dll_Ordinal_4
test eax, eax
sete al
sete byte [0x102a7391]
mov byte [0x102a737c], 1
and byte [esi + 4], 0xfe
test al, al
je 0x100ca0f6
lea eax, [esp + 0x2c]
push eax
push 0
call sub.XINPUT1_3.dll_Ordinal_2
test eax, eax
jne 0x100ca0f6
or byte [esi + 4], 1
movzx eax, word [esp + 0x30]
movd xmm0, eax
pshuflw xmm0, xmm0, 0
movdqa xmm3, xmmword [0x10152c70]
pand xmm3, xmm0
pxor xmm2, xmm2
pinsrw xmm2, eax, 2
pxor xmm1, xmm1
mov ecx, 0xffff
pinsrw xmm3, ecx, 2
and eax, 0x4000
pinsrw xmm3, eax, 3
movdqa xmm4, xmm2
pcmpeqw xmm4, xmm3
pshuflw xmm5, xmm4, 0x50
punpcklwd xmm4, xmm4
pcmpgtw xmm2, xmm3
punpcklwd xmm2, xmm2
shufps xmm2, xmm4, 0x32
shufps xmm5, xmm2, 0x84
movaps xmm2, xmmword [0x10146ad0]
andnps xmm5, xmm2
movups xmmword [esi + 0x2fc], xmm5
movdqa xmm3, xmmword [0x10152c80]
pand xmm3, xmm0
punpcklwd xmm3, xmm3
pcmpeqw xmm3, xmm1
pandn xmm3, xmm2
movdqu xmmword [esi + 0x30c], xmm3
pand xmm0, xmmword [0x10152c90]
pcmpeqw xmm0, xmm1
pshufd xmm0, xmm0, 0x44
pandn xmm0, xmmword [0x10146ad0]
movdqu xmmword [esi + 0x32c], xmm0
movsx eax, word [esp + 0x34]
lea ecx, [eax + 0x1ea9]
xorps xmm1, xmm1
cvtsi2ss xmm1, ecx
divss xmm1, dword [0x10152ca0]
movss xmm0, dword [0x10147700]
movaps xmm2, xmm0
minss xmm2, xmm1
xorps xmm1, xmm1
ucomiss xmm2, xmm1
jbe 0x100ca05d
ucomiss xmm2, dword [esi + 0x31c]
jbe 0x100ca05d
movss dword [esi + 0x31c], xmm2
add eax, 0xffffe157
xorps xmm3, xmm3
cvtsi2ss xmm3, eax
divss xmm3, dword [0x10152ca4]
movaps xmm2, xmm0
minss xmm2, xmm3
ucomiss xmm2, xmm1
jbe 0x100ca08e
ucomiss xmm2, dword [esi + 0x320]
jbe 0x100ca08e
movss dword [esi + 0x320], xmm2
movsx eax, word [esp + 0x36]
lea ecx, [eax - 0x1ea9]
xorps xmm1, xmm1
cvtsi2ss xmm1, ecx
divss xmm1, dword [0x10152ca4]
movaps xmm2, xmm0
minss xmm2, xmm1
xorps xmm1, xmm1
ucomiss xmm2, xmm1
jbe 0x100ca0c8
ucomiss xmm2, dword [esi + 0x324]
jbe 0x100ca0c8
movss dword [esi + 0x324], xmm2
add eax, 0x1ea9
xorps xmm2, xmm2
cvtsi2ss xmm2, eax
divss xmm2, dword [0x10152ca8]
minss xmm0, xmm2
ucomiss xmm0, xmm1
jbe 0x100ca0f6
ucomiss xmm0, dword [esi + 0x328]
jbe 0x100ca0f6
movss dword [esi + 0x328], xmm0
mov ecx, dword [esp + 0x40]
xor ecx, ebp
call fcn.100ea0d3
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret