Function at 0x10091440
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x14
push ebx
mov ebx, ecx
push esi
push edi
mov dword [ebp - 8], ebx
mov edi, dword [ebx]
test edi, edi
je 0x1009171e
mov eax, dword fs:[0x2c]
mov edx, dword [0x101e14f0]
mov esi, dword [eax + edx*4]
mov eax, dword [0x101e26ec]
cmp eax, dword [esi + 4]
jle 0x100914a1
push 0x101e26ec
call fcn.100b5535
add esp, 4
cmp dword [0x101e26ec], 0xffffffff
jne 0x100914a1
mov eax, dword [0x101e2700]
push 0x101e26ec
mov dword [0x101e26f0], eax
call fcn.100b54eb
add esp, 4
mov eax, dword [0x101e26f0]
mov eax, dword [edi + eax]
mov dword [ebp - 4], eax
mov eax, dword [0x101dfe94]
inc eax
cmp eax, 3
ja case.default.0x100914bb
jmp dword [eax*4 + 0x10091794]
push dword [0x101dfe90]
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
jmp 0x100914dc
push dword [0x101dfe90]
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
test al, al
je case.default.0x100914bb
mov ecx, dword [0x101e274c]
mov edi, dword [0x101e094c]
cmp ecx, dword [esi + 4]
jle 0x10091533
push 0x101e274c
call fcn.100b5535
mov ecx, dword [0x101e274c]
add esp, 4
cmp ecx, 0xffffffff
jne 0x10091533
mov eax, dword [0x101e2758]
push 0x101e274c
mov dword [0x101e2750], eax
call fcn.100b54eb
mov ecx, dword [0x101e274c]
add esp, 4
mov eax, dword [0x101e2750]
cmp word [edi + eax], 9
je case.default.0x100914bb
mov edi, dword [0x101e094c]
cmp ecx, dword [esi + 4]
jle 0x1009157a
push 0x101e274c
call fcn.100b5535
add esp, 4
cmp dword [0x101e274c], 0xffffffff
jne 0x1009157a
mov eax, dword [0x101e2758]
push 0x101e274c
mov dword [0x101e2750], eax
call fcn.100b54eb
add esp, 4
mov eax, dword [0x101e2750]
cmp word [edi + eax], 0x28
je case.default.0x100914bb
mov cl, 1
jmp 0x1009158c
xor cl, cl
mov eax, dword [ebp - 4]
push dword [ebx]
cdq
sub eax, edx
sar eax, 1
test cl, cl
cmove eax, dword [ebp - 4]
mov dword [ebp - 0x14], eax
call fcn.1008f7b0
mov dword [ebx + 0x10], 0
mov word [ebx + 0x14], 0
mov dword [ebx + 0x18], 0xffffffff
mov dword [ebx + 0x1c], 0
mov dword [ebx + 0x20], 0
mov dword [ebx + 0x24], 0
mov dword [ebx + 0x28], 0
mov dword [ebx + 0x34], 0
mov dword [ebx + 0x30], 0
mov dword [ebx + 0x2c], 0
mov ecx, dword [ebx + 4]
mov dword [ebp - 0xc], eax
cmp ecx, dword [ebx + 8]
je 0x1009171e
mov esi, dword [ebx + 8]
mov eax, 0x66666667
push dword [ebp - 0x14]
sub esi, ecx
imul esi
sar edx, 4
mov eax, edx
shr eax, 0x1f
add eax, edx
mov edx, dword [ebx + 8]
push eax
call fcn.10093150
mov esi, dword [ebx + 8]
mov eax, 0x66666667
mov ecx, dword [ebx + 4]
sub esi, ecx
push dword [ebp - 0x14]
imul esi
sar edx, 4
mov eax, edx
shr eax, 0x1f
add eax, edx
mov edx, dword [ebx + 8]
push eax
call fcn.100933f0
mov edi, dword [ebp - 8]
add esp, 0x10
mov ebx, dword [ebx + 4]
mov esi, dword [edi + 8]
mov dword [ebp - 4], esi
cmp ebx, esi
je 0x100916d7
mov eax, dword [ebp - 0xc]
cmp dword [ebx + 0x10], eax
jl case.0x1009166f.0
cmp byte [ebx + 1], 0
jne case.default.0x1009166f
mov eax, dword [0x101e0014]
inc eax
cmp eax, 3
ja case.default.0x1009166f
jmp dword [eax*4 + 0x100917a4]
push dword [0x101e0010]
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
jmp 0x10091690
push dword [0x101e0010]
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
test al, al
jne case.0x1009166f.0
mov ecx, dword [edi]
add ecx, 8
mov eax, dword [ecx]
call dword [eax + 0x28]
imul eax, eax, 0x58
cmp byte [0x101dd0a2], 0
mov dword [ebp - 0x10], eax
je 0x10091725
cmp byte [ebx + 1], 0
jne 0x10091758
cmp dword [eax + 0x101e4a8c], 1
jne 0x1009172b
mov dword [ebx + 0xc], 0xfffffffe
add ebx, 0x28
cmp ebx, esi
jne 0x10091656
mov ebx, dword [edi + 4]
mov edi, dword [edi + 8]
mov eax, 0x66666667
push dword [ebp - 0x14]
mov esi, edi
mov ecx, ebx
sub esi, ebx
imul esi
sar edx, 4
mov eax, edx
shr eax, 0x1f
add eax, edx
mov edx, edi
push eax
call fcn.10093670
mov ecx, dword [ebp - 8]
add esp, 8
mov eax, dword [ecx + 4]
movups xmm0, xmmword [eax]
movups xmmword [ecx + 0x10], xmm0
movups xmm0, xmmword [eax + 0x10]
movups xmmword [ecx + 0x20], xmm0
movq xmm0, qword [eax + 0x20]
movq qword [ecx + 0x30], xmm0
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp byte [ebx + 1], 0
jne 0x10091758
mov ecx, dword [edi]
mov esi, dword [0x101e2528]
add ecx, 8
mov eax, dword [ecx]
call dword [eax + 0x28]
cmp dword [esi + eax*4 + 0xee4], 1
mov esi, dword [ebp - 4]
jle 0x10091758
mov eax, dword [ebp - 0x10]
cmp dword [eax + 0x101e4a8c], 2
je case.0x1009166f.0
cmp byte [ebx + 2], 0
mov dword [ebx + 0xc], 1
je 0x10091771
mov dword [ebx + 0xc], 0xffffffff
jmp 0x100916cd
cmp byte [ebx + 1], 0
je 0x100916cd
mov eax, dword [ebp - 0x14]
cmp dword [ebx + 0x10], eax
jl 0x100916cd
mov dword [ebx + 0xc], 3
jmp 0x100916cd