Function at 0x409220
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push esi
push ebx
sub esp, 0xa0
mov eax, dword [ebp + 0x14]
mov dword [ebp - 0x74], ecx
mov dword [ebp - 0x54], 0x445710
mov dword [ebp - 0x50], 0x4468ea
mov dword [ebp - 0x48], 0x409710
mov dword [ebp - 0x44], esp
mov dword [ebp - 0x78], eax
lea eax, [ebp - 8]
mov dword [ebp - 0x4c], eax
lea eax, [ebp - 0x6c]
mov dword [esp], eax
call fcn.004286e0
mov eax, dword [ebp + 0xc]
movsx esi, byte [eax]
mov eax, esi
mov dword [ebp - 0x70], esi
test al, al
js 0x4093d0
mov eax, dword [ebp - 0x70]
mov dword [esp], eax
mov dword [ebp - 0x68], 0xffffffff
call dword [sym.imp.USER32.dll_VkKeyScanW]
sub esp, 4
cmp ax, 0xffff
je 0x409350
mov edx, eax
shr dx, 4
and edx, 0x10
mov ecx, edx
or ecx, 8
test ah, 2
cmovne edx, ecx
mov ecx, edx
or ecx, 1
test ah, 4
movzx eax, al
cmovne edx, ecx
cmp byte [ebp - 0x78], 0
jne 0x4095e0
movzx ecx, dx
mov edx, dword [ebp - 0x70]
xor esi, esi
mov ebx, edx
jmp 0x409361
mov eax, dword [ebp + 0xc]
movsx eax, byte [eax + 1]
mov edx, eax
and edx, 0xc0
add edx, 0xffffff80
jne 0x409407
mov esi, dword [ebp + 0xc]
movsx edx, byte [esi + 2]
mov ecx, edx
and ecx, 0xc0
add ecx, 0xffffff80
jne 0x409407
movzx ecx, byte [esi + 3]
mov ebx, ecx
and ebx, 0xc0
add ebx, 0xffffff80
jne 0x409407
mov ebx, dword [ebp - 0x70]
shl eax, 0xc
and ecx, 0x3f
and eax, 0x3f000
shl edx, 6
and edx, 0xfc0
shl ebx, 0x12
and ebx, 0x1c0000
or eax, ebx
or eax, ecx
or edx, eax
lea eax, [edx - 0x10000]
mov dword [ebp - 0x70], edx
cmp eax, 0xfffff
ja 0x409407
nop
cmp byte [ebp - 0x78], 0
jne 0x4093b0
mov edx, dword [ebp - 0x70]
xor eax, eax
xor ecx, ecx
xor esi, esi
mov ebx, edx
mov dword [esp + 0x18], esi
mov dword [esp + 0x14], ebx
mov dword [esp + 0x10], ecx
mov ebx, dword [ebp - 0x70]
mov dword [esp + 8], edx
mov dword [esp + 4], eax
mov dword [esp + 0xc], ebx
mov eax, dword [ebp + 8]
mov dword [esp], eax
mov ecx, dword [ebp - 0x74]
mov dword [ebp - 0x68], 0xffffffff
call fcn.00408b10
sub esp, 0x1c
lea eax, [ebp - 0x6c]
mov dword [esp], eax
call fcn.00428750
lea esp, [ebp - 8]
pop ebx
pop esi
pop ebp
ret 0x10
mov ebx, dword [ebp - 0x70]
xor eax, eax
mov ecx, 2
mov edx, dword [ebp - 0x70]
mov esi, 2
mov dword [ebp - 0x70], 0
jmp 0x409361
and eax, 0xe0
cmp eax, 0xc0
je 0x409670
mov ebx, dword [ebp - 0x70]
mov eax, ebx
and eax, 0xf0
cmp eax, 0xe0
je 0x409602
mov eax, ebx
and eax, 0xf8
cmp eax, 0xf0
je 0x4092d0
movzx eax, byte [0x452030]
test al, al
je 0x409590
movzx eax, byte [0x452038]
mov byte [ebp - 0x70], al
cmp byte [ebp - 0x70], 0
je 0x409394
lea eax, [ebp - 0x18]
lea ecx, [ebp - 0x20]
mov dword [ebp - 0x1c], 0
mov byte [ebp - 0x18], 0
mov dword [ebp - 0x20], eax
mov dword [esp], 0x40
mov dword [ebp - 0x68], 3
call fcn.0043fe80
mov eax, 0x7fffffff
sub eax, dword [ebp - 0x1c]
sub esp, 4
cmp eax, 0x21
jbe 0x40972c
lea ecx, [ebp - 0x20]
mov dword [esp + 4], 0x22
mov dword [esp], str.Discarding_invalid_UTF_8_sequence:
mov dword [ebp - 0x68], 2
call fcn.00440010
mov eax, dword [ebp + 0x10]
sub esp, 8
test eax, eax
jle 0x4096b0
mov eax, dword [ebp + 0xc]
mov dword [ebp - 0x70], eax
add eax, dword [ebp + 0x10]
mov dword [ebp - 0x7c], eax
jmp 0x40952f
mov ebx, dword [ebp - 0x74]
mov byte [eax + ebx], 0x20
mov eax, dword [ebp - 0x78]
mov dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x20]
mov byte [eax + ebx + 1], 0
mov eax, dword [ebp - 0x70]
mov byte [ebp - 0x2a], 0
mov dword [ebp - 0x28], 0
mov dword [ebp - 0x24], 2
movzx eax, byte [eax]
mov edx, eax
and eax, 0xf
movzx eax, byte [eax + 0x45093c]
shr dl, 4
movzx edx, dl
movzx edx, byte [edx + 0x45093c]
mov byte [ebp - 0x2b], al
mov eax, 0x7fffffff
sub eax, dword [ebp - 0x1c]
mov byte [ebp - 0x2c], dl
cmp eax, 1
jbe 0x4096fd
lea eax, [ebp - 0x2c]
lea ecx, [ebp - 0x20]
mov dword [esp + 4], 2
mov dword [esp], eax
mov dword [ebp - 0x68], 2
call fcn.00440010
add dword [ebp - 0x70], 1
sub esp, 8
mov eax, dword [ebp - 0x70]
cmp eax, dword [ebp - 0x7c]
je 0x4096b0
mov eax, dword [ebp - 0x1c]
lea ecx, [ebp - 0x18]
mov edx, 0xf
lea esi, [eax + 1]
mov dword [ebp - 0x74], eax
mov eax, dword [ebp - 0x20]
mov dword [ebp - 0x78], esi
cmp eax, ecx
cmovne edx, dword [ebp - 0x18]
cmp esi, edx
jbe 0x4094a2
mov dword [esp + 0xc], 1
mov dword [esp + 8], 0
lea ecx, [ebp - 0x20]
mov dword [esp + 4], 0
mov eax, dword [ebp - 0x74]
mov dword [esp], eax
mov dword [ebp - 0x68], 2
call fcn.004401e0
sub esp, 0x10
mov eax, dword [ebp - 0x20]
jmp 0x4094a2
mov dword [esp], 0x452030
call fcn.00445290
test eax, eax
je 0x409416
mov dword [ebp - 0x68], 1
call fcn.00417600
test al, al
je 0x4096e5
mov dword [esp], str.input
call fcn.00416ce0
mov byte [ebp - 0x70], al
mov dword [esp], 0x452030
mov byte [0x452038], al
call fcn.00445450
jmp 0x409420
mov esi, dword [ebp - 0x70]
mov ecx, edx
or ecx, 2
and edx, 8
movzx ecx, cx
mov ebx, esi
je 0x4093ba
mov dword [ebp - 0x70], 0
jmp 0x4093ba
mov eax, dword [ebp + 0xc]
movsx eax, byte [eax + 1]
mov edx, eax
and edx, 0xc0
add edx, 0xffffff80
jne 0x409407
mov ebx, dword [ebp + 0xc]
movzx edx, byte [ebx + 2]
mov ecx, edx
and ecx, 0xc0
add ecx, 0xffffff80
jne 0x409407
mov ecx, dword [ebp - 0x70]
shl eax, 6
and edx, 0x3f
and eax, 0xfc0
shl ecx, 0xc
movzx ecx, cx
or eax, ecx
or edx, eax
lea eax, [edx - 0xd800]
mov dword [ebp - 0x70], edx
cmp eax, 0x7ff
jbe 0x409407
cmp edx, 0x7ff
ja 0x409270
jmp 0x409407
mov eax, dword [ebp + 0xc]
movzx eax, byte [eax + 1]
mov edx, eax
and edx, 0xc0
add edx, 0xffffff80
jne 0x409407
mov edx, dword [ebp - 0x70]
and eax, 0x3f
shl edx, 6
and edx, 0x7c0
or edx, eax
cmp edx, 0x7f
mov dword [ebp - 0x70], edx
ja 0x409270
jmp 0x409407
mov eax, dword [ebp - 0x20]
mov dword [esp], 0x449197
mov dword [esp + 4], eax
mov dword [ebp - 0x68], 2
call fcn.004168d0
mov eax, dword [ebp - 0x20]
lea ebx, [ebp - 0x18]
cmp eax, ebx
je 0x409394
mov dword [esp], eax
call fcn.00444a10
jmp 0x409394
mov dword [esp], 0x452030
mov byte [0x452038], 0
call fcn.00445450
jmp 0x409394
mov dword [esp], 0x44909f
mov dword [ebp - 0x68], 2
call fcn.00443ca0
add ebp, 8
mov eax, dword [ebp - 0x64]
mov dword [ebp - 0x70], eax
mov eax, dword [ebp - 0x68]
test eax, eax
je 0x409763
sub eax, 1
je 0x40973f
sub eax, 1
je 0x40973f
ud2
mov dword [esp], 0x44909f
mov dword [ebp - 0x68], 2
call fcn.00443ca0
mov eax, dword [ebp - 0x20]
lea edx, [ebp - 0x18]
cmp eax, edx
je 0x409751
mov dword [esp], eax
call fcn.00444a10
mov eax, dword [ebp - 0x70]
mov dword [esp], eax
mov dword [ebp - 0x68], 0xffffffff
call fcn.004289f0
mov dword [esp], 0x452030
call fcn.00445150
jmp 0x409751