Function at 0x4aada8
Capabilities:
Log keystrokes via input method manager
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffa0
push ebx
push esi
mov ebx, ecx
mov dword [ebp - 4], edx
mov dword [ebp - 8], eax
mov eax, dword [ebp - 4]
add eax, 0x5c
xor ecx, ecx
mov edx, 0xc
call fcn.004035d4
mov eax, dword [ebp - 4]
call fcn.004a711c
xor eax, eax
push ebp
push 0x4ab51c
push dword fs:[eax]
mov dword fs:[eax], esp
xor eax, eax
push ebp
push 0x4ab4c4
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
mov edx, dword [ebp - 4]
mov dword [edx + 0x44], eax
mov byte [ebp - 0xd], 0
test bl, bl
je 0x4aae69
call sub.user32.dll_GetMessagePos
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x50]
lea edx, [ebp - 0x4c]
call fcn.004081fc
lea edx, [ebp - 0x4c]
lea ecx, [ebp - 0x15]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xac]
call fcn.004a6c18
mov eax, dword [ebp - 0x11]
push eax
lea eax, [ebp - 0xd]
push eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xac]
mov ecx, dword [ebp - 0x15]
mov dl, byte [0x4ab52c]
mov ebx, dword [eax]
call dword [ebx + 0x34]
mov eax, dword [ebp - 4]
call fcn.004aa554
test al, al
je 0x4aae63
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
mov byte [ebp - 0xd], 0
jmp 0x4aae98
cmp byte [ebp + 0x10], 0
je 0x4aae98
mov dl, byte [ebp + 0xc]
xor dl, 1
mov eax, dword [ebp - 4]
call fcn.004aa5c0
mov eax, dword [ebp - 4]
call fcn.004aa554
test al, al
je 0x4aae98
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
call sub.user32.dll_GetActiveWindow
mov dword [ebp - 0xc], eax
jmp 0x4ab49f
push 0
push 0
push 0
push 0
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_PeekMessageA
test eax, eax
jne 0x4aaec4
call sub.user32.dll_WaitMessage
jmp 0x4ab49f
mov eax, dword [ebp - 0x40]
sub eax, 0x201
je 0x4aaed7
sub eax, 3
jne 0x4aafcb
lea edx, [ebp - 0x15]
mov eax, dword [ebp - 0x38]
call fcn.004081fc
lea eax, [ebp - 0x15]
push eax
mov eax, dword [ebp - 0x44]
push eax
call sub.user32.dll_ClientToScreen
lea eax, [ebp - 0x15]
mov dl, 1
call fcn.004734d8
mov ebx, eax
mov eax, ebx
mov edx, dword [0x4a2810]
call fcn.0040402c
test al, al
je 0x4aaf22
mov edx, dword [ebx + 0x214]
mov eax, dword [ebp - 4]
call fcn.004a7050
test al, al
jne 0x4aafcb
mov eax, dword [ebp - 4]
cmp byte [eax + 0x70], 0
jne 0x4aaf6e
mov eax, dword [ebp - 4]
cmp ebx, dword [eax + 0xc8]
jne 0x4aaf6e
lea ecx, [ebp - 0x4c]
lea edx, [ebp - 0x15]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xc8]
call fcn.00474770
push dword [ebp - 0x48]
push dword [ebp - 0x4c]
lea edx, [ebp - 0x60]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xc8]
mov ecx, dword [eax]
call dword [ecx + 0x44]
lea eax, [ebp - 0x60]
push eax
call sub.user32.dll_PtInRect
test eax, eax
jne 0x4aaf7d
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
cmp dword [ebp - 0x40], 0x201
jne 0x4aafcb
push ebp
lea eax, [ebp - 0x15]
mov dl, 1
call fcn.004aaa14
pop ecx
mov eax, dword [ebp - 4]
cmp dword [eax + 0xac], 0
je 0x4aafbc
mov eax, dword [ebp - 4]
cmp byte [eax + 0x88], 0
je 0x4aafbc
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xac]
mov eax, dword [eax + 0x1c]
test byte [eax + 0x64], 0x10
je 0x4aafcb
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
push 3
mov esi, dword [ebp - 0x40]
push esi
push esi
push 0
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_PeekMessageA
test eax, eax
je 0x4ab49f
mov eax, dword [ebp - 0x40]
cmp eax, 0x113
jg 0x4ab016
je 0x4ab1b4
sub eax, 0x4d
je case.0x4ab230.512
sub eax, 0x2e
je case.0x4ab230.512
add eax, 0xffffff7b
sub eax, 9
jb 0x4ab034
jmp 0x4ab43d
sub eax, 0x118
je case.0x4ab230.512
add eax, 0xffffff18
sub eax, 0xb
jb 0x4ab219
jmp 0x4ab43d
mov eax, dword [0x5924f8]
mov eax, dword [eax]
call fcn.00495ae8
push 1
call sub.user32.dll_GetKeyState
test ax, ax
jl 0x4ab062
cmp byte [ebp + 8], 0
je 0x4ab05e
push 2
call sub.user32.dll_GetKeyState
test ax, ax
jl 0x4ab062
xor eax, eax
jmp 0x4ab064
mov al, 1
mov byte [ebp - 0x1e], al
mov eax, dword [ebp - 0x40]
sub eax, 0x100
je 0x4ab089
sub eax, 2
je 0x4ab0fd
sub eax, 2
je 0x4ab089
sub eax, 2
je 0x4ab0fd
jmp case.0x4ab230.512
cmp dword [ebp - 0x3c], 0xe5
jne 0x4ab09e
mov eax, dword [ebp - 0x44]
push eax
call sub.imm32.dll_ImmGetVirtualKey
mov dword [ebp - 0x3c], eax
cmp byte [ebp - 0x1e], 0
je 0x4ab0ae
cmp dword [ebp - 0x3c], 0x70
jne case.0x4ab230.512
mov ax, word [ebp - 0x3c]
mov word [ebp - 0x20], ax
push ebp
mov eax, dword [ebp - 0x38]
call fcn.0048bec4
push eax
push ebp
call fcn.004aa9f8
pop ecx
lea edx, [ebp - 0x20]
pop ecx
call fcn.004aab14
pop ecx
test al, al
je 0x4ab0e4
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
cmp word [ebp - 0x20], 0
je case.0x4ab230.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_TranslateMessage
jmp case.0x4ab230.512
cmp byte [ebp - 0x1e], 0
jne case.0x4ab230.512
push ebp
call fcn.004aa9f8
pop ecx
mov dword [ebp - 0x1c], eax
push 0
lea eax, [ebp - 0x1d]
push eax
mov ecx, dword [ebp - 0x3c]
mov eax, dword [ebp - 0x1c]
mov edx, dword [eax + 0xac]
mov eax, dword [ebp - 0x1c]
call fcn.004aa050
mov dword [ebp - 0x28], eax
cmp dword [ebp - 0x28], 0
jne 0x4ab188
mov eax, dword [ebp - 0x3c]
sub eax, 0x20
je 0x4ab141
sub eax, 0xd
jne 0x4ab17c
mov eax, dword [ebp - 4]
cmp byte [eax + 0x70], 0
jne 0x4ab17c
mov eax, dword [ebp - 0x1c]
cmp eax, dword [ebp - 4]
jne 0x4ab17c
call sub.user32.dll_GetActiveWindow
test eax, eax
je 0x4ab17c
call sub.user32.dll_GetActiveWindow
mov edx, eax
mov ecx, dword [ebp - 0x3c]
mov eax, dword [ebp - 4]
call fcn.004aa5a8
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
push 0
call sub.user32.dll_MessageBeep
jmp case.0x4ab230.512
mov edx, dword [ebp - 0x28]
mov eax, dword [ebp - 0x1c]
call fcn.004a7b9c
mov eax, dword [ebp - 0x1c]
call fcn.004aa724
cmp byte [ebp - 0x1d], 0
je case.0x4ab230.512
mov dl, 1
mov eax, dword [ebp - 0x1c]
call fcn.004aa5c0
jmp case.0x4ab230.512
mov eax, dword [ebp - 0x44]
call fcn.00471a9c
mov ebx, eax
test ebx, ebx
je 0x4ab20b
mov eax, ebx
mov edx, dword [0x4a2810]
call fcn.0040402c
test al, al
je 0x4ab20b
cmp dword [ebp - 0x3c], 0x2328
jl 0x4ab20b
cmp dword [ebp - 0x3c], 0x232b
jg 0x4ab20b
cmp dword [ebx + 0x214], 0
je case.0x4ab230.512
mov edx, dword [ebp - 0x3c]
sub edx, 0x2328
mov eax, dword [ebx + 0x214]
call fcn.004aad38
jmp case.0x4ab230.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_DispatchMessageA
jmp case.0x4ab230.512
mov eax, dword [ebp - 0x40]
add eax, 0xfffffe00
cmp eax, 0xa
ja case.0x4ab230.512
mov al, byte [eax + 0x4ab237]
jmp dword [eax*4 + 0x4ab242]
mov eax, dword [ebp - 0x30]
cmp eax, dword [0x593d0c]
jne 0x4ab26c
mov eax, dword [ebp - 0x2c]
cmp eax, dword [0x593d10]
je 0x4ab285
mov eax, dword [ebp - 0x30]
mov dword [0x593d0c], eax
mov eax, dword [ebp - 0x2c]
mov dword [0x593d10], eax
push ebp
call fcn.004aabb8
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004aaa68
pop ecx
test al, al
je case.0x4ab230.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.004a6c18
mov ecx, dword [ebp - 0x11]
mov edx, dword [ebp - 0x15]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x38]
jmp case.0x4ab230.512
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004aaa68
pop ecx
test al, al
je case.0x4ab230.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.004a6c18
mov eax, dword [ebp - 0x11]
push eax
movsx edx, word [ebp - 0x3a]
mov ecx, dword [ebp - 0x15]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x40]
jmp case.0x4ab230.512
cmp dword [ebp - 0x40], 0x204
setne al
or al, byte [ebp + 8]
je case.0x4ab230.512
mov eax, dword [0x5924f8]
mov eax, dword [eax]
call fcn.00495ae8
mov byte [ebp - 0xd], 0
mov eax, dword [ebp - 4]
and byte [eax + 0xb3], 0xef
push ebp
lea eax, [ebp - 0x30]
mov dl, 1
call fcn.004aaa14
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004aaa68
pop ecx
test al, al
je case.0x4ab230.512
cmp dword [ebp - 0x40], 0x203
je 0x4ab357
mov al, byte [0x4ab52c]
mov byte [ebp - 0x21], al
jmp 0x4ab35f
mov al, byte [0x4ab530]
mov byte [ebp - 0x21], al
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.004a6c18
mov eax, dword [ebp - 0x11]
push eax
lea eax, [ebp - 0xd]
push eax
mov ecx, dword [ebp - 0x15]
mov dl, byte [ebp - 0x21]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x34]
call sub.user32.dll_GetMessagePos
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x50]
lea edx, [ebp - 0x4c]
call fcn.004081fc
mov eax, dword [ebp - 0x4c]
mov dword [0x593d0c], eax
mov eax, dword [ebp - 0x48]
mov dword [0x593d10], eax
jmp case.0x4ab230.512
cmp dword [ebp - 0x40], 0x202
sete al
or al, byte [ebp + 8]
je case.0x4ab230.512
push ebp
lea eax, [ebp - 0x30]
xor edx, edx
call fcn.004aaa14
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004aaa68
pop ecx
test al, al
jne 0x4ab41b
cmp dword [ebp - 0x1c], 0
je 0x4ab3f4
mov eax, dword [ebp - 0x1c]
cmp eax, dword [ebp - 4]
jne case.0x4ab230.512
mov eax, dword [ebp - 4]
cmp byte [eax + 0x71], 0
je case.0x4ab230.512
mov eax, dword [ebp - 4]
test byte [eax + 0xb3], 0x10
jne 0x4ab40f
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
mov eax, dword [ebp - 4]
and byte [eax + 0xb3], 0xef
jmp case.0x4ab230.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.004a6c18
mov al, byte [ebp - 0xd]
push eax
mov ecx, dword [ebp - 0x11]
mov edx, dword [ebp - 0x15]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x3c]
jmp case.0x4ab230.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_DispatchMessageA
push ebp
call fcn.004aaadc
pop ecx
test al, al
jne 0x4ab460
call fcn.00404720
call fcn.00404720
jmp 0x4ab523
cmp dword [0x593d0c], 0x80000000
jne 0x4ab498
call sub.user32.dll_GetMessagePos
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x50]
lea edx, [ebp - 0x4c]
call fcn.004081fc
mov eax, dword [ebp - 0x4c]
mov dword [0x593d0c], eax
mov eax, dword [ebp - 0x48]
mov dword [0x593d10], eax
push ebp
call fcn.004aabb8
pop ecx
push ebp
call fcn.004aacac
pop ecx
push ebp
call fcn.004aaadc
pop ecx
test al, al
jne 0x4aaea5
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4ab4cb
mov eax, dword [ebp - 4]
call fcn.004aa2d8
ret
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0xc