Function at 0x10087639
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword fs:[0x2c]
mov edx, dword [0x1024b2f0]
push ebx
push ebp
push esi
mov esi, dword [eax + edx*4]
mov ebx, ecx
mov eax, dword [0x10288750]
push edi
cmp eax, dword [esi + 4]
jle 0x100875b0
push 0x10288750
call fcn.1018b6e4
add esp, 4
cmp dword [0x10288750], 0xffffffff
jne 0x100875b0
push 0x10193d70
mov dword [0x102886a4], 0
mov dword [0x102886a0], 0
mov dword [0x1028869c], 0
call fcn.1018b648
add esp, 4
push 0x10288750
call fcn.1018b693
add esp, 4
mov eax, dword [0x102886f8]
cmp eax, dword [esi + 4]
jle 0x1008760b
push 0x102886f8
call fcn.1018b6e4
add esp, 4
cmp dword [0x102886f8], 0xffffffff
jne 0x1008760b
push 0x10193d60
mov dword [0x10288768], 0
mov dword [0x10288764], 0
mov dword [0x10288760], 0
call fcn.1018b648
add esp, 4
push 0x102886f8
call fcn.1018b693
add esp, 4
cmp byte [0x10281da6], 0
lea edi, [ebx + 0x30]
mov eax, dword [edi]
mov dword [0x1027cc70], eax
je 0x10087671
mov ecx, dword [0x10247350]
mov eax, dword [0x1028165c]
cmp ecx, 3
ja case.0x10087632.0
jmp dword [ecx*4 + 0x10087878]
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
cwde
shr eax, 0x10
test eax, eax
setne al
jmp 0x1008766a
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x1008766a
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
cwde
shr eax, 0x10
test eax, eax
sete al
test al, al
jne case.0x10087632.0
lea edi, [ebx + 0x30]
cmp byte [0x10281d54], 0
je 0x10087854
mov ecx, dword [0x1024b32c]
push 0x10288760
mov eax, dword [ecx]
mov eax, dword [eax + 0x4c]
call eax
cmp byte [0x10281dac], 0
movss xmm0, dword [0x1028869c]
movss dword [ebx + 0xc], xmm0
movss xmm0, dword [0x102886a0]
movss dword [ebx + 0x10], xmm0
movss xmm0, dword [0x102886a4]
movss dword [ebx + 0x14], xmm0
je 0x1008781c
or dword [edi], 4
add ebx, 0x30
jmp 0x1008781e
mov ebp, dword [0x10281360]
test ebp, ebp
je 0x10087872
mov eax, dword [0x1028135c]
test eax, eax
jne 0x10087714
mov edx, 0xe80c2f78
mov ecx, 0x10219689
call fcn.10004f10
mov edx, 0xc10bf213
mov ecx, 0x102195b1
mov esi, eax
call fcn.10004f10
mov edx, esi
mov ecx, eax
call fcn.10127750
mov dword [0x1028135c], eax
cmp dword [eax + ebp], 0
jle 0x10087872
movss xmm0, dword [0x1028869c]
xorps xmm1, xmm1
ucomiss xmm0, xmm1
lahf
test ah, 0x44
jp 0x100877a2
movss xmm0, dword [0x102886a0]
ucomiss xmm0, xmm1
lahf
test ah, 0x44
jp 0x100877a2
movss xmm0, dword [0x102886a4]
ucomiss xmm0, xmm1
lahf
test ah, 0x44
jp 0x100877a2
movss xmm0, dword [ebx + 0xc]
mov eax, dword [esp + 0x1c]
movss dword [0x1028869c], xmm0
movss xmm0, dword [ebx + 0x10]
movss dword [0x102886a0], xmm0
movss xmm0, dword [ebx + 0x14]
movss dword [0x102886a4], xmm0
movq xmm0, qword [esp + 0x14]
movq qword [0x10288760], xmm0
mov dword [0x10288768], eax
mov ecx, dword [edi]
shr ecx, 2
and cl, 1
mov byte [0x10281dac], cl
jmp 0x100877a8
mov cl, byte [0x10281dac]
xor eax, eax
mov dword [ebx + 0x24], 0
mov dword [ebx + 0x28], 0
mov dword [edi], 0
test cl, cl
je 0x100877cd
mov dword [edi], 4
mov eax, 4
cmp byte [0x10281d55], 0
je 0x100877db
or eax, 1
mov dword [edi], eax
cmp byte [0x10281d44], 0
je 0x100877e9
or eax, 0x20
mov dword [edi], eax
movss xmm0, dword [0x1028869c]
movss dword [ebx + 0xc], xmm0
movss xmm0, dword [0x102886a0]
movss dword [ebx + 0x10], xmm0
movss xmm0, dword [0x102886a4]
movss dword [ebx + 0x14], xmm0
mov byte [0x10281d54], 1
pop edi
pop esi
pop ebp
pop ebx
ret
mov ebx, edi
cmp byte [0x10281d55], 0
je 0x1008782c
or dword [edi], 1
mov edi, ebx
cmp byte [0x10281d44], 0
je 0x10087838
or dword [edi], 0x20
mov byte [0x10281dac], 0
mov byte [0x10281d55], 0
mov byte [0x10281d44], 0
mov byte [0x10281d54], 0
mov dword [0x1028869c], 0
mov dword [0x102886a0], 0
mov dword [0x102886a4], 0
pop edi
pop esi
pop ebp
pop ebx
ret