Function at 0x10009881
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0xe4
mov dword [esp + 0x14], ecx
mov ecx, dword [0x101c176c]
push ebx
push esi
push edi
mov eax, dword [ecx]
mov eax, dword [eax + 0x68]
call eax
test al, al
je 0x10009cd5
mov edi, dword [0x101f764c]
mov ebx, edi
test ebx, ebx
je 0x10009cd5
mov eax, dword [0x101f7648]
test eax, eax
jne 0x100096c5
mov edx, 0xe80c2f78
mov ecx, 0x1014c9ed
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c915
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edi, dword [0x101f764c]
mov dword [0x101f7648], eax
cmp dword [eax + ebx], 0
jle 0x10009cd5
mov edx, 0xe80c2f78
mov ecx, 0x1014ca25
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c915
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov ecx, dword [0x101f75d0]
mov edx, dword [eax + edi]
mov eax, dword [ecx]
and edx, 0xfff
push edx
mov eax, dword [eax + 0xc]
call eax
mov ebx, eax
test ebx, ebx
je 0x10009cd5
mov eax, dword [0x101f76b0]
test eax, eax
jne 0x10009750
mov edx, 0xe80c2f78
mov ecx, 0x1019863d
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c985
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov dword [0x101f76b0], eax
cmp dword [eax + ebx], 0
jle 0x10009cd5
mov ecx, dword [0x101f7668]
mov eax, dword [ecx]
mov edi, dword [eax + 8]
mov eax, dword [0x101c1770]
test eax, eax
jne 0x100097a2
mov edx, 0xe80c2f78
mov ecx, 0x1014c999
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c9b1
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov ecx, dword [0x101f7668]
mov dword [0x101c1770], eax
movsx eax, word [eax + ebx]
push eax
call edi
test eax, eax
je 0x10009cd5
mov edi, dword [0x101f75e8]
test edi, edi
jne 0x100097ec
mov edx, 0xe80c2f78
mov ecx, 0x1014c96d
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c985
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edi, eax
mov dword [0x101f75e8], edi
mov eax, dword [0x101f764c]
mov dword [esp + 0x1c], eax
mov eax, dword [0x101f7650]
test eax, eax
jne 0x1000982c
mov edx, 0xe80c2f78
mov ecx, 0x1014ca19
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c915
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov dword [0x101f7650], eax
mov ecx, dword [esp + 0x1c]
movss xmm0, dword [edi + ebx]
movd xmm1, dword [eax + ecx]
mov eax, dword [0x101f75d8]
cvtdq2ps xmm1, xmm1
mulss xmm1, dword [eax + 0x20]
comiss xmm0, xmm1
ja 0x10009cd5
cmp byte [0x101be0b4], 0
jne 0x10009cd5
cmp byte [0x101f76a8], 0
je 0x10009cd5
mov ecx, dword [0x101be0b8]
mov eax, dword [0x101f76ac]
cmp ecx, 3
ja case.0x1000987a.0
jmp dword [ecx*4 + 0x10009cdc]
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
cwde
shr eax, 0x10
test eax, eax
setne al
jmp 0x100098b2
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x100098b2
push eax
call dword [sym.imp.USER32.dll_GetKeyState]
cwde
shr eax, 0x10
test eax, eax
sete al
test al, al
je 0x10009cd5
mov esi, dword [0x101f7644]
mov eax, dword [0x101f764c]
mov dword [esp + 0x50], 0
mov dword [esp + 0x4c], 0
mov dword [esp + 0x48], 0
mov dword [esp + 0x5c], 0
mov dword [esp + 0x58], 0
mov dword [esp + 0x54], 0
mov dword [esp + 0x68], 0
mov dword [esp + 0x64], 0
mov dword [esp + 0x60], 0
mov dword [esp + 0xa8], 0
mov dword [esp + 0xa4], 0
mov dword [esp + 0xa0], 0
mov dword [esp + 0xb8], 0
mov dword [esp + 0xb4], 0
mov dword [esp + 0xb0], 0
mov dword [esp + 0xc8], 0
mov dword [esp + 0xc4], 0
mov dword [esp + 0xc0], 0
mov dword [esp + 0xd8], 0
mov dword [esp + 0xd4], 0
mov dword [esp + 0xd0], 0
mov dword [esp + 0x34], vtable.trace_filter.0
mov dword [esp + 0x24], eax
test esi, esi
jne 0x100099d6
mov edx, 0xe80c2f78
mov ecx, 0x1014c9f9
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c93d
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov esi, eax
mov eax, dword [esp + 0x24]
mov dword [0x101f7644], esi
mov edi, dword [esp + 0x20]
movss xmm0, dword [edi + 0xc]
addss xmm0, dword [esi + eax]
mulss xmm0, dword [0x101b8268]
movss dword [esp + 0x18], xmm0
call fcn.10009630
mov eax, dword [esp + 0x24]
movss dword [esp + 0x1c], xmm0
movss xmm0, dword [esi + eax + 4]
addss xmm0, dword [edi + 0x10]
mulss xmm0, dword [0x101b8268]
movss dword [esp + 0x20], xmm0
call fcn.10009630
mulss xmm0, dword [esp + 0x1c]
movss dword [esp + 0x24], xmm0
movss xmm0, dword [esp + 0x20]
call fcn.10009640
mulss xmm0, dword [esp + 0x1c]
movss dword [esp + 0x20], xmm0
movss xmm0, dword [esp + 0x18]
call fcn.10009640
mov ecx, dword [0x101f7668]
movss dword [esp + 0x1c], xmm0
mov eax, dword [ecx]
mov eax, dword [eax + 8]
mov dword [esp + 0x18], eax
mov eax, dword [0x101c1770]
test eax, eax
jne 0x10009a9f
mov edx, 0xe80c2f78
mov ecx, 0x1014c999
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c9b1
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov ecx, dword [0x101f7668]
mov dword [0x101c1770], eax
movsx eax, word [eax + ebx]
push eax
call dword [esp + 0x1c]
mov ecx, dword [0x101f764c]
movss xmm0, dword [eax + 0x10c]
lea eax, [esp + 0x28]
push eax
movss dword [esp + 0x1c], xmm0
mov dword [esp + 0x3c], ecx
call fcn.10003b00
movss xmm4, dword [esp + 0x18]
lea ecx, [esp + 0xa0]
movaps xmm2, xmm4
mulss xmm2, dword [esp + 0x24]
movss xmm0, dword [eax]
movss xmm3, dword [eax + 8]
movss xmm1, dword [eax + 4]
addss xmm2, xmm0
movss dword [esp + 0x3c], xmm0
lea eax, [esp + 0x28]
movaps xmm0, xmm4
movss dword [esp + 0x44], xmm3
mulss xmm0, dword [esp + 0x20]
push eax
mulss xmm4, dword [esp + 0x20]
lea eax, [esp + 0x40]
push eax
addss xmm0, xmm1
movss dword [esp + 0x48], xmm1
movss dword [esp + 0x30], xmm2
subss xmm3, xmm4
movss dword [esp + 0x34], xmm0
movss dword [esp + 0x38], xmm3
call fcn.100039d0
mov ecx, dword [0x101f75d4]
lea edx, [esp + 0x48]
push edx
lea edx, [esp + 0x38]
push edx
mov eax, dword [ecx]
lea edx, [esp + 0xa8]
push 0x46004003
push edx
call dword [eax + 0x14]
mov edx, dword [esp + 0x94]
test edx, edx
je 0x10009cd5
mov eax, dword [0x101f7648]
mov ebx, edx
test eax, eax
jne 0x10009bad
mov edx, 0xe80c2f78
mov ecx, 0x1014c9ed
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c915
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edx, dword [esp + 0x94]
mov dword [0x101f7648], eax
cmp dword [ebx + eax], 0
jle 0x10009cd5
mov ecx, dword [0x101f75cc]
mov ebx, edx
test ecx, ecx
jne 0x10009bfb
mov edx, 0xe80c2f78
mov ecx, 0x1014c961
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c921
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edx, dword [esp + 0x94]
mov ecx, eax
mov dword [0x101f75cc], ecx
mov eax, dword [0x101f764c]
add ebx, ecx
mov dword [esp + 0x18], eax
test ecx, ecx
jne 0x10009c42
mov edx, 0xe80c2f78
mov ecx, 0x1014c961
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c921
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edx, dword [esp + 0x94]
mov ecx, eax
mov dword [0x101f75cc], ecx
mov esi, dword [esp + 0x18]
mov eax, dword [ebx]
cmp eax, dword [esi + ecx]
je 0x10009cd5
mov eax, dword [0x101c1774]
mov ebx, edx
test eax, eax
jne 0x10009c91
mov edx, 0xe80c2f78
mov ecx, 0x1014c9c9
call fcn.10003ad0
mov edx, 0xc10bf213
mov ecx, 0x1014c915
mov esi, eax
call fcn.10003ad0
mov edx, esi
mov ecx, eax
call fcn.100abe50
mov edx, dword [esp + 0x94]
mov dword [0x101c1774], eax
cmp byte [eax + ebx], 0
jne 0x10009cd5
mov eax, dword [edx + 8]
lea ecx, [edx + 8]
mov eax, dword [eax + 0x24]
call eax
test al, al
jne 0x10009cd5
mov ecx, dword [esp + 0x94]
mov eax, dword [ecx]
mov eax, dword [eax + 0x278]
call eax
test al, al
je 0x10009cd5
mov eax, dword [esp + 0x8c]
cmp eax, 1
je 0x10009cd1
cmp eax, 2
je 0x10009cd1
cmp eax, 3
jne 0x10009cd5
or dword [edi + 0x30], 1
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret