Function at 0x4624f0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x3c
push ebx
mov ebx, ecx
mov eax, dword [ebx - 0x418]
mov edx, dword [eax + 0x100]
push esi
push edi
lea edi, [ebx - 0x418]
mov ecx, edi
mov dword [esp + 0x10], ebx
call edx
test al, al
je 0x462558
mov eax, dword [edi]
mov edx, dword [eax + 0x10c]
mov ecx, edi
call edx
test al, al
je 0x462558
mov eax, dword [edi]
mov edx, dword [eax + 0x114]
mov ecx, edi
call edx
mov esi, dword [ebp + 8]
test al, al
jne 0x46254a
lea eax, [esi - 0x200]
cmp eax, 0xd
jbe 0x462558
cmp esi, 0x20a
jne 0x462563
test byte [ebp + 0xc], 8
jne 0x4625cf
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
cmp esi, 0x10f
jne 0x4625cf
mov edx, dword [edi]
mov eax, dword [edx + 0x1c]
mov ecx, edi
call eax
mov eax, dword [eax + 0x74]
push eax
call sub.IMM32.dll_ImmGetContext
mov esi, eax
test esi, esi
je 0x462558
lea ecx, [esp + 0x24]
push ecx
call dword [sym.imp.USER32.dll_GetCaretPos]
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x28]
lea ecx, [esp + 0x2c]
push ecx
push esi
mov dword [esp + 0x34], 2
mov dword [esp + 0x38], edx
mov dword [esp + 0x3c], eax
call sub.IMM32.dll_ImmSetCompositionWindow
mov edx, dword [edi]
mov eax, dword [edx + 0x1c]
mov ecx, edi
call eax
mov ecx, dword [eax + 0x74]
push esi
push ecx
call sub.IMM32.dll_ImmReleaseContext
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov byte [esp + 0xf], 1
cmp esi, 0x200
jb 0x4625e4
cmp esi, 0x20d
jbe 0x4625ed
cmp esi, 0x20
jne 0x46274f
mov edx, dword [ebx + 4]
test dword [edx + 0x14], 0x100
jne 0x462633
cmp esi, 0x200
jb 0x462633
cmp esi, 0x205
ja 0x462633
mov ecx, dword [ebp + 0x10]
movsx eax, cx
shr ecx, 0x10
movsx ecx, cx
push ecx
push eax
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
call fcn.004310f0
lea ecx, [ebx - 0x418]
cmp eax, ecx
jne 0x462558
mov ecx, dword [ebx + 4]
mov eax, dword [ecx + 0x14]
and eax, 0x100
neg eax
sbb eax, eax
and eax, 3
jne 0x4626e5
mov edx, dword [ecx + 0x40]
mov dword [esp + 0x30], edx
mov eax, dword [ecx + 0x48]
mov dword [esp + 0x38], eax
mov edx, dword [ecx + 0x3c]
mov dword [esp + 0x2c], edx
mov eax, dword [ecx + 0x44]
mov dword [esp + 0x34], eax
mov eax, dword [ebp + 0x10]
movsx ecx, ax
shr eax, 0x10
movsx edx, ax
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], edx
cmp esi, 0x20
jne 0x462696
lea eax, [esp + 0x24]
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
mov edx, dword [edi]
mov eax, dword [edx + 0x1c]
mov ecx, edi
call eax
jmp 0x4626a7
cmp esi, 0x20a
jne 0x4626b6
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
mov edx, dword [eax + 0x74]
lea ecx, [esp + 0x24]
push ecx
push edx
call dword [sym.imp.USER32.dll_ScreenToClient]
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x24]
push eax
push ecx
lea edx, [esp + 0x34]
push edx
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x462558
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
cmp byte [eax + 0x315], 0
jmp 0x4626e8
cmp eax, 3
jne 0x462558
cmp esi, 0x20
jne 0x4626fd
mov byte [esp + 0xf], 0
jmp case.default.0x46297f
cmp esi, 0x201
je 0x462719
cmp esi, 0x203
je 0x462719
cmp esi, 0x204
jne 0x462a3e
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
cmp byte [eax + 0xcc], 0
jne 0x46273e
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
mov eax, dword [eax + 0x74]
push eax
call dword [sym.imp.USER32.dll_SetFocus]
mov edx, dword [edi]
mov eax, dword [edx + 0x128]
mov ecx, edi
call eax
jmp 0x462a3e
cmp esi, 0x100
jb 0x462763
cmp esi, 0x109
jbe 0x462a2a
cmp esi, 0x102
je 0x462a2a
cmp esi, 0x286
je 0x462a2a
cmp esi, 0x7b
jne 0x46294a
mov edx, dword [edi]
mov eax, dword [edx + 0xe8]
mov ecx, edi
call eax
test al, al
je 0x462558
mov eax, dword [ebp + 0x10]
movsx ecx, ax
shr eax, 0x10
movsx edx, ax
mov eax, dword [edi]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], edx
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
mov edx, dword [eax + 0x74]
lea ecx, [esp + 0x24]
push ecx
push edx
call dword [sym.imp.USER32.dll_ScreenToClient]
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x24]
mov edx, dword [edi]
push eax
mov eax, dword [edx + 0x1c]
push ecx
mov ecx, edi
call eax
call fcn.004310f0
add ebx, 0xfffffbe8
cmp eax, ebx
jne 0x462558
call dword [sym.imp.USER32.dll_CreatePopupMenu]
mov ebx, dword [sym.imp.USER32.dll_AppendMenuA]
push 0x63c188
push 0x65
mov esi, eax
push 0
push esi
call ebx
push 0x63c194
push 0x6b
push 0
push esi
call ebx
push 0x637908
push 0
push 0x800
push esi
call ebx
push 0x63c1a0
push 0x66
push 0
push esi
call ebx
push 0x63c1ac
push 0x67
push 0
push esi
call ebx
push 0x63c1b8
push 0x68
push 0
push esi
call ebx
push 0x63c1c4
push 0x69
push 0
push esi
call ebx
push 0x637908
push 0
push 0x800
push esi
call ebx
push str._A_
push 0x6a
push 0
push esi
call ebx
mov ecx, edi
call fcn.00460330
mov ebx, dword [sym.imp.USER32.dll_EnableMenuItem]
xor ecx, ecx
test al, al
sete cl
mov eax, ecx
push eax
push 0x65
push esi
call ebx
mov ecx, edi
call fcn.00460360
xor edx, edx
test al, al
sete dl
mov eax, edx
push eax
push 0x6b
push esi
call ebx
mov eax, dword [edi]
mov edx, dword [eax + 0x20c]
lea ecx, [esp + 0x18]
push ecx
push 0
push 0
push 0x442
mov ecx, edi
call edx
xor ecx, ecx
cmp word [esp + 0x18], cx
sete cl
mov edx, dword [esp + 0x10]
xor eax, eax
cmp byte [edx + 0xe], al
mov dword [esp + 0x18], ecx
setne al
mov dword [esp + 0x20], eax
or eax, ecx
push eax
push 0x66
push esi
mov dword [esp + 0x28], eax
call ebx
mov eax, dword [esp + 0x18]
push eax
push 0x67
push esi
call ebx
mov ecx, dword [esp + 0x1c]
push ecx
push 0x69
push esi
call ebx
mov edx, dword [esp + 0x20]
push edx
push 0x68
push esi
call ebx
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
mov edx, dword [eax + 0x74]
lea ecx, [esp + 0x24]
push ecx
push edx
call dword [sym.imp.USER32.dll_ClientToScreen]
mov eax, dword [edi]
mov edx, dword [eax + 0x1c]
mov ecx, edi
call edx
mov eax, dword [eax + 0x74]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x24]
push 0
push eax
push 0
push ecx
push edx
push 2
push esi
call dword [sym.imp.USER32.dll_TrackPopupMenu]
push esi
call dword [sym.imp.USER32.dll_DestroyMenu]
mov ebx, dword [esp + 0x10]
jmp 0x462aa0
cmp esi, 0x111
jne 0x462a1a
mov eax, dword [ebp + 0x14]
mov byte [eax], 0
mov edx, dword [edi]
mov eax, dword [edx + 0x124]
mov ecx, edi
call eax
test al, al
je 0x462558
mov eax, dword [ebp + 0xc]
add eax, 0xffffff9b
cmp eax, 6
ja case.default.0x46297f
jmp dword [eax*4 + 0x462b2c]
mov ecx, edi
call fcn.004603c0
jmp case.default.0x46297f
mov ecx, edi
call fcn.00460390
jmp case.default.0x46297f
mov edx, dword [edi]
mov eax, dword [edx + 0x20c]
push 0
push 0
push 0
push 0x300
mov ecx, edi
call eax
jmp case.default.0x46297f
mov edx, dword [edi]
mov eax, dword [edx + 0x20c]
push 0
push 0
push 0
push 0x301
mov ecx, edi
call eax
jmp case.default.0x46297f
mov edx, dword [edi]
mov eax, dword [edx + 0x20c]
push 0
push 0
push 0
push 0x302
mov ecx, edi
call eax
jmp case.default.0x46297f
mov edx, dword [edi]
mov eax, dword [edx + 0x20c]
push 0
push 0
push 0
push 0x303
mov ecx, edi
call eax
jmp case.default.0x46297f
mov ecx, edi
call fcn.004602f0
jmp case.default.0x46297f
cmp esi, 0x53
jne 0x462558
mov byte [esp + 0xf], 0
jmp case.default.0x46297f
mov edx, dword [edi]
mov eax, dword [edx + 0x124]
mov ecx, edi
call eax
test al, al
je 0x462558
cmp esi, 0x102
jne case.default.0x46297f
cmp byte [ebx + 0x22], 0
je case.default.0x46297f
push 0x15
call dword [sym.imp.USER32.dll_GetKeyState]
test al, 1
je 0x462a65
mov byte [ebx + 0x22], 0
mov dword [ebx + 0x24], 0
jmp case.default.0x46297f
mov eax, dword [ebx + 0x24]
test eax, eax
jne 0x462a8f
mov ecx, dword [ebp + 0xc]
push ecx
call dword [sym.imp.KERNEL32.dll_IsDBCSLeadByte]
test eax, eax
je case.default.0x46297f
movzx edx, word [ebp + 0xc]
shl edx, 8
mov dword [ebx + 0x24], edx
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
or dword [ebp + 0xc], eax
mov dword [ebp + 8], 0x286
mov dword [ebx + 0x24], 0
mov esi, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
mov eax, dword [edi]
lea ecx, [esp + 0x14]
push ecx
mov ecx, dword [ebp + 0xc]
push edx
mov edx, dword [eax + 0x20c]
push ecx
push esi
mov ecx, edi
mov dword [esp + 0x24], 0
call edx
test eax, eax
je 0x462b00
cmp esi, 0x100
jb 0x462ad9
cmp esi, 0x109
jbe 0x462b16
cmp esi, 0x102
je 0x462b16
cmp esi, 0x286
je 0x462b16
add esi, 0xfffffe00
cmp esi, 0xd
ja 0x462b1f
mov edx, dword [ebx + 4]
test dword [edx + 0x14], 0x100
je 0x462b1f
mov al, byte [esp + 0xf]
mov ecx, dword [ebp + 0x14]
mov byte [ecx], al
mov eax, dword [esp + 0x14]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov dl, byte [esp + 0xf]
mov eax, dword [ebp + 0x14]
mov byte [eax], dl
mov eax, dword [esp + 0x14]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10