Function at 0x402ff0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x54
mov eax, dword [0x40f09c]
push ebx
push esi
push edi
lea ecx, [eax - 0x3c]
mov eax, 0x88888889
imul ecx
add edx, ecx
mov eax, 0x88888889
sar edx, 4
mov ecx, edx
xor esi, esi
shr ecx, 0x1f
add edx, ecx
mov dword [esp + 0xc], esi
mov edi, edx
mov edx, dword [0x40f994]
mov dword [esp + 0x14], edi
mov dword [esp + 0x1c], esi
lea ecx, [edx - 0x3c]
mov dword [esp + 0x30], esi
imul ecx
fild dword [esp + 0x14]
fmul qword [0x40b1b0]
fstp qword [esp + 0x50]
add edx, ecx
mov esi, dword [ebp + 8]
sar edx, 4
mov eax, edx
mov dword [esp + 0x10], 1
shr eax, 0x1f
add edx, eax
mov dword [esp + 0x18], edi
mov ebx, edx
mov dword [esp + 0x20], ebx
mov dword [esp + 0x2c], ebx
fild dword [esp + 0x20]
fmul qword [0x40b1b0]
fstp qword [esp + 0x58]
mov eax, dword [0x4236b8]
mov dword [esp + 0x40], 0
mov dword [esp + 0x44], 0
mov dword [esp + 0x48], 0
mov dword [esp + 0x4c], 0
mov dword [esp + 0x28], 0x19
fld qword [esp + 0x40]
fadd qword [esp + 0x50]
test eax, eax
mov dword [esp + 0x24], 0
fstp qword [esp + 0x40]
fld qword [esp + 0x48]
fadd qword [esp + 0x58]
fstp qword [esp + 0x48]
jle 0x403176
fld qword [esp + 0x40]
call fcn.00403d80
mov edx, dword [esp + 0xc]
mov dword [esp + 0x3c], eax
fld qword [esp + 0x48]
lea ecx, [eax + edi]
add eax, edx
mov dword [esp + 0x34], ecx
mov dword [esp + 0x38], eax
call fcn.00403d80
mov ecx, dword [esp + 0x1c]
lea edi, [eax + ebx]
lea ebx, [eax + ecx]
push 0
call dword [sym.imp.GDI32.dll_CreateSolidBrush]
push eax
push esi
mov dword [0x40f974], eax
call dword [sym.imp.GDI32.dll_SelectObject]
mov edx, dword [esp + 0x34]
mov eax, dword [esp + 0x38]
push edi
push edx
push ebx
push eax
push esi
call dword [sym.imp.GDI32.dll_Ellipse]
mov eax, dword [0x40f09c]
mov edx, dword [esp + 0x3c]
sub eax, edx
mov edx, dword [esp + 0xc]
mov ecx, eax
push edi
sub ecx, edx
push ecx
mov ecx, dword [esp + 0x20]
sub eax, ecx
push ebx
dec eax
push eax
push esi
call dword [sym.imp.GDI32.dll_Ellipse]
mov edx, dword [0x40f974]
push edx
call dword [sym.imp.GDI32.dll_DeleteObject]
mov ecx, dword [esp + 0x24]
mov eax, dword [0x4236b8]
inc ecx
cmp ecx, eax
mov dword [esp + 0x24], ecx
jl 0x403102
mov edi, dword [esp + 0x18]
mov ebx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x10]
inc ecx
cmp ecx, 0xdc
mov dword [esp + 0x10], ecx
jle 0x40318f
mov dword [esp + 0x10], 1
mov ecx, dword [esp + 0x28]
dec ecx
mov dword [esp + 0x28], ecx
jne 0x4030a9
mov eax, 0x51eb851f
mov ecx, dword [esp + 0x14]
imul dword [0x40f09c]
sar edx, 5
mov eax, edx
push 0x1b
shr eax, 0x1f
add edx, eax
mov eax, dword [esp + 0x10]
sub ecx, edx
add eax, ecx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x18]
add edx, eax
mov eax, 0x51eb851f
add edi, edx
imul dword [0x40f994]
mov eax, dword [esp + 0x24]
mov dword [esp + 0x1c], edi
sar edx, 5
mov ecx, edx
shr ecx, 0x1f
add edx, ecx
mov ecx, dword [esp + 0x20]
sub eax, edx
add ecx, eax
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x24]
add edx, ecx
add ebx, edx
mov dword [esp + 0x30], ebx
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movsx edx, ax
cmp edx, dword [0x423694]
jne 0x403231
mov eax, dword [esp + 0x30]
inc eax
cmp eax, 0x14
mov dword [esp + 0x30], eax
jl 0x40307c
mov eax, 1
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
pop edi
pop esi
mov dword [0x40f978], 1
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret