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

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffa4
push ebx
push esi
mov ebx, ecx
mov dword [ebp - 4], edx
mov dword [ebp - 8], eax
mov eax, dword [ebp - 4]
mov byte [eax + 0x60], 0
mov eax, dword [ebp - 4]
call fcn.00495e5c
xor eax, eax
push ebp
push 0x49a1a3
push dword fs:[eax]
mov dword fs:[eax], esp
xor eax, eax
push ebp
push 0x49a14b
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 + 0x48], eax
mov byte [ebp - 0xd], 0
test bl, bl
je 0x499adf
lea eax, [ebp - 0x4c]
call fcn.0048d5e0
lea edx, [ebp - 0x4c]
lea ecx, [ebp - 0x15]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xbc]
call fcn.0049595c
mov eax, dword [ebp - 0x11]
push eax
lea eax, [ebp - 0xd]
push eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xbc]
mov ecx, dword [ebp - 0x15]
mov dl, byte [0x49a1b4]
mov ebx, dword [eax]
call dword [ebx + 0x30]
mov eax, dword [ebp - 4]
call fcn.004991b8
test al, al
je 0x499ad9
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
mov byte [ebp - 0xd], 0
jmp 0x499b0e
cmp byte [ebp + 0x10], 0
je 0x499b0e
mov dl, byte [ebp + 0xc]
xor dl, 1
mov eax, dword [ebp - 4]
call fcn.00499224
mov eax, dword [ebp - 4]
call fcn.004991b8
test al, al
je 0x499b0e
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
call sub.user32.dll_GetActiveWindow
mov dword [ebp - 0xc], eax
jmp 0x49a126
call fcn.0048d9a8
push 0
push 0
push 0
push 0
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_PeekMessageA
test eax, eax
jne 0x499b5f
call fcn.0048d770
test al, al
je 0x499b55
push 0xff
push 1
push 0
push 0
push 0
call sub.user32.dll_MsgWaitForMultipleObjects
jmp 0x49a126
call sub.user32.dll_WaitMessage
jmp 0x49a126
mov eax, dword [ebp - 0x40]
sub eax, 0x201
je 0x499b72
sub eax, 3
jne 0x499c5d
mov eax, dword [ebp - 0x30]
mov dword [ebp - 0x15], eax
mov eax, dword [ebp - 0x2c]
mov dword [ebp - 0x11], eax
lea eax, [ebp - 0x15]
mov dl, 1
call fcn.0046780c
mov ebx, eax
mov eax, ebx
mov edx, dword [0x491904]
call fcn.00404248
test al, al
je 0x499bb1
mov edx, dword [ebx + 0x214]
mov eax, dword [ebp - 4]
call fcn.00495d70
test al, al
jne 0x499c5d
mov eax, dword [ebp - 4]
cmp byte [eax + 0x80], 0
jne 0x499c00
mov eax, dword [ebp - 4]
cmp ebx, dword [eax + 0xd0]
jne 0x499c00
lea ecx, [ebp - 0x4c]
lea edx, [ebp - 0x15]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xd0]
call fcn.00468aa4
push dword [ebp - 0x48]
push dword [ebp - 0x4c]
lea edx, [ebp - 0x5c]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xd0]
mov ecx, dword [eax]
call dword [ecx + 0x44]
lea eax, [ebp - 0x5c]
push eax
call sub.user32.dll_PtInRect
test eax, eax
jne 0x499c0f
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
cmp dword [ebp - 0x40], 0x201
jne 0x499c5d
push ebp
lea eax, [ebp - 0x15]
mov dl, 1
call fcn.00499698
pop ecx
mov eax, dword [ebp - 4]
cmp dword [eax + 0xbc], 0
je 0x499c4e
mov eax, dword [ebp - 4]
cmp byte [eax + 0x98], 0
je 0x499c4e
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0xbc]
mov eax, dword [eax + 0x1c]
test byte [eax + 0x60], 0x10
je 0x499c5d
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
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 0x49a126
mov eax, dword [ebp - 0x40]
cmp eax, 0x113
jg 0x499ca8
je 0x499e49
sub eax, 0x4d
je case.0x499ec5.512
sub eax, 0x2e
je case.0x499ec5.512
add eax, 0xffffff7b
sub eax, 9
jb 0x499cc6
jmp 0x49a0cf
sub eax, 0x118
je case.0x499ec5.512
add eax, 0xffffff18
sub eax, 0xb
jb 0x499eae
jmp 0x49a0cf
mov eax, dword [0x59c4c4]
mov eax, dword [eax]
call fcn.0048b5a0
push 1
call sub.user32.dll_GetKeyState
test ax, ax
jl 0x499cf4
cmp byte [ebp + 8], 0
je 0x499cf0
push 2
call sub.user32.dll_GetKeyState
test ax, ax
jl 0x499cf4
xor eax, eax
jmp 0x499cf6
mov al, 1
mov byte [ebp - 0x1e], al
mov eax, dword [ebp - 0x40]
sub eax, 0x100
je 0x499d1b
sub eax, 2
je 0x499d8f
sub eax, 2
je 0x499d1b
sub eax, 2
je 0x499d8f
jmp case.0x499ec5.512
cmp dword [ebp - 0x3c], 0xe5
jne 0x499d30
mov eax, dword [ebp - 0x44]
push eax
call sub.imm32.dll_ImmGetVirtualKey
mov dword [ebp - 0x3c], eax
cmp byte [ebp - 0x1e], 0
je 0x499d40
cmp dword [ebp - 0x3c], 0x70
jne case.0x499ec5.512
mov ax, word [ebp - 0x3c]
mov word [ebp - 0x20], ax
push ebp
mov eax, dword [ebp - 0x38]
call fcn.00481578
push eax
push ebp
call fcn.0049967c
pop ecx
lea edx, [ebp - 0x20]
pop ecx
call fcn.00499798
pop ecx
test al, al
je 0x499d76
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
cmp word [ebp - 0x20], 0
je case.0x499ec5.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_TranslateMessage
jmp case.0x499ec5.512
cmp byte [ebp - 0x1e], 0
jne case.0x499ec5.512
push ebp
call fcn.0049967c
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 + 0xbc]
mov eax, dword [ebp - 0x1c]
call fcn.00498cb0
mov dword [ebp - 0x28], eax
cmp dword [ebp - 0x28], 0
jne 0x499e1d
mov eax, dword [ebp - 0x3c]
sub eax, 0x20
je 0x499dd3
sub eax, 0xd
jne 0x499e11
mov eax, dword [ebp - 4]
cmp byte [eax + 0x80], 0
jne 0x499e11
mov eax, dword [ebp - 0x1c]
cmp eax, dword [ebp - 4]
jne 0x499e11
call sub.user32.dll_GetActiveWindow
test eax, eax
je 0x499e11
call sub.user32.dll_GetActiveWindow
mov edx, eax
mov ecx, dword [ebp - 0x3c]
mov eax, dword [ebp - 4]
call fcn.0049920c
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
push 0
call sub.user32.dll_MessageBeep
jmp case.0x499ec5.512
mov edx, dword [ebp - 0x28]
mov eax, dword [ebp - 0x1c]
call fcn.00496870
mov eax, dword [ebp - 0x1c]
call fcn.0049938c
cmp byte [ebp - 0x1d], 0
je case.0x499ec5.512
mov dl, 1
mov eax, dword [ebp - 0x1c]
call fcn.00499224
jmp case.0x499ec5.512
mov eax, dword [ebp - 0x44]
call fcn.00465e40
mov ebx, eax
test ebx, ebx
je 0x499ea0
mov eax, ebx
mov edx, dword [0x491904]
call fcn.00404248
test al, al
je 0x499ea0
cmp dword [ebp - 0x3c], 0x2328
jl 0x499ea0
cmp dword [ebp - 0x3c], 0x232b
jg 0x499ea0
cmp dword [ebx + 0x214], 0
je case.0x499ec5.512
mov edx, dword [ebp - 0x3c]
sub edx, 0x2328
mov eax, dword [ebx + 0x214]
call fcn.004999c4
jmp case.0x499ec5.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_DispatchMessageA
jmp case.0x499ec5.512
mov eax, dword [ebp - 0x40]
add eax, 0xfffffe00
cmp eax, 0xa
ja case.0x499ec5.512
mov al, byte [eax + 0x499ecc]
jmp dword [eax*4 + 0x499ed7]
mov eax, dword [ebp - 0x30]
cmp eax, dword [0x59feb8]
jne 0x499f01
mov eax, dword [ebp - 0x2c]
cmp eax, dword [0x59febc]
je 0x499f1a
mov eax, dword [ebp - 0x30]
mov dword [0x59feb8], eax
mov eax, dword [ebp - 0x2c]
mov dword [0x59febc], eax
push ebp
call fcn.00499844
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004996ec
pop ecx
test al, al
je case.0x499ec5.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.0049595c
mov ecx, dword [ebp - 0x11]
mov edx, dword [ebp - 0x15]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x34]
jmp case.0x499ec5.512
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004996ec
pop ecx
test al, al
je case.0x499ec5.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.0049595c
mov eax, dword [ebp - 0x11]
push eax
mov edx, dword [ebp - 0x3c]
shr edx, 0x10
movsx edx, dx
mov ecx, dword [ebp - 0x15]
mov eax, dword [ebp - 0x28]
mov ebx, dword [eax]
call dword [ebx + 0x3c]
jmp case.0x499ec5.512
cmp dword [ebp - 0x40], 0x204
setne al
or al, byte [ebp + 8]
je case.0x499ec5.512
mov eax, dword [0x59c4c4]
mov eax, dword [eax]
call fcn.0048b5a0
mov byte [ebp - 0xd], 0
mov eax, dword [ebp - 4]
and byte [eax + 0xc3], 0xef
push ebp
lea eax, [ebp - 0x30]
mov dl, 1
call fcn.00499698
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004996ec
pop ecx
test al, al
je case.0x499ec5.512
cmp dword [ebp - 0x40], 0x203
je 0x499ff1
mov al, byte [0x49a1b4]
mov byte [ebp - 0x21], al
jmp 0x499ff9
mov al, byte [0x49a1b8]
mov byte [ebp - 0x21], al
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.0049595c
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 + 0x30]
lea eax, [ebp - 0x4c]
call fcn.0048d5e0
mov eax, dword [ebp - 0x4c]
mov dword [0x59feb8], eax
mov eax, dword [ebp - 0x48]
mov dword [0x59febc], eax
jmp case.0x499ec5.512
cmp dword [ebp - 0x40], 0x202
sete al
or al, byte [ebp + 8]
je case.0x499ec5.512
push ebp
lea eax, [ebp - 0x30]
xor edx, edx
call fcn.00499698
pop ecx
push ebp
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x1c]
call fcn.004996ec
pop ecx
test al, al
jne 0x49a0ad
cmp dword [ebp - 0x1c], 0
je 0x49a086
mov eax, dword [ebp - 0x1c]
cmp eax, dword [ebp - 4]
jne case.0x499ec5.512
mov eax, dword [ebp - 4]
cmp byte [eax + 0x81], 0
je case.0x499ec5.512
mov eax, dword [ebp - 4]
test byte [eax + 0xc3], 0x10
jne 0x49a0a1
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
mov eax, dword [ebp - 4]
and byte [eax + 0xc3], 0xef
jmp case.0x499ec5.512
lea ecx, [ebp - 0x15]
lea edx, [ebp - 0x30]
mov eax, dword [ebp - 0x28]
call fcn.0049595c
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 + 0x38]
jmp case.0x499ec5.512
lea eax, [ebp - 0x44]
push eax
call sub.user32.dll_DispatchMessageA
push ebp
call fcn.00499760
pop ecx
test al, al
jne 0x49a0f2
call fcn.00404950
call fcn.00404950
jmp 0x49a1aa
cmp dword [0x59feb8], 0x80000000
jne 0x49a11f
lea eax, [ebp - 0x4c]
call fcn.0048d5e0
mov eax, dword [ebp - 0x4c]
mov dword [0x59feb8], eax
mov eax, dword [ebp - 0x48]
mov dword [0x59febc], eax
push ebp
call fcn.00499844
pop ecx
push ebp
call fcn.00499938
pop ecx
push ebp
call fcn.00499760
pop ecx
test al, al
jne 0x499b1b
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x49a152
mov eax, dword [ebp - 4]
call fcn.00498f3c
ret
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0xc