Function at 0x408853
Capabilities:
Check for unmoving mouse cursor
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x20
push ebx
mov ebx, dword [ebp + 8]
mov eax, edx
push esi
mov esi, dword [ebp + 0x10]
mov edx, ecx
push edi
mov edi, dword [ebp + 0xc]
mov dword [ebp - 4], eax
mov dword [ebp - 0x14], edx
cmp edi, esi
jle 0x408880
mov eax, edi
sub eax, esi
cmp ebx, eax
jle 0x408890
jmp 0x408ca3
test ebx, ebx
je 0x408893
mov eax, edi
sub eax, esi
cmp ebx, eax
jg 0x408cab
mov eax, dword [ebp - 4]
cmp dword [ebp + 0x14], 0
jne 0x40891e
imul esi, eax, 0x12c
lea ecx, [eax + 1]
push 0x470168
push 0xa
mov dword [ebp - 8], ecx
movzx eax, byte [esi + 0x7efbb2]
push eax
movzx eax, byte [esi + 0x7efbb1]
sub eax, 0xa
push eax
movzx eax, byte [esi + 0x7efbb0]
push eax
push 0x21b
push ecx
push edx
call fcn.0040807f
movzx eax, byte [esi + 0x7efbb2]
movzx ecx, byte [esi + 0x7efbb3]
mov edx, dword [ebp - 4]
push 0x470170
push 0xa
push eax
movzx eax, byte [esi + 0x7efbb1]
add edx, 2
add ecx, eax
mov dword [ebp - 0xc], edx
movzx eax, byte [esi + 0x7efbb0]
push ecx
push eax
push 0x21b
push edx
push dword [ebp - 0x14]
call fcn.0040807f
mov esi, dword [ebp + 0x10]
add esp, 0x40
jmp 0x408931
lea ecx, [eax + 2]
inc eax
mov dword [ebp - 0xc], ecx
mov edx, ecx
mov ecx, eax
mov dword [ebp - 8], eax
call fcn.00408541
mov ecx, dword [ebp - 8]
call fcn.0040871e
test eax, eax
je 0x408941
test ebx, ebx
jg 0x408968
mov ecx, dword [ebp - 0xc]
mov edx, edi
sub edx, esi
mov dword [ebp - 0x1c], edx
call fcn.0040871e
test eax, eax
je 0x408958
cmp ebx, edx
jl 0x408980
xor ecx, ecx
inc ecx
call fcn.00407f28
test eax, eax
je 0x408970
test ebx, ebx
jle 0x408970
or eax, 0xffffffff
jmp 0x408cba
xor ecx, ecx
inc ecx
call fcn.00407f4f
test eax, eax
je 0x408988
cmp ebx, edx
jge 0x408988
xor eax, eax
inc eax
jmp 0x408cba
cmp byte [0x6b807a], 0
je 0x408b24
push 0x24
call dword [sym.imp.USER32.dll_GetKeyState]
test al, al
js 0x408cab
push 0x23
call dword [sym.imp.USER32.dll_GetKeyState]
test al, al
js 0x408ca3
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x21
call esi
and eax, 0x80
push 0x22
mov dword [ebp - 0xc], eax
call esi
imul edi, dword [ebp - 4], 0x12c
and eax, 0x80
mov dword [ebp - 8], eax
movzx edx, byte [edi + 0x7efbb1]
movzx eax, byte [edi + 0x7eff35]
movzx ecx, byte [edi + 0x7eff34]
sub eax, edx
push eax
movzx eax, byte [edi + 0x7eff36]
push eax
call fcn.0040879f
movzx edx, byte [edi + 0x7eff35]
movzx ecx, byte [edi + 0x7efbb3]
movzx esi, byte [edi + 0x7eff37]
sub ecx, edx
mov dword [ebp - 0x10], eax
add edx, esi
movzx eax, byte [edi + 0x7efbb1]
add ecx, eax
movzx eax, byte [edi + 0x7eff36]
sub ecx, esi
push ecx
movzx ecx, byte [edi + 0x7eff34]
push eax
call fcn.0040879f
add esp, 0x10
mov esi, eax
cmp dword [ebp - 0xc], 0
je 0x408a51
cmp dword [0x8014e0], 0
je 0x408a7e
jmp 0x408a6c
cmp dword [0x83e680], 0
jne 0x408a83
push 1
call dword [sym.imp.USER32.dll_GetKeyState]
test al, al
jns 0x408a83
cmp dword [ebp - 0x10], 0
je 0x408a83
call fcn.00449fee
sub eax, dword [0x83ee94]
cmp eax, 0xc8
jbe 0x408a83
xor edi, edi
inc edi
jmp 0x408a85
xor edi, edi
cmp dword [ebp - 8], 0
je 0x408a96
cmp dword [0x7efb9c], 0
je 0x408ac1
jmp 0x408aaf
cmp dword [0x83e680], 0
jne 0x408ac6
push 1
call dword [sym.imp.USER32.dll_GetKeyState]
test al, al
jns 0x408ac6
test esi, esi
je 0x408ac6
call fcn.00449fee
sub eax, dword [0x83ee94]
cmp eax, 0xc8
jbe 0x408ac6
xor esi, esi
inc esi
jmp 0x408ac8
xor esi, esi
test edi, edi
jne 0x408ad0
test esi, esi
je 0x408ada
call fcn.00449fee
mov dword [0x83ee94], eax
mov eax, dword [ebp - 0xc]
mov dword [0x8014e0], eax
mov eax, dword [ebp - 8]
mov dword [0x7efb9c], eax
test edi, edi
je 0x408b00
mov eax, dword [ebp + 0x10]
cmp ebx, eax
jl 0x408cab
neg eax
jmp 0x408cba
mov edi, dword [ebp + 0xc]
test esi, esi
mov esi, dword [ebp + 0x10]
je 0x408b24
cmp edi, esi
jle 0x408cb8
lea ecx, [ebx + esi*2]
cmp ecx, edi
jg 0x408ca3
mov eax, esi
jmp 0x408cba
test edi, edi
je 0x408b71
cmp edi, esi
jle 0x408b71
imul ecx, dword [ebp - 4], 0x12c
mov dword [ebp - 0xc], 0x46e093
mov dword [ebp + 0xc], ecx
movzx ecx, byte [ecx + 0x7efbb3]
lea eax, [ecx - 2]
imul eax, esi
cdq
idiv edi
add eax, 2
sub ecx, eax
mov dword [ebp - 8], eax
imul ecx, ebx
mov eax, ecx
cdq
idiv dword [ebp - 0x1c]
mov edx, eax
mov eax, dword [ebp + 0xc]
movzx ecx, byte [eax + 0x7efbb1]
add edx, ecx
mov dword [ebp - 0x10], edx
jmp 0x408b96
imul eax, dword [ebp - 4], 0x12c
mov dword [ebp - 0xc], 0x46e0cd
mov dword [ebp + 0xc], eax
movzx ecx, byte [eax + 0x7efbb1]
mov dword [ebp - 0x10], ecx
movzx ecx, byte [eax + 0x7efbb3]
mov dword [ebp - 8], ecx
push dword [ebp - 0xc]
mov esi, dword [ebp - 4]
mov ecx, eax
push dword [ebp - 8]
mov al, byte [eax + 0x7efbb0]
add esi, 3
movzx eax, al
movzx ecx, byte [ecx + 0x7efbb2]
sub ecx, 2
inc eax
push ecx
push dword [ebp - 0x10]
push eax
push 0x320
push esi
push dword [ebp - 0x14]
call fcn.0040807f
add esp, 0x20
mov ecx, esi
call fcn.00408757
test eax, eax
jne 0x408be5
cmp dword [0x83e680], eax
je 0x408cb1
xor esi, esi
inc esi
push esi
call dword [sym.imp.USER32.dll_GetKeyState]
test al, al
jns 0x408cb1
test edi, edi
je 0x408cb1
cmp dword [0x83e680], 0
jne 0x408c2b
lea eax, [ebp - 0x20]
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
mov eax, dword [ebp - 0x1c]
mov dword [0x83eedc], eax
mov dword [0x83e1f4], ebx
mov dword [0x83e680], esi
jmp 0x408cb8
mov ecx, dword [ebp + 0xc]
mov eax, dword [0x4a16e8]
sub eax, dword [0x4a16e0]
movzx ecx, byte [ecx + 0x7efbb3]
imul eax, ecx
mov ecx, 0xc8
cdq
idiv ecx
mov esi, eax
lea eax, [ebp - 0x18]
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
mov ecx, dword [ebp - 0x14]
sub ecx, dword [0x83eedc]
movd xmm1, ecx
mov ecx, dword [ebp - 0x1c]
mov eax, ecx
imul eax, esi
cvtdq2ps xmm1, xmm1
cdq
idiv edi
movd xmm0, eax
cvtdq2ps xmm0, xmm0
divss xmm1, xmm0
movd xmm0, ecx
cvtdq2ps xmm0, xmm0
mulss xmm1, xmm0
cvttss2si eax, xmm1
add eax, dword [0x83e1f4]
js 0x408cab
cmp eax, ecx
jg 0x408c9c
sub eax, ebx
jmp 0x408cba
mov esi, dword [ebp + 0x10]
cmp edi, esi
jl 0x408cb8
sub edi, ebx
sub edi, esi
mov eax, edi
jmp 0x408cba
neg ebx
mov eax, ebx
jmp 0x408cba
and dword [0x83e680], 0
xor eax, eax
pop edi
pop esi
pop ebx
leave
ret