Function at 0x5404c7
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x24
cmp dword [ebp + 0x1c], 0
mov eax, ecx
push ebx
push esi
push edi
mov dword [ebp - 4], eax
je 0x5404e2
xor eax, eax
jmp 0x5408a9
mov esi, dword [ebp + 0xc]
lea edi, [eax - 0x14c]
lea eax, [esi - 0x400]
cmp eax, 0x7bff
ja 0x540512
push 0
push dword [ebp + 0x14]
mov ecx, edi
push dword [ebp + 0x10]
push esi
call fcn.0054687f
mov ecx, dword [ebp + 0x18]
mov dword [ecx], eax
jmp 0x5408a6
push dword [ebp + 0x14]
mov ebx, dword [ebp + 0x10]
mov ecx, 0x664f18
push ebx
push esi
push edi
call fcn.0053f8ac
test eax, eax
jne 0x5408a6
mov eax, 0x110
cmp esi, eax
ja 0x540761
je 0x540966
cmp esi, 0x24
ja 0x540639
je 0x540625
mov eax, esi
sub eax, 6
je 0x5407a8
sub eax, 9
je 0x5405bf
sub eax, 1
je 0x5405aa
push 4
pop ecx
sub eax, ecx
je 0x5408a6
sub eax, 8
je 0x5407a8
sub eax, ecx
je 0x540966
sub eax, 1
jne 0x5407b6
mov ecx, dword [ebp - 4]
test dword [ecx - 0xa8], 0x8000000
je 0x5407b6
mov eax, dword [ebp + 0x18]
mov dword [eax], 3
jmp 0x5408a6
push 0
push 2
push 0x111
mov ecx, edi
call fcn.0053eb18
jmp 0x5408a6
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_IsIconic]
test eax, eax
jne 0x5407b6
mov ecx, edi
call fcn.00544e3c
test al, al
je 0x5408a6
mov ecx, edi
call fcn.00529c2c
test eax, eax
je 0x540608
push dword [ebp + 0x18]
mov edx, dword [ebp - 4]
lea esi, [ebp + 0x14]
push esi
push ebx
push 0xf
mov ecx, dword [edx + 0x20]
push dword [edx + 0xc]
push edi
mov eax, dword [ecx]
call dword [eax + 8]
jmp 0x5408a6
push 0
mov ecx, edi
call fcn.00535067
movzx eax, al
push eax
push dword [ebp + 8]
call fcn.00534926
add esp, 0xc
jmp 0x5408a6
push 3
push dword [ebp + 0x14]
mov ecx, edi
push ebx
push 0x24
call fcn.0054687f
jmp 0x5408a9
mov eax, esi
sub eax, 0x3d
je 0x540748
sub eax, 0x13
je 0x540735
sub eax, 0x32
je 0x540708
push 4
pop ecx
sub eax, ecx
je 0x5407a8
sub eax, 1
je 0x5406c9
sub eax, 0x79
jne 0x5407b6
cmp ebx, 0x5b
je 0x54067d
cmp ebx, 0x5c
jne 0x5407b6
mov ecx, dword [ebp - 4]
test dword [ecx - 0xac], 0x10000
jne 0x5407b6
mov eax, dword fs:[0x2c]
mov ecx, dword [0x665c9c]
mov ecx, dword [eax + ecx*4]
mov eax, dword [0x6653fc]
cmp eax, dword [ecx + 4]
jg 0x540a34
mov ecx, 0x654a1c
call fcn.00542ccc
mov ecx, 0x654a1c
call fcn.00547538
jmp 0x5407b6
mov eax, dword [ebp + 0x14]
test eax, eax
je 0x5406fe
cmp dword [eax + 4], 0x100
jne 0x5406fe
cmp dword [eax + 8], 9
jne 0x5406fe
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
and eax, 0x8000
mov ecx, edi
push eax
call fcn.00530b2e
lea ecx, [eax + 8]
call fcn.0052f64a
mov ecx, eax
mov eax, dword [ebp + 0x18]
mov dword [eax], ecx
jmp 0x5408a6
mov eax, dword [ebp - 4]
mov ecx, edi
or dword [eax - 0xf4], 2
call fcn.0052913c
call fcn.005308b9
mov ecx, dword [ebp - 4]
mov dword [ecx + 0x20], eax
xor eax, eax
push eax
push eax
push eax
push eax
call dword [sym.imp.USER32.dll_PostMessageW]
jmp 0x5407b6
push 0x100
push dword [ebp + 0x14]
call dword [sym.imp.USER32.dll_ActivateKeyboardLayout]
jmp 0x5408a6
push dword [ebp + 0x18]
push dword [ebp + 0x14]
push ebx
push edi
call fcn.005394c1
add esp, 0x10
test eax, eax
je 0x5407b6
jmp 0x5408a6
mov eax, 0x2e0
cmp esi, eax
ja 0x5408db
je 0x5407a8
cmp esi, 0x212
ja 0x5408ca
cmp esi, 0x211
jae 0x5407a8
cmp esi, 0x112
je 0x5408b0
cmp esi, 0x115
jbe 0x5407b6
cmp esi, 0x117
jbe 0x5407a8
cmp esi, 0x125
jne 0x5407b6
push 3
push dword [ebp + 0x14]
mov ecx, edi
push ebx
push esi
call fcn.0054687f
push dword [ebp + 0x18]
mov ecx, edi
push dword [ebp + 0x14]
push ebx
push esi
push dword [ebp + 8]
push edi
call fcn.00530b2e
mov ecx, eax
call fcn.0052943e
test eax, eax
jne 0x5408a6
lea eax, [esi - 0x200]
cmp eax, 9
ja 0x540819
mov edx, dword [ebp + 0x14]
push 0
push 0
push ecx
push ecx
mov ecx, esp
movsx eax, dx
shr edx, 0x10
push ebx
push esi
mov dword [ecx], eax
movsx eax, dx
mov dword [ecx + 4], eax
mov ecx, edi
push edi
call fcn.00530b2e
mov ecx, eax
call fcn.0052955c
cmp esi, 0x205
jne 0x5408a6
push dword [ebp + 0x18]
mov eax, dword [ebp - 4]
lea edx, [ebp + 0x14]
push edx
push ebx
push esi
mov ecx, dword [eax + 0x20]
push dword [ebp + 8]
push edi
mov eax, dword [ecx]
call dword [eax + 8]
test eax, eax
jne 0x5408a6
cmp esi, 0x815e
je 0x5408a6
cmp esi, 0x46
je 0x5408a6
push dword [ebp + 0x14]
push ebx
mov ebx, dword [ebp - 4]
push esi
push dword [ebp + 8]
call dword [ebx + 0x24]
mov ecx, dword [ebp + 0x18]
mov dword [ecx], eax
cmp esi, 0x128
jne 0x5408a6
push 0
push 0
push 0x129
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_DefWindowProcW]
mov edx, dword [ebx - 0xf4]
mov ecx, edx
and ecx, 0xffffffef
or edx, 0x10
and eax, 1
cmove edx, ecx
mov ecx, edi
mov dword [ebx - 0xf4], edx
call fcn.00530b2e
mov ecx, eax
mov edx, dword [eax]
call dword [edx + 0x58]
test eax, eax
je 0x5408a6
mov edx, dword [eax]
lea ecx, [eax + 0x5c]
push ecx
mov ecx, eax
call dword [edx + 0x24]
xor eax, eax
inc eax
pop edi
pop esi
pop ebx
leave
ret 0x18
mov eax, 0xf090
cmp ebx, eax
jne 0x5407b6
push 0
push eax
push edi
mov ecx, edi
call fcn.00549c27
jmp 0x5408a6
mov eax, esi
sub eax, 0x213
je 0x5408a6
sub eax, 0x33
jmp 0x5407a6
mov eax, esi
sub eax, 0x2e4
je 0x5407a8
sub eax, 0x2e
je 0x5407a8
sub eax, 1
je 0x540a18
sub eax, 0x7e28
je 0x5409ff
sub eax, 0x26
je 0x54091c
sub eax, 0x98
jne 0x5407b6
mov eax, dword [ebp + 0x18]
mov dword [eax], edi
jmp 0x5408a6
mov esi, dword [ebp + 0x14]
mov ecx, edi
push esi
push edi
call fcn.00530b2e
lea ecx, [eax + 8]
call fcn.00534c51
test eax, eax
jne 0x5408a6
mov ecx, edi
call fcn.0052e7f4
mov dword [ebp + 8], eax
mov ecx, edi
mov dword [ebp - 0x24], eax
mov eax, dword [esi + 8]
mov dword [ebp - 0x1c], eax
mov eax, dword [esi + 0xc]
mov dword [ebp - 0x18], eax
mov eax, dword [esi + 4]
mov dword [ebp - 0x20], eax
lea eax, [ebp - 0x24]
push eax
call fcn.00549fd9
test eax, eax
je 0x540974
mov ecx, dword [ebp + 0x18]
mov dword [ecx], 1
jmp 0x5408a6
push 0xfffffffffffffff0
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_GetWindowLongW]
mov esi, dword [ebp - 4]
test eax, 0x40000000
je 0x54099e
test dword [esi - 0xa8], 0x10000
jne 0x54099e
cmp dword [esi - 0x11c], 0
je 0x5409d1
push 0
push dword [ebp + 0x18]
lea ecx, [esi - 0x134]
push dword [ebp + 0x14]
push ebx
push 0x8161
push edi
call fcn.005066ac
jmp 0x5408a9
push 0
push 0
push 0x81f9
push eax
call dword [sym.imp.USER32.dll_SendMessageW]
test eax, eax
jne 0x5409e3
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_GetParent]
mov dword [ebp + 8], eax
test eax, eax
jne 0x5409bd
jmp 0x54099e
push 0
push dword [ebp + 0x14]
mov ecx, eax
push ebx
push 0x8161
call fcn.0054687f
mov ecx, dword [ebp + 0x18]
mov dword [ecx], eax
jmp 0x5408a9
lea eax, [ebp + 0x18]
mov ecx, edi
push eax
push dword [ebp + 0x14]
push ebx
push 0x813b
call fcn.0053b752
jmp 0x5408a6
mov ecx, dword [ebp + 0x14]
movsx eax, cx
mov dword [ebp - 8], eax
mov eax, ecx
shr eax, 0x10
cwde
mov dword [ebp - 4], eax
lea eax, [ebp - 8]
push eax
push ecx
jmp 0x5408c0
push 0x6653fc
call fcn.0056aeab
cmp dword [0x6653fc], 0xffffffff
pop ecx
jne 0x5406b0
push 0x5cd9bd
call fcn.0056b224
mov dword [esp], 0x6653fc
call fcn.0056ae61
pop ecx
jmp 0x5406b0