Function at 0x41ab90
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x18
push ebx
push ebp
push esi
push edi
mov edi, dword [esp + 0x34]
xor ebx, ebx
push edi
push str._keyData__04x
push 8
mov esi, ecx
push 0x44a3a0
mov dword [esp + 0x20], ebx
mov dword [esp + 0x34], ebx
call fcn.004063e0
mov eax, edi
add esp, 0x10
shr eax, 0x18
test al, 1
je 0x41ac06
push str.__extended_
push 8
push 0x44a3a0
call fcn.004063e0
mov eax, dword [esp + 0x3c]
add esp, 0xc
sub eax, 0xd
je 0x41abfe
sub eax, 4
je 0x41abf4
dec eax
jne 0x41ac06
mov dword [esp + 0x30], 0xa5
jmp 0x41ac06
mov dword [esp + 0x30], 0xa3
jmp 0x41ac06
mov dword [esp + 0x30], 0x1234
mov edx, dword [esp + 0x30]
xor ecx, ecx
mov eax, 0x43c4e8
cmp dword [eax], edx
je 0x41ada0
add eax, 8
inc ecx
cmp eax, 0x43c740
jb 0x41ac11
push str.not_in_special_keymap_
push 8
push 0x44a3a0
call fcn.004063e0
add esp, 0xc
lea edi, [esi + 4]
push edi
call dword [sym.imp.USER32.dll_GetKeyboardState]
mov edx, dword [esp + 0x30]
push ebx
push esi
push edi
push ebx
push edx
call dword [sym.imp.USER32.dll_ToAscii]
mov cl, byte [esi + 0x16]
mov ebp, eax
mov al, 0x80
test al, cl
je 0x41ad42
test byte [esi + 0x15], al
je 0x41ad42
cmp ebp, 1
jl 0x41ad42
mov al, byte [esi]
cmp al, 0x20
jb 0x41ac7c
cmp al, 0x7e
jbe 0x41ac8c
cmp al, 0xa0
jb 0x41ad42
cmp al, 0xff
ja 0x41ad42
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
push 0xa2
call edi
test ah, 0x80
je 0x41aca7
mov ebx, 1
mov dword [esp + 0x24], ebx
push 0xa4
call edi
test ah, 0x80
je 0x41acba
or ebx, 4
mov dword [esp + 0x24], ebx
push 0xa5
call edi
test ah, 0x80
je 0x41accd
or ebx, 8
mov dword [esp + 0x24], ebx
test ebx, ebx
jne 0x41acd9
mov dword [esp + 0x24], 0xd
push ebp
push str.Ctrl_Alt_pressed:_ToAscii__without_modifiers__returns__d_byte_s_:
push 8
push 0x44a3a0
call fcn.004063e0
add esp, 0x10
xor edi, edi
test ebp, ebp
jle 0x41ad22
lea ebx, [esp + 0x14]
mov dword [esp + 0x10], ebp
xor eax, eax
add ebx, 4
mov al, byte [edi + esi]
push eax
push eax
push str._02x___c_
push 8
mov dword [ebx - 4], eax
push 0x44a3a0
call fcn.004063e0
add esp, 0x14
inc edi
cmp edi, ebp
jl 0x41acfc
push 0x443e2c
push 8
push 0x44a3a0
call fcn.004063e0
mov eax, dword [esp + 0x1c]
add esp, 0xc
test eax, eax
jne 0x41aea7
push 0
lea eax, [esi + 4]
push esi
push eax
mov eax, dword [esp + 0x3c]
push 0
push eax
mov byte [esi + 0xa7], 0
mov byte [esi + 0xa6], 0
mov byte [esi + 0x15], 0
call dword [sym.imp.USER32.dll_ToAscii]
mov ebp, eax
test ebp, ebp
jge case.0x41ad8c.44
xor eax, eax
mov al, byte [esi]
add eax, 0xffffffd9
cmp eax, 0x81
ja case.0x41ad8c.44
xor ecx, ecx
mov cl, byte [eax + 0x41aee8]
jmp dword [ecx*4 + 0x41aed0]
mov dword [esp + 0x14], 0xfe50
jmp 0x41ae49
mov esi, dword [ecx*8 + 0x43c4ec]
mov dword [esp + 0x10], 1
cmp esi, 0xffe9
mov dword [esp + 0x14], esi
je 0x41adc3
cmp esi, 0xffea
jne 0x41ade8
push 0x91
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
je 0x41ade8
xor ecx, ecx
cmp esi, 0xffe9
setne cl
add ecx, 0xffe7
mov dword [esp + 0x14], ecx
push esi
push esi
push str.keymap_gives__u___x_
push 8
push 0x44a3a0
call fcn.004063e0
add esp, 0x14
jmp 0x41aea7
mov dword [esp + 0x14], 0xfe51
jmp 0x41ae49
mov dword [esp + 0x14], 0xfe53
jmp 0x41ae49
mov dword [esp + 0x14], 0xfe52
jmp 0x41ae49
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x11
call edi
test ah, 0x80
je 0x41ae41
push 0x12
call edi
test ah, 0x80
mov dword [esp + 0x14], 0xfe53
jne 0x41ae49
mov dword [esp + 0x14], 0xfe57
mov dword [esp + 0x10], 1
cmp ebp, 1
jl 0x41aea7
push ebp
push str.ToAscii__without_ctrl__returns__d_byte_s_:
push 8
push 0x44a3a0
call fcn.004063e0
add esp, 0x10
xor edi, edi
test ebp, ebp
jle 0x41aea7
mov edx, dword [esp + 0x10]
mov eax, edx
add eax, ebp
lea ebx, [esp + edx*4 + 0x14]
mov dword [esp + 0x10], eax
xor eax, eax
add ebx, 4
mov al, byte [edi + esi]
push eax
push eax
push str._02x___c_
push 8
mov dword [ebx - 4], eax
push 0x44a3a0
call fcn.004063e0
add esp, 0x14
inc edi
cmp edi, ebp
jl 0x41ae81
mov eax, dword [esp + 0x10]
mov ecx, 5
lea esi, [esp + 0x14]
mov dword [esp + eax*4 + 0x14], 0xffffff
mov eax, dword [esp + 0x2c]
mov edi, eax
rep movsd dword es:[edi], dword [esi]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x18
ret 0xc