Function at 0x4913d0
Capabilities:
Log keystrokes via input method manager

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5adafb
mov eax, dword fs:[0]
push eax
sub esp, 0x84
mov eax, dword [0x5bd344]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
mov eax, dword [edi + 0x2b4]
push eax
mov dword [ebp - 0x70], eax
call dword [sym.imp.IMM32.dll_ImmGetContext]
mov dword [ebp - 0x6c], eax
mov dword [ebp - 4], 0
test eax, eax
je 0x491853
mov esi, dword [edi + 0x2a8]
cmp byte [esi + 0x50], 0
jne 0x49183a
mov ecx, edi
call fcn.004c5ae0
test al, al
jne 0x491837
mov ebx, dword [esi + 0x78]
test ebx, ebx
js 0x49144f
mov ecx, esi
call fcn.004a65f0
mov eax, dword [ebp + 0xc]
shr ebx, 0x1f
mov byte [edi + 0x4be], 0
test al, 8
je 0x4917fa
push 8
lea eax, [ebp - 0x40]
push eax
lea ecx, [ebp - 0x70]
call fcn.0048f7d0
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x30]
test eax, eax
je 0x4917e9
cmp eax, 0xc8
jae 0x4917e9
test bl, bl
je 0x491497
mov ecx, edi
call fcn.004c9080
mov ecx, dword [edi + 0x2a8]
sub esp, 0xc
mov ebx, dword [ebp - 0x6c]
mov esi, esp
mov dword [ebp - 0x60], esi
mov eax, dword [ecx + 0x6c]
push 0
push 0
push 0x10
push ebx
mov dword [ecx + 0x78], eax
call dword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
push ecx
lea ecx, [ebp - 0x59]
mov byte [ebp - 0x59], 0
push ecx
push eax
mov ecx, esi
call fcn.004975d0
mov ecx, dword [esi]
mov eax, dword [esi + 4]
sub eax, ecx
push eax
push ecx
push 0x10
push ebx
call dword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
lea ecx, [ebp - 0x90]
call fcn.004910d0
add esp, 0xc
mov byte [ebp - 4], 2
mov ecx, edi
mov al, byte [edi + 0x644]
mov byte [ebp - 0x59], al
mov byte [edi + 0x644], 0
call fcn.00491a80
xor ebx, ebx
mov esi, eax
mov dword [ebp - 0x78], esi
mov dword [ebp - 0x68], ebx
cmp dword [ebp - 0x30], ebx
jbe 0x49168f
cmp dword [ebp - 0x2c], 8
lea ecx, [ebp - 0x40]
mov edx, 0x3ff
cmovae ecx, dword [ebp - 0x40]
movzx eax, word [ecx + ebx*2]
lea ecx, [ebp - 0x71]
add eax, 0x2800
cmp dx, ax
push ecx
sbb eax, eax
lea ecx, [ebp - 0x58]
add eax, 2
push eax
mov dword [ebp - 0x60], eax
lea eax, [ebp - 0x40]
push ebx
push eax
call fcn.00497780
push esi
lea edx, [ebp - 0x58]
mov byte [ebp - 4], 3
lea ecx, [ebp - 0x28]
call fcn.004901c0
add esp, 4
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x28]
cmp dword [ebp - 0x14], 0x10
mov eax, dword [edi]
cmovae ecx, dword [ebp - 0x28]
push 0
push dword [ebp - 0x18]
push ecx
mov ecx, edi
call dword [eax + 0x50]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x7c], eax
mov eax, dword [ebp - 0x90]
mov edx, dword [eax + ebx*4]
lea eax, [edx - 8]
cmp eax, 0x1b
ja 0x49162a
mov eax, dword [edi + 0x2a8]
add eax, 4
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x38]
mov eax, dword [edi + 0x23c]
mov ecx, dword [edi + 0x238]
sub eax, ecx
sar eax, 4
mov dword [ebp - 0x64], 0
test eax, eax
je 0x49162a
xor ebx, ebx
nop dword [eax + eax]
lea edx, [ebx + ecx]
mov ecx, dword [edx + 8]
lea eax, [edx + 8]
cmp ecx, dword [edx]
jne 0x4915e3
mov ecx, dword [eax + 4]
cmp ecx, dword [edx + 4]
mov esi, dword [ebp - 0x7c]
setl cl
test cl, cl
push esi
cmove eax, edx
push 1
mov edx, dword [eax]
mov eax, dword [edi + 0x2a8]
sub edx, esi
add eax, 4
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x3c]
mov eax, dword [edi + 0x23c]
add ebx, 0x10
mov edx, dword [ebp - 0x64]
mov ecx, dword [edi + 0x238]
inc edx
sub eax, ecx
mov dword [ebp - 0x64], edx
sar eax, 4
cmp edx, eax
jb 0x4915d0
mov ebx, dword [ebp - 0x68]
mov esi, dword [ebp - 0x78]
add ebx, dword [ebp - 0x60]
mov byte [ebp - 4], 3
mov edx, dword [ebp - 0x14]
mov dword [ebp - 0x68], ebx
cmp edx, 0x10
jb 0x491668
mov ecx, dword [ebp - 0x28]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x49165e
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x491873
push edx
push ecx
call fcn.0057eb7e
add esp, 8
lea ecx, [ebp - 0x58]
mov dword [ebp - 0x18], 0
mov dword [ebp - 0x14], 0xf
mov byte [ebp - 0x28], 0
mov byte [ebp - 4], 2
call fcn.00497d10
cmp ebx, dword [ebp - 0x30]
jb 0x49151a
mov al, byte [ebp - 0x59]
push 0
push 0
push 0x80
push dword [ebp - 0x6c]
mov byte [edi + 0x644], al
call dword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
mov edx, dword [edi + 0x260]
mov ebx, eax
mov eax, dword [edi + 0x2a8]
add edx, edx
mov ecx, dword [edi + 0x238]
sub ebx, dword [ebp - 0x30]
mov dword [ebp - 0x78], eax
cmp dword [eax + 0x1f0], 0
mov esi, dword [ecx + edx*8]
je 0x491719
xor edx, edx
test ebx, ebx
setg dl
lea edx, [edx*2 - 1]
mov dword [ebp - 0x60], edx
test ebx, ebx
je 0x49172e
push edx
push esi
mov ecx, eax
call fcn.004a7a20
mov ecx, eax
cmp ecx, esi
je 0x49172b
mov eax, esi
mov esi, ecx
sub eax, ecx
mov ecx, ebx
cdq
xor eax, edx
sub eax, edx
mov edx, dword [ebp - 0x60]
sub ecx, edx
cmp eax, 3
mov eax, dword [ebp - 0x78]
cmovle ecx, ebx
mov ebx, ecx
sub ebx, edx
jne 0x4916e7
jmp 0x49172e
add esi, ebx
js 0x49172b
mov ecx, dword [eax + 4]
add eax, 4
push eax
call dword [ecx + 8]
cmp esi, eax
jle 0x49172e
or esi, 0xffffffff
mov ecx, dword [edi + 0x238]
mov eax, dword [edi + 0x260]
add eax, eax
mov dword [ebp - 0x64], ecx
mov dword [ebp - 0x68], 0
sub esi, dword [ecx + eax*8]
mov eax, dword [edi + 0x23c]
sub eax, ecx
sar eax, 4
test eax, eax
je 0x4917c0
xor ebx, ebx
nop word [eax + eax]
add ecx, ebx
mov eax, dword [ecx + 8]
lea edx, [ecx + 8]
cmp eax, dword [ecx]
jne 0x491772
mov eax, dword [edx + 4]
cmp eax, dword [ecx + 4]
setl al
test al, al
mov eax, dword [ebp - 0x64]
cmove edx, ecx
mov ecx, dword [edx]
mov edx, dword [ebp - 0x68]
add ecx, esi
mov dword [ebx + eax], ecx
inc edx
mov dword [ebx + eax + 4], 0
mov eax, dword [edi + 0x238]
mov dword [ebp - 0x68], edx
mov dword [ebx + eax + 8], ecx
mov dword [ebx + eax + 0xc], 0
add ebx, 0x10
mov ecx, dword [edi + 0x238]
mov eax, dword [edi + 0x23c]
sub eax, ecx
mov dword [ebp - 0x64], ecx
sar eax, 4
cmp edx, eax
jb 0x491760
call fcn.004908d0
test al, al
je 0x4917d0
mov byte [edi + 0x4be], 1
lea ecx, [ebp - 0x90]
call fcn.00497bc0
lea ecx, [ebp - 0x40]
mov byte [ebp - 4], 0
call fcn.00497d10
jmp 0x49181b
mov ecx, edi
call fcn.004c7320
lea ecx, [ebp - 0x40]
call fcn.00497d10
jmp 0x491847
test eax, 0x800
je 0x49181b
sub esp, 0x18
lea ecx, [ebp - 0x70]
mov eax, esp
push 0x800
push eax
call fcn.0048f7d0
mov ecx, edi
call fcn.004911e0
push ecx
push 1
push 1
mov ecx, edi
call fcn.004c72a0
mov ecx, edi
call fcn.00490940
mov ecx, edi
call fcn.004c7320
jmp 0x491847
mov eax, dword [ebp - 0x6c]
push 0
push 4
push 0x15
push eax
call dword [sym.imp.IMM32.dll_ImmNotifyIME]
push dword [ebp - 0x6c]
push dword [ebp - 0x70]
call dword [sym.imp.IMM32.dll_ImmReleaseContext]
xor eax, eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0057e93d
mov esp, ebp
pop ebp
ret 8
call fcn.0058a276
int3