Function at 0x438c40
Capabilities:
Log keystrokes via polling

Disassembly:
push 0x38
mov eax, 0x49820a
call fcn.0045db17
mov edi, ecx
mov eax, dword [ebp + 0x14]
xor ebx, ebx
mov edx, dword [ebp + 0xc]
mov esi, ebx
mov ecx, dword [ebp + 0x10]
mov dword [ebp - 0x2c], eax
mov byte [eax], 1
mov eax, dword [ebp + 8]
mov dword [ebp - 0x34], edx
mov dword [ebp - 0x30], ecx
cmp eax, 0x56
jg 0x438efb
je 0x438eed
cmp eax, 0x16
jg 0x438d3b
je case.0x438c94.11
add eax, 0xfffffff8
cmp eax, 0xc
ja case.0x438c94.10
jmp dword [eax*4 + 0x4391d0]
mov eax, dword [edi + 0x3c]
test eax, eax
je case.0x438c94.11
mov ebx, dword [eax + 0xc]
test ebx, ebx
je case.0x438c94.11
push 0xff
push dword [edi + 0x20]
lea eax, [ebp - 0x20]
mov ecx, edi
push eax
call fcn.00436c0b
mov edx, dword [ebp - 0x30]
push eax
push ecx
mov eax, esp
mov ecx, ebx
push edi
mov dword [eax], edx
mov eax, dword [ebx]
call dword [eax + 4]
jmp case.0x438c94.11
mov eax, dword [edi + 0x3c]
test eax, eax
je case.0x438c94.11
mov ebx, dword [eax]
jmp 0x438ca9
push str.UIObject_Window
mov ecx, edx
call fcn.0040ad20
jmp case.0x438c94.11
push ebx
push ecx
push edx
push 0x13
mov ecx, edi
call fcn.00437ca7
jmp 0x4391be
push ebx
push ecx
push edx
push 0x14
jmp 0x438cff
mov edi, dword [edi + 0x28]
test edi, edi
je case.0x438c94.11
mov esi, dword [edi + 0x84]
test esi, esi
jne case.0x438c94.11
call fcn.0043648b
mov dword [edi + 0x84], eax
jmp 0x4391be
cmp eax, 0x2c
jg 0x438e14
je case.0x438c94.10
sub eax, 0x19
je case.0x438c94.11
sub eax, 1
je 0x438e08
sub eax, 1
je case.0x438c94.11
sub eax, 8
je 0x438dde
sub eax, 6
jne case.0x438c94.10
push 1
lea eax, [ebp - 0x44]
mov ecx, edi
push eax
call fcn.004180f0
push ebx
lea eax, [ebp - 0x24]
mov ecx, edi
push eax
call fcn.004180f0
mov eax, dword [ebp - 0x20]
cmp dword [ebp - 0x24], eax
jne 0x438da3
mov eax, dword [ebp - 0x44]
cmp eax, dword [ebp - 0x40]
je case.0x438c94.10
mov eax, dword [ebp - 0x20]
xor ecx, ecx
cmp dword [ebp - 0x24], eax
push ebx
sete cl
shr edx, 0x10
movsx eax, dx
test dx, dx
jle 0x438dc1
push eax
push dword [ecx*4 + 0x4bca00]
jmp 0x438dcb
neg eax
push eax
push dword [ecx*4 + str._t_tWV_b_b]
push dword [ecx*4 + 0x4bc9f8]
mov ecx, edi
call fcn.00437ca7
jmp case.0x438c94.11
lea eax, [ebp - 0x38]
mov dword [ebp - 0x38], ebx
push eax
mov dword [ebp - 0x34], ebx
call dword [sym.imp.USER32.dll_GetCursorPos]
mov eax, dword [ebp - 0x2c]
movzx ecx, word [ebp - 0x34]
push eax
movzx eax, word [ebp - 0x38]
shl ecx, 0x10
or ecx, eax
push ecx
push edi
push 0x37
jmp 0x438cff
mov ecx, edx
call fcn.0042abd0
jmp case.0x438c94.11
sub eax, 0x2d
je 0x438ebe
sub eax, 6
je 0x438eaa
sub eax, 4
je 0x438e73
sub eax, 1
jne case.0x438c94.10
mov esi, dword [ebp - 0x2c]
movsx eax, cx
mov dword [ebp - 0x38], eax
shr ecx, 0x10
movsx eax, cx
mov dword [ebp - 0x34], eax
mov byte [esi], bl
mov eax, dword [edx + 8]
dec eax
sub eax, 1
je 0x438e68
dec eax
sub eax, 1
jne 0x439020
push esi
lea eax, [ebp - 0x38]
mov ecx, edi
push eax
call fcn.00437934
jmp 0x4391be
mov dword [edi + 0x4c], ebx
mov dword [edi + 0x50], ebx
jmp 0x4391a8
cmp dword [edi + 0x2c], ebx
je case.0x438c94.10
mov eax, dword [edi + 0x24]
mov edi, dword [edi + 0x2c]
shr eax, 0xe
test al, 1
je 0x438e93
mov eax, dword [edi + 0x24]
shr eax, 0xe
test al, 1
je case.0x438c94.11
mov eax, dword [ebp - 0x2c]
push eax
push ecx
push edx
push 0x37
jmp 0x438dd2
mov eax, dword [ebp - 0x2c]
mov byte [eax], bl
jmp case.0x438c94.11
xor esi, esi
inc esi
call fcn.00435fc6
push eax
call dword [sym.imp.USER32.dll_SetCursor]
jmp case.0x438c94.11
cmp edx, 0x5d
je 0x438ee2
cmp edx, 0x79
jne case.0x438c94.11
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
mov ecx, 0x8000
test cx, ax
je case.0x438c94.11
mov eax, dword [ebp - 0x2c]
push eax
push 0xffffffffffffffff
jmp 0x438e00
push ecx
push edx
mov ecx, edi
call fcn.00437557
jmp case.0x438c94.11
cmp eax, 0x67
jg 0x43906b
je 0x439035
sub eax, 0x57
je 0x439027
sub eax, 9
je 0x438ff0
dec eax
sub eax, 1
je 0x438fbf
dec eax
sub eax, 1
je 0x438fb0
sub eax, 1
je 0x438f4d
sub eax, 1
jne case.0x438c94.10
push ecx
push edx
push ecx
mov ecx, edi
call fcn.00438ad1
jmp 0x4391be
mov edi, dword [edi + 0x34]
test edi, edi
je case.0x438c94.11
mov eax, dword [edi + 4]
mov ecx, eax
mov ebx, dword [edi]
sub ecx, ebx
mov dword [ebp - 0x30], eax
mov eax, dword [edx + 8]
mov dword [ebp - 0x2c], ebx
mov ebx, dword [edx]
sub eax, ebx
sar ecx, 2
sar eax, 2
cmp ecx, eax
jbe 0x438f98
cmp ecx, 0x3fffffff
ja 0x4391ca
push ecx
mov ecx, edx
call fcn.00439344
mov edx, dword [ebp - 0x34]
mov eax, dword [edi + 4]
mov ecx, dword [edi]
mov ebx, dword [edx]
jmp 0x438f9e
mov eax, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x2c]
push dword [ebp - 0x34]
push eax
push ecx
push ebx
mov ecx, edx
call fcn.00439623
jmp case.0x438c94.11
push ecx
push edx
push ecx
mov ecx, edi
call fcn.00438a21
jmp 0x4391be
mov eax, dword [edi + 0x20]
and eax, 0xc000
cmp eax, 0x4000
jne case.0x438c94.11
mov eax, dword [edi + 0x24]
shr eax, 9
test al, 1
je case.0x438c94.11
push ecx
mov ecx, dword [edi + 0x28]
push edx
push edi
call fcn.0043fd93
jmp case.0x438c94.11
mov eax, dword [edi + 0x34]
test eax, eax
je 0x439020
mov esi, dword [eax]
jmp 0x439014
mov eax, dword [esi]
test eax, eax
je 0x43900e
cmp dword [eax + 8], ebx
je 0x43900e
push eax
mov ecx, edi
call fcn.004375b4
mov eax, dword [edi + 0x34]
add esi, 4
cmp esi, dword [eax + 4]
jne 0x438ffb
mov ecx, edi
call fcn.00437dbd
mov esi, ebx
jmp case.0x438c94.11
push ecx
push edx
mov ecx, edi
call fcn.004374fa
jmp case.0x438c94.11
mov eax, dword [edi + 0x3c]
test eax, eax
je case.0x438c94.11
mov ecx, dword [eax + 0x24]
test ecx, ecx
je case.0x438c94.11
mov eax, dword [ecx]
lea edx, [ebp - 0x28]
push edi
push edx
call dword [eax + 4]
mov ecx, dword [ebp - 0x34]
push eax
call fcn.00420380
lea ecx, [ebp - 0x28]
call fcn.004054f0
jmp 0x4391a8
sub eax, 0x68
je 0x4391ad
dec eax
sub eax, 1
je 0x43911f
sub eax, 1
je 0x4390f6
sub eax, 8
je 0x4390a8
dec eax
sub eax, 1
jne case.0x438c94.10
cmp dword [edi + 0x2c], ebx
je case.0x438c94.11
push ebx
push ecx
mov ecx, dword [edi + 0x2c]
push edx
push 0x75
jmp 0x438d01
mov eax, dword [ebp - 0x2c]
mov byte [eax], bl
mov eax, dword [edi + 0x24]
shr eax, 0xa
test al, 1
je 0x4390df
mov eax, dword [edi + 0x2c]
mov edi, dword [ebp - 0x2c]
test eax, eax
je 0x4390e2
push edi
push ecx
push ebx
push 0x73
mov ecx, eax
call fcn.00437ca7
mov esi, eax
cmp byte [edi], bl
jne case.0x438c94.11
mov edx, dword [ebp - 0x34]
mov ecx, dword [ebp - 0x30]
jmp 0x4390e2
mov edi, dword [ebp - 0x2c]
test edx, edx
je case.0x438c94.11
push edi
push ecx
push ebx
push 0x74
mov ecx, edx
jmp 0x438d01
mov eax, dword [edi + 0x30]
test eax, eax
je case.0x438c94.11
test ecx, ecx
je 0x43910a
mov ecx, dword [eax + 4]
jmp 0x43910d
mov ecx, dword [eax + 8]
test ecx, ecx
je 0x439118
mov eax, dword [ecx]
call dword [eax + 4]
mov ebx, eax
mov eax, ebx
jmp 0x4391c2
mov eax, dword [edi + 0x3c]
test eax, eax
je 0x439143
mov ecx, dword [eax + 0x18]
test ecx, ecx
je 0x439143
mov eax, dword [ecx]
lea edx, [ebp - 0x38]
push edi
push edx
call dword [eax + 4]
mov edx, dword [ebp - 0x30]
mov ecx, dword [eax]
mov dword [edx], ecx
mov eax, dword [eax + 4]
jmp 0x4391a5
push ebx
push ebx
push ebx
push 0x1b
mov ecx, edi
call fcn.00437ca7
test eax, eax
je case.0x438c94.11
lea eax, [ebp - 0x28]
mov ecx, edi
push eax
call fcn.00407930
mov esi, eax
push ebx
push ebx
push ebx
push 0xf
mov ecx, edi
mov dword [ebp - 4], ebx
call fcn.00437ca7
cmp dword [esi + 0x14], 8
jb 0x439177
mov esi, dword [esi]
push ecx
push ebx
push ebx
push ebx
push eax
push 0xffffffffffffffff
push esi
xor edx, edx
lea ecx, [ebp - 0x40]
call fcn.0044cbd0
add esp, 0x1c
lea ecx, [ebp - 0x28]
call fcn.004054f0
mov edx, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x38]
sub ecx, dword [ebp - 0x40]
mov eax, dword [ebp - 0x34]
sub eax, dword [ebp - 0x3c]
mov dword [edx], ecx
mov dword [edx + 4], eax
xor esi, esi
inc esi
jmp case.0x438c94.11
lea eax, [ebp - 0x38]
mov dword [ebp - 0x34], ecx
push eax
mov ecx, edi
mov dword [ebp - 0x38], edx
call fcn.0043734c
mov esi, eax
mov eax, esi
call fcn.0045dac1
ret 0x10
call fcn.0040ab60
nop
wait
mov word [ebx], es
fimul dword [ebx + eax*2 + 0x438ea000]
add al, al
xchg ecx, eax
inc ebx
add al, al
xchg ecx, eax
inc ebx
add al, al
xchg ecx, eax
inc ebx
add al, al
xchg ecx, eax
inc ebx
add byte [edx], dl
lea eax, [ebx]
mov al, byte [0xfa00438e]
mov word [ebx], es
or ecx, dword [ebp - 0x6e3fffbd]
inc ebx
add cl, ch
mov word [ebx], es