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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x52bc6e
mov eax, dword fs:[0]
push eax
sub esp, 0x43c
mov eax, dword [0x578750]
xor eax, ebp
mov dword [ebp - 0x24], eax
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x448], ecx
mov dword [ebp - 0x428], 0
mov eax, dword [ebp - 0x448]
cmp dword [eax + 0x64], 0
jne 0x47e8e0
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 1
jne 0x47e6a6
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e6a6
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e6a1
mov dword [ebp - 0x428], 0x3a8
jmp 0x47e8db
mov eax, dword [ebp - 0x448]
cmp dword [eax + 0x5c0], 1
jne 0x47e6e1
movzx ecx, byte [0x5859fb]
cmp ecx, 0x88
jne 0x47e6e1
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e6dc
mov dword [ebp - 0x428], 0x3b6
jmp 0x47e8db
mov edx, dword [ebp - 0x448]
cmp dword [edx + 0x5c0], 0
jne 0x47e71b
movzx eax, byte [0x58599f]
cmp eax, 0x80
jne 0x47e71b
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47e716
mov dword [ebp - 0x428], 0x3a4
jmp 0x47e8db
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e744
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e744
movzx eax, byte [0x57ab5d]
test eax, eax
jne 0x47e7bf
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e76d
movzx edx, byte [0x5859fb]
cmp edx, 0x88
jne 0x47e76d
movzx eax, byte [0x57ab5c]
test eax, eax
jne 0x47e7bf
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e796
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e796
movzx eax, byte [0x57ab53]
test eax, eax
jne 0x47e7bf
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e7dc
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e7dc
movzx eax, byte [0x57ab54]
test eax, eax
je 0x47e7dc
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e7d7
mov dword [ebp - 0x428], 0x3a8
jmp 0x47e8db
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e805
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e805
movzx eax, byte [0x57ab5c]
test eax, eax
jne 0x47e857
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e82e
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e82e
movzx eax, byte [0x57ab53]
test eax, eax
jne 0x47e857
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e871
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e871
movzx eax, byte [0x57ab54]
test eax, eax
je 0x47e871
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e86f
mov dword [ebp - 0x428], 0x3b6
jmp 0x47e8db
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e89a
movzx edx, byte [0x58599f]
cmp edx, 0x80
jne 0x47e89a
movzx eax, byte [0x57ab57]
test eax, eax
jne 0x47e8c3
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e8db
movzx edx, byte [0x58599f]
cmp edx, 0x80
jne 0x47e8db
movzx eax, byte [0x57ab55]
test eax, eax
je 0x47e8db
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47e8db
mov dword [ebp - 0x428], 0x3a4
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 1
jne 0x47e91b
movzx edx, byte [0x58599f]
cmp edx, 0x80
jne 0x47e91b
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47e916
mov dword [ebp - 0x428], 0x3a4
jmp 0x47eb55
mov eax, dword [ebp - 0x448]
cmp dword [eax + 0x5c0], 0
jne 0x47e956
movzx ecx, byte [0x5859fb]
cmp ecx, 0x86
jne 0x47e956
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e951
mov dword [ebp - 0x428], 0x3a8
jmp 0x47eb55
mov edx, dword [ebp - 0x448]
cmp dword [edx + 0x5c0], 0
jne 0x47e990
movzx eax, byte [0x5859fb]
cmp eax, 0x88
jne 0x47e990
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e98b
mov dword [ebp - 0x428], 0x3b6
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e9b9
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47e9b9
movzx eax, byte [0x57ab5d]
test eax, eax
jne 0x47e9e2
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47e9ff
movzx edx, byte [0x5859fb]
cmp edx, 0x88
jne 0x47e9ff
movzx eax, byte [0x57ab5c]
test eax, eax
je 0x47e9ff
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47e9fa
mov dword [ebp - 0x428], 0x3a8
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47ea45
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47ea45
movzx eax, byte [0x57ab5c]
test eax, eax
je 0x47ea45
call fcn.00421860
cmp dword [eax + 0x92c], 0
je 0x47ea40
mov dword [ebp - 0x428], 0x3b6
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47ea8b
movzx edx, byte [0x5859fb]
cmp edx, 0x86
jne 0x47ea8b
movzx eax, byte [0x57ab57]
test eax, eax
je 0x47ea8b
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47ea86
mov dword [ebp - 0x428], 0x3a8
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47ead1
movzx edx, byte [0x5859fb]
cmp edx, 0x88
jne 0x47ead1
movzx eax, byte [0x57ab57]
test eax, eax
je 0x47ead1
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47eacc
mov dword [ebp - 0x428], 0x3b6
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47eb14
movzx edx, byte [0x58599f]
cmp edx, 0x80
jne 0x47eb14
movzx eax, byte [0x57ab53]
test eax, eax
je 0x47eb14
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47eb12
mov dword [ebp - 0x428], 0x3a4
jmp 0x47eb55
mov ecx, dword [ebp - 0x448]
cmp dword [ecx + 0x5c0], 2
jne 0x47eb55
movzx edx, byte [0x58599f]
cmp edx, 0x80
jne 0x47eb55
movzx eax, byte [0x57ab54]
test eax, eax
je 0x47eb55
call fcn.00421860
cmp dword [eax + 0x930], 0
je 0x47eb55
mov dword [ebp - 0x428], 0x3a4
mov ecx, dword [ebp - 0x448]
call fcn.004137d0
push eax
call sub.IMM32.dll_ImmGetContext
mov dword [ebp - 0x20], eax
cmp dword [ebp - 0x20], 0
je 0x47efde
push 0
push 0
push 0x800
mov ecx, dword [ebp - 0x20]
push ecx
call sub.IMM32.dll_ImmGetCompositionStringW
mov dword [ebp - 0x42c], eax
mov edx, dword [ebp - 0x42c]
push edx
lea eax, [ebp - 0x424]
push eax
push 0x800
mov ecx, dword [ebp - 0x20]
push ecx
call sub.IMM32.dll_ImmGetCompositionStringW
mov dword [ebp - 0x18], eax
mov eax, dword [ebp - 0x42c]
cdq
sub eax, edx
sar eax, 1
xor edx, edx
mov word [ebp + eax*2 - 0x424], dx
mov eax, dword [ebp - 0x18]
and eax, 0xffff
mov word [ebp - 0x14], ax
mov ecx, dword [ebp - 0x20]
push ecx
mov ecx, dword [ebp - 0x448]
call fcn.004137d0
push eax
call sub.IMM32.dll_ImmReleaseContext
movzx edx, word [ebp - 0x14]
test edx, edx
jle 0x47efde
movzx eax, word [ebp - 0x14]
cmp eax, 0x200
jge 0x47efde
cmp dword [ebp - 0x428], 0
je 0x47ec17
lea ecx, [ebp - 0x424]
push ecx
call fcn.00504c07
add esp, 4
mov word [ebp - 0x14], ax
mov ecx, dword [ebp - 0x448]
call fcn.004a1680
mov dword [ebp - 0x430], eax
push 1
mov edx, dword [ebp - 0x430]
mov eax, dword [edx]
mov ecx, dword [ebp - 0x430]
mov edx, dword [eax + 0x5c]
call edx
mov eax, dword [ebp - 0x448]
cmp dword [eax + 0x608], 0
jl 0x47ec57
mov ecx, dword [ebp - 0x448]
call fcn.0047a310
movzx ecx, word [ebp - 0x14]
mov edx, dword [ebp - 0x448]
add ecx, dword [edx + 0x5f4]
cmp ecx, 0x7ffe
jle 0x47ec7c
push 0
call dword [sym.imp.USER32.dll_MessageBeep]
jmp 0x47efde
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x67c]
cmp edx, dword [ecx + 0x5c0]
jne 0x47eceb
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x668]
cmp edx, dword [ecx + 0x5bc]
jne 0x47eceb
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x670]
cmp edx, dword [ecx + 0x5f4]
jne 0x47eceb
movzx eax, word [ebp - 0x14]
mov ecx, dword [ebp - 0x448]
add eax, dword [ecx + 0x5f4]
mov edx, dword [ebp - 0x448]
mov dword [edx + 0x670], eax
jmp 0x47ee0f
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x67c]
cmp edx, dword [ecx + 0x5c0]
jne 0x47ed72
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x664]
cmp edx, dword [ecx + 0x5bc]
jne 0x47ed72
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [eax + 0x66c]
cmp edx, dword [ecx + 0x5f4]
jne 0x47ed72
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [ecx + 0x5bc]
mov dword [eax + 0x668], edx
movzx eax, word [ebp - 0x14]
mov ecx, dword [ebp - 0x448]
add eax, dword [ecx + 0x5f4]
mov edx, dword [ebp - 0x448]
mov dword [edx + 0x670], eax
jmp 0x47ee0f
mov eax, dword [ebp - 0x448]
mov ecx, dword [ebp - 0x448]
mov edx, dword [ecx + 0x5c0]
mov dword [eax + 0x67c], edx
mov eax, dword [ebp - 0x448]
mov dword [eax + 0x680], 0xffffffff
mov ecx, dword [ebp - 0x448]
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5bc]
mov dword [ecx + 0x664], eax
mov ecx, dword [ebp - 0x448]
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5f4]
mov dword [ecx + 0x66c], eax
mov ecx, dword [ebp - 0x448]
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5bc]
mov dword [ecx + 0x668], eax
movzx ecx, word [ebp - 0x14]
mov edx, dword [ebp - 0x448]
add ecx, dword [edx + 0x5f4]
mov eax, dword [ebp - 0x448]
mov dword [eax + 0x670], ecx
mov ecx, dword [ebp - 0x448]
add ecx, 0x678
call fcn.004021c0
mov ecx, dword [ebp - 0x448]
mov dword [ecx + 0x68c], 1
mov edx, dword [ebp - 0x448]
mov eax, dword [ebp - 0x448]
mov ecx, dword [edx + 0x10694]
sub ecx, dword [eax + 0x5f4]
lea edx, [ecx + ecx + 2]
push edx
mov eax, dword [ebp - 0x448]
mov ecx, dword [eax + 0x5f4]
mov edx, dword [ebp - 0x448]
lea eax, [edx + ecx*2 + 0x690]
push eax
movzx ecx, word [ebp - 0x14]
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5f4]
add eax, ecx
mov ecx, dword [ebp - 0x448]
lea edx, [ecx + eax*2 + 0x690]
push edx
call fcn.00507c50
add esp, 0xc
movzx eax, word [ebp - 0x14]
mov ecx, dword [ebp - 0x448]
add eax, dword [ecx + 0x10694]
mov edx, dword [ebp - 0x448]
mov dword [edx + 0x10694], eax
movzx eax, word [ebp - 0x14]
push eax
lea ecx, [ebp - 0x424]
push ecx
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5f4]
mov ecx, dword [ebp - 0x448]
lea edx, [ecx + eax*2 + 0x690]
push edx
call fcn.00509a15
add esp, 0xc
movzx eax, word [ebp - 0x14]
mov ecx, dword [ebp - 0x448]
add eax, dword [ecx + 0x5f4]
mov edx, dword [ebp - 0x448]
mov dword [edx + 0x5f4], eax
mov eax, dword [ebp - 0x448]
mov dword [eax + 0x10690], 1
mov ecx, dword [ebp - 0x448]
call fcn.0047d8f0
mov ecx, dword [ebp - 0x448]
mov edx, dword [ebp - 0x448]
mov eax, dword [ecx + 0x5bc]
cmp eax, dword [edx + 0x5a0]
jl 0x47efd3
mov ecx, dword [ebp - 0x448]
mov edx, dword [ebp - 0x448]
mov eax, dword [ecx + 0x5bc]
cmp eax, dword [edx + 0x5a4]
jge 0x47efd3
mov ecx, dword [ebp - 0x448]
push ecx
lea ecx, [ebp - 0x444]
call fcn.004e04d3
mov dword [ebp - 4], 0
lea edx, [ebp - 0x444]
push edx
mov ecx, dword [ebp - 0x448]
call fcn.0047bae0
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 0x448]
mov ecx, dword [eax + 0x5bc]
push ecx
mov ecx, dword [ebp - 0x448]
call fcn.00475a10
mov dword [ebp - 0x1c], eax
mov edx, dword [ebp - 0x1c]
imul edx, edx, 0xc
mov eax, dword [ebp - 0x448]
lea ecx, [eax + edx + 0x1a0]
mov edx, dword [ebp - 0x448]
mov eax, dword [edx + 0x5c0]
mov edx, dword [ebp - 0x10]
cmp edx, dword [ecx + eax*4]
je 0x47efc1
mov eax, dword [ebp - 0x10]
push eax
lea ecx, [ebp - 0x444]
push ecx
mov ecx, dword [ebp - 0x448]
call fcn.0047d9c0
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x444]
call fcn.004e0527
mov ecx, dword [ebp - 0x448]
call fcn.0047cfb0
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
mov ecx, dword [ebp - 0x24]
xor ecx, ebp
call fcn.00504a55
mov esp, ebp
pop ebp
ret