Function at 0x4a7f40
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x5a90e0
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x50
push ebx
push ebp
push esi
mov esi, ecx
push edi
xor edi, edi
cmp dword [esi + 0x8540], edi
je 0x4a84f9
mov eax, dword [esi + 0xa454]
push 0x60c3cc
push eax
call fcn.004a3b30
test eax, eax
jne 0x4a7fd4
mov ecx, dword [esi + 0xa454]
push 0x60c3c4
push ecx
mov ecx, esi
call fcn.004a3b30
test eax, eax
jne 0x4a7fd4
mov edx, dword [esi + 0xa454]
push 0x60c438
push edx
mov ecx, esi
call fcn.004a3b30
test eax, eax
jne 0x4a7fd4
mov dword [esi + 0x8540], edi
mov dword [esi + 0xa440], edi
mov ecx, dword [esp + 0x60]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [esi + 0x9d10]
mov ecx, esi
mov dword [esi + 0x9d18], eax
mov dword [esi + 0x9d14], eax
call fcn.00477760
mov edi, eax
mov ecx, esi
sub edi, 2
neg edi
sbb edi, edi
and edi, 2
dec edi
imul edi, dword [esi + 0x8540]
call fcn.004769b0
mov eax, dword [esi + 0x8568]
imul eax, edi
mov dword [esp + 0x14], eax
fild dword [esp + 0x14]
faddp st(1)
call fcn.00556a00
mov ebp, eax
mov eax, dword [esi + 0x9dfc]
lea ecx, [esp + 0x34]
mov dword [esp + 0x10], ebp
mov edx, dword [eax + 0x1c]
push ecx
push edx
call dword [sym.imp.USER32.dll_GetClientRect]
mov eax, dword [esp + 0x3c]
mov edx, dword [esp + 0x34]
sub eax, edx
imul eax, dword [esi + 0xa070]
cdq
and edx, 0x7ff
add eax, edx
mov ebx, eax
sar ebx, 0xb
cmp ebp, 0x64
jge 0x4a80ba
mov eax, dword [esi + 0x8550]
test eax, eax
jne 0x4a8077
mov eax, dword [esi + 0xa440]
test eax, eax
je 0x4a84f9
mov eax, dword [esi + 0xa440]
test eax, eax
je 0x4a808a
lea ebp, [ebx - 0x14]
mov dword [esp + 0x10], ebp
jmp 0x4a80ba
mov eax, dword [esi + 0x8540]
add ebp, 0x28
neg eax
mov ecx, esi
mov dword [esp + 0x10], ebp
mov dword [esi + 0x8540], eax
call fcn.00477760
mov edi, eax
sub edi, 2
neg edi
sbb edi, edi
and edi, 2
dec edi
imul edi, dword [esi + 0x8540]
cmp ebp, ebx
jle 0x4a811b
mov eax, dword [esi + 0x8550]
test eax, eax
jne 0x4a80d6
mov eax, dword [esi + 0xa440]
test eax, eax
je 0x4a84f9
mov eax, dword [esi + 0xa440]
test eax, eax
je 0x4a80eb
mov ebp, 0x78
mov dword [esp + 0x10], ebp
jmp 0x4a811b
mov ecx, dword [esi + 0x8540]
sub ebp, 0x28
neg ecx
mov dword [esi + 0x8540], ecx
mov ecx, esi
mov dword [esp + 0x10], ebp
call fcn.00477760
mov edi, eax
sub edi, 2
neg edi
sbb edi, edi
and edi, 2
dec edi
imul edi, dword [esi + 0x8540]
fild dword [esp + 0x10]
push 0
push ecx
mov ecx, dword [esi + 0x9dfc]
fmul qword [0x5baf90]
fidiv dword [esi + 0xa070]
fadd qword [0x5baea0]
fstp dword [esp]
call fcn.004c1850
fstp qword [esp + 0x14]
mov dword [esi + 0x8568], 0x14
mov edx, dword [esi + 0x8568]
mov dword [esp + 0x20], ebp
imul edx, edi
add ebp, edx
push 0
mov dword [esp + 0x14], ebp
push ecx
fild dword [esp + 0x18]
mov ecx, dword [esi + 0x9dfc]
fmul qword [0x5baf90]
fidiv dword [esi + 0xa070]
fadd qword [0x5baea0]
fstp dword [esp]
call fcn.004c1850
fstp qword [esp + 0x24]
fld qword [esp + 0x14]
fsub qword [esp + 0x24]
fabs
fcomp qword [0x5bcf08]
fnstsw ax
test ah, 1
jne 0x4a81e7
mov eax, dword [esi + 0x8550]
test eax, eax
jg 0x4a84ad
mov eax, dword [esi + 0xa440]
test eax, eax
jne 0x4a84ad
cmp ebp, 0x64
jl 0x4a8490
cmp ebp, ebx
jg 0x4a8490
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x28]
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], ecx
jmp 0x4a8150
mov edi, dword [esi + 0xa150]
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
fld qword [esp + 0x24]
fadd qword [esp + 0x14]
and eax, 0x8000
xor edx, edx
cmp eax, 0x8000
mov ecx, esi
sete dl
xor edx, edi
push edx
push 3
fmul qword [0x5baea0]
sub esp, 8
fstp qword [esp]
call fcn.0046deb0
mov eax, dword [esi + 0xa440]
test eax, eax
je 0x4a8457
mov eax, dword [esi + 0xa410]
mov edi, 2
neg eax
sbb eax, eax
mov ebx, 1
and eax, edi
push ebx
mov ecx, esi
mov dword [esi + 0xa440], eax
mov dword [esi + 0xa40c], 6
call fcn.004a8590
mov eax, dword [esi + 0xa428]
test eax, eax
jne 0x4a8278
mov eax, dword [esi + 0xa434]
test eax, eax
je 0x4a8457
mov eax, dword [0x614cb0]
mov dword [esp + 0x14], eax
mov dword [esp + 0x68], 0
mov dword [esp + 0x10], eax
push 0x600944
lea ecx, [esp + 0x14]
mov byte [esp + 0x6c], bl
call fcn.00575ec4
mov eax, dword [esi + 0xa428]
test eax, eax
je 0x4a82e0
lea eax, [esp + 0x20]
push str.__H:_M:_Sz_
lea ecx, [esp + 0x28]
push eax
push ecx
call fcn.0056d982
mov ecx, eax
call fcn.0056da98
push eax
lea ecx, [esp + 0x14]
mov byte [esp + 0x6c], 2
call fcn.00575f00
lea ecx, [esp + 0x20]
mov byte [esp + 0x68], bl
call fcn.00575ae8
mov eax, dword [esi + 0xa434]
test eax, eax
je 0x4a8387
mov edx, dword [esi + 0xa788]
mov eax, dword [esi + 0xa78c]
mov ecx, esi
mov dword [esp + 0x24], edx
mov dword [esp + 0x28], eax
call fcn.00477760
sub eax, 0
je 0x4a835a
dec eax
je 0x4a8337
dec eax
jne 0x4a8379
mov ecx, esi
call fcn.004769b0
fsubr qword [esp + 0x24]
sub esp, 8
lea ecx, [esp + 0x1c]
fmul qword [0x5bafe8]
fstp qword [esp]
push str.__11.3f_KHz_
push ecx
jmp 0x4a8371
mov ecx, esi
call fcn.004769b0
fadd qword [esp + 0x24]
sub esp, 8
lea edx, [esp + 0x1c]
fmul qword [0x5bafe8]
fstp qword [esp]
push str.__11.3f_KHz_
push edx
jmp 0x4a8371
mov ecx, esi
call fcn.004769b0
sub esp, 8
lea eax, [esp + 0x1c]
fstp qword [esp]
push str.__4.0f_Hz_
push eax
call fcn.0056d732
add esp, 0x10
lea ecx, [esp + 0x14]
push ecx
lea ecx, [esp + 0x14]
call fcn.00575f00
push 0x600944
lea ecx, [esp + 0x14]
call fcn.00575ec4
mov edx, dword [esp + 0x10]
mov eax, dword [esi + 0x9d10]
push edx
lea ecx, [esp + 0x48]
mov dword [esi + 0x9d18], eax
mov dword [esi + 0x9d14], eax
call fcn.00529170
mov ecx, eax
mov byte [esp + 0x68], 3
call fcn.0052a040
mov cx, word [eax]
test cx, cx
je 0x4a842b
mov edx, dword [esi + 0x9d14]
add eax, edi
mov word [edx], cx
mov ecx, dword [esi + 0x9d14]
add ecx, edi
mov dword [esi + 0x9d14], ecx
mov edx, ecx
mov ecx, dword [esi + 0x9d1c]
cmp edx, ecx
jne 0x4a83fa
mov edx, dword [esi + 0x9d10]
mov dword [esi + 0x9d14], edx
mov edx, dword [esi + 0x9d18]
mov ebp, dword [esi + 0x9d14]
cmp ebp, edx
jne 0x4a8423
add edx, 2
cmp edx, ecx
mov dword [esi + 0x9d18], edx
jne 0x4a8423
mov ecx, dword [esi + 0x9d10]
mov dword [esi + 0x9d18], ecx
mov cx, word [eax]
test cx, cx
jne 0x4a83c9
lea ecx, [esp + 0x44]
mov byte [esp + 0x68], bl
call fcn.00529210
lea ecx, [esp + 0x10]
mov byte [esp + 0x68], 0
call fcn.00575ae8
lea ecx, [esp + 0x14]
mov dword [esp + 0x68], 0xffffffff
call fcn.00575ae8
mov ecx, esi
call fcn.004a7eb0
mov eax, dword [esi + 0xa41c]
lea ecx, [eax + eax*4]
mov eax, 0x55555556
shl ecx, 1
imul ecx
mov eax, edx
shr eax, 0x1f
add edx, eax
mov dword [esi + 0xa444], edx
mov ecx, dword [esp + 0x60]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
mov dword [esi + 0x8540], 0
mov ecx, dword [esp + 0x60]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
fild dword [esp + 0x20]
push 0
push 3
sub esp, 8
mov ecx, esi
fstp qword [esp]
call fcn.0046deb0
mov edx, dword [esi + 0x9dfc]
mov dword [esp + 0x24], 0
mov dword [esp + 0x28], 0x14
mov dword [esp + 0x2c], 0xbb8
mov dword [esp + 0x30], 0x28
mov eax, dword [edx + 0x1c]
lea ecx, [esp + 0x24]
push 0
push ecx
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
mov ecx, dword [esp + 0x60]
pop edi
mov dword fs:[0], ecx
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret