Function at 0x54651c
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xc
push ebx
push edi
mov edi, dword [ebp + 8]
mov ebx, ecx
test edi, edi
je 0x54653b
mov eax, dword [edi + 0x18]
shr eax, 0x19
test al, 1
jne 0x5467ac
test byte [ebx + 0xa0], 1
mov ecx, dword [ebx + 0x16c]
push esi
mov dword [ebp - 0xc], ecx
je 0x5467b2
mov ecx, dword [ebp + 0xc]
xor esi, esi
inc esi
mov dword [ebp - 4], ecx
test edi, edi
je 0x54657c
mov eax, ecx
and al, 0xf
cmp al, 4
jne 0x54657c
test byte [edi + 0x18], 2
je 0x5467ab
and ecx, 0xffffff01
or ecx, esi
mov dword [ebp - 4], ecx
mov edx, ecx
mov eax, ecx
and edx, 0xf
and eax, 0x30
mov dword [ebp + 8], edx
mov dword [ebp + 0xc], eax
cmp edx, esi
je 0x5465b2
test eax, eax
je 0x5465ac
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [ebp + 8]
mov ecx, 0x8000
test cx, ax
mov eax, dword [ebp + 0xc]
jne 0x5465b2
and dword [ebp + 0xc], 0
jmp 0x5465b5
mov dword [ebp + 0xc], esi
cmp edx, 2
je 0x5465d2
test eax, eax
je 0x5465d0
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
mov ecx, 0x8000
test cx, ax
jne 0x5465d2
xor esi, esi
test edi, edi
je 0x54671b
cmp dword [ebp + 0xc], 0
je 0x54660c
mov dword [ebx + 0x16c], edi
mov ecx, edi
mov esi, dword [edi]
push 2
call dword [esi + 0x6c]
not eax
mov ecx, edi
push eax
call dword [esi + 0xac]
mov eax, dword [edi + 0x18]
shr eax, 1
test al, 1
je 0x546778
jmp 0x546772
cmp dword [ebx + 0x170], 0
je 0x546706
test esi, esi
je 0x546706
mov dword [ebx + 0x16c], edi
lea esi, [ebx + 0x118]
mov dword [ebp + 8], esi
jmp 0x54666d
cmp esi, edi
je 0x54667b
cmp esi, dword [ebx + 0x170]
je 0x546676
mov eax, dword [esi]
mov ecx, esi
push 2
push 0
call dword [eax + 0xac]
mov eax, dword [ebp + 8]
mov esi, dword [eax + 8]
test esi, esi
jne 0x54662d
mov esi, dword [eax + 0xc]
test esi, esi
jne 0x54662d
lea eax, [ebp + 0xf]
push eax
push esi
lea ecx, [ebp + 8]
call fcn.00513210
mov esi, dword [ebp + 8]
test esi, esi
jne 0x546632
jmp 0x546778
mov dword [ebp - 8], edi
jmp 0x5466c0
mov eax, dword [ebx + 0x170]
mov dword [ebp - 8], eax
jmp 0x5466c0
mov eax, dword [esi]
mov ecx, esi
push 2
push 2
call dword [eax + 0xac]
cmp esi, dword [ebp - 8]
je 0x5466c9
mov eax, dword [ebp + 8]
mov esi, dword [eax + 8]
test esi, esi
jne 0x5466aa
mov esi, dword [eax + 0xc]
test esi, esi
je 0x5466af
mov dword [ebp + 8], esi
jmp 0x5466c0
lea eax, [ebp + 0xf]
push eax
push 0
lea ecx, [ebp + 8]
call fcn.00513210
mov esi, dword [ebp + 8]
test esi, esi
jne 0x546686
jmp 0x546778
mov eax, dword [ebp + 8]
mov ecx, dword [eax + 8]
test ecx, ecx
jne 0x5466da
mov ecx, dword [eax + 0xc]
test ecx, ecx
je 0x5466df
mov dword [ebp + 8], ecx
jmp 0x5466f0
lea eax, [ebp + 0xf]
push eax
push 0
lea ecx, [ebp + 8]
call fcn.00513210
mov ecx, dword [ebp + 8]
test ecx, ecx
je 0x546778
mov eax, dword [ecx]
push 2
push 0
call dword [eax + 0xac]
jmp 0x5466c9
mov ecx, dword [edi + 0x18]
mov eax, ecx
and al, 6
cmp al, 2
je 0x5467ab
and ecx, 0xfffffffb
mov dword [edi + 0x18], ecx
mov eax, dword [ebx + 0x120]
mov dword [ebx + 0x16c], edi
mov dword [ebp + 8], eax
jmp 0x54676e
mov edx, dword [eax + 0x18]
mov ecx, edx
mov esi, dword [eax]
or ecx, 2
and edx, 0xfffffffd
cmp edi, eax
push 0xfffffff
cmove edx, ecx
mov ecx, eax
push edx
call dword [esi + 0xac]
mov ecx, dword [ebp + 8]
mov eax, dword [ecx + 8]
test eax, eax
jne 0x546727
mov eax, dword [ecx + 0xc]
test eax, eax
jne 0x546727
lea eax, [ebp + 0xf]
push eax
push 0
lea ecx, [ebp + 8]
call fcn.00513210
mov eax, dword [ebp + 8]
test eax, eax
jne 0x54672c
mov dword [ebx + 0x170], edi
mov eax, dword [ebp - 0xc]
cmp eax, edi
je 0x54678b
push dword [ebp + 0x10]
mov ecx, ebx
push edi
push eax
call fcn.0052a31a
mov esi, dword [ebp - 4]
test edi, edi
je 0x5467a4
test esi, 0x100
je 0x5467a4
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xc0]
mov ecx, ebx
call fcn.0052531e
pop esi
pop edi
pop ebx
leave
ret 0xc
mov esi, dword [ebp + 0xc]
mov eax, esi
and al, 0xf
cmp al, 4
jne 0x5467c4
xor eax, eax
cmp ecx, edi
cmove edi, eax
mov dword [ebx + 0x170], edi
cmp ecx, edi
je 0x5467ab
test ecx, ecx
je 0x5467de
mov eax, dword [ecx]
push 2
push 0
call dword [eax + 0xac]
mov dword [ebx + 0x16c], edi
test edi, edi
je 0x5467f6
mov eax, dword [edi]
mov ecx, edi
push 2
push 2
call dword [eax + 0xac]
push dword [ebp + 0x10]
mov eax, dword [ebp - 0xc]
mov ecx, ebx
push edi
push eax
call fcn.0052a31a
jmp 0x54678e