Function at 0x4c2420
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
xor ecx, ecx
push ecx
push ecx
push ecx
push ecx
push ecx
push ebx
push esi
push edi
mov esi, eax
xor eax, eax
push ebp
push 0x4c2838
push dword fs:[eax]
mov dword fs:[eax], esp
cmp byte [esi + 0x40], 0
je 0x4c2815
xor ebx, ebx
mov dword [ebp - 8], 0x4e7124
mov edi, ebx
and edi, 0xff
push edi
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
sub eax, dword [esi + edi*4 + 0x4c]
cmp eax, 0xfffffffb
jl 0x4c2480
push edi
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
sub eax, dword [esi + edi*4 + 0x4c]
cmp eax, 5
jle 0x4c2808
mov edi, ebx
and edi, 0xff
push edi
call sub.user32.dll_GetAsyncKeyState
cmp ax, 0x8000
je 0x4c24a4
push edi
call sub.user32.dll_GetAsyncKeyState
cmp ax, 0x8001
jne 0x4c27f3
lea eax, [ebp - 4]
mov edx, dword [ebp - 8]
mov edx, dword [edx]
call fcn.00404814
mov eax, dword [ebp - 4]
mov edx, 0x4c2850
call fcn.00404b88
je 0x4c27f3
mov eax, dword [ebp - 4]
mov edx, 0x4c2860
call fcn.00404b88
je 0x4c27f3
mov eax, dword [ebp - 4]
mov edx, 0x4c2874
call fcn.00404b88
je 0x4c27f3
cmp dword [esi + 0x8c], 0xffff8008
jl 0x4c2502
cmp dword [esi + 0x9c], 0xffff8008
jge 0x4c2522
cmp bl, 0x41
jbe 0x4c2522
cmp bl, 0x5b
jae 0x4c2522
lea edx, [ebp - 0xc]
mov eax, dword [ebp - 4]
call fcn.004089c8
mov edx, dword [ebp - 0xc]
lea eax, [ebp - 4]
call fcn.00404814
mov eax, dword [ebp - 4]
mov edx, 0x4c2884
call fcn.00404b88
jne 0x4c2579
mov eax, dword [ebp - 4]
call fcn.00404a3c
mov edi, eax
lea eax, [ebp - 4]
call fcn.00404c94
mov byte [eax + edi - 1], 0x20
push 0x14
call sub.user32.dll_GetKeyState
cmp ax, 0xff81
jne 0x4c2567
lea eax, [ebp - 4]
mov edx, 0x4c2898
call fcn.00404a44
jmp 0x4c261f
lea eax, [ebp - 4]
mov edx, 0x4c28a4
call fcn.00404a44
jmp 0x4c261f
mov eax, dword [ebp - 4]
mov edx, 0x4c28b4
call fcn.00404b88
jne 0x4c25cd
mov eax, dword [ebp - 4]
call fcn.00404a3c
mov edi, eax
lea eax, [ebp - 4]
call fcn.00404c94
mov byte [eax + edi - 1], 0x20
push 0x90
call sub.user32.dll_GetKeyState
cmp ax, 0xff81
jne 0x4c25be
lea eax, [ebp - 4]
mov edx, 0x4c2898
call fcn.00404a44
jmp 0x4c261f
lea eax, [ebp - 4]
mov edx, 0x4c28a4
call fcn.00404a44
jmp 0x4c261f
mov eax, dword [ebp - 4]
mov edx, 0x4c28c8
call fcn.00404b88
jne 0x4c261f
mov eax, dword [ebp - 4]
call fcn.00404a3c
mov edi, eax
lea eax, [ebp - 4]
call fcn.00404c94
mov byte [eax + edi - 1], 0x20
push 0x91
call sub.user32.dll_GetKeyState
cmp ax, 0xff81
jne 0x4c2612
lea eax, [ebp - 4]
mov edx, 0x4c2898
call fcn.00404a44
jmp 0x4c261f
lea eax, [ebp - 4]
mov edx, 0x4c28a4
call fcn.00404a44
cmp word [esi + 0x32], 0
je 0x4c2631
mov ecx, dword [ebp - 4]
mov edx, esi
mov eax, dword [esi + 0x34]
call dword [esi + 0x30]
cmp word [esi + 0x3a], 0
je 0x4c27f3
mov eax, dword [esi + 0x450]
cmp dword [eax + 4], 0
je 0x4c27f3
mov eax, dword [esi + 0x450]
cmp byte [eax + 8], 1
jne 0x4c27f3
mov eax, dword [esi + 0x450]
cmp byte [eax + 9], 1
je 0x4c26a1
mov eax, dword [esi + 0x450]
cmp byte [eax + 9], 0
jne 0x4c2681
push 0x14
call sub.user32.dll_GetKeyState
cmp ax, 1
je 0x4c26a1
mov eax, dword [esi + 0x450]
cmp byte [eax + 9], 2
jne 0x4c27f3
push 0x14
call sub.user32.dll_GetKeyState
test ax, ax
jne 0x4c27f3
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xa], 1
je 0x4c26ec
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xa], 0
jne 0x4c26c9
push 0x90
call sub.user32.dll_GetKeyState
cmp ax, 1
je 0x4c26ec
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xa], 2
jne 0x4c27f3
push 0x90
call sub.user32.dll_GetKeyState
test ax, ax
jne 0x4c27f3
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xb], 1
je 0x4c2737
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xb], 0
jne 0x4c2714
push 0x91
call sub.user32.dll_GetKeyState
cmp ax, 1
je 0x4c2737
mov eax, dword [esi + 0x450]
cmp byte [eax + 0xb], 2
jne 0x4c27f3
push 0x91
call sub.user32.dll_GetKeyState
test ax, ax
jne 0x4c27f3
lea eax, [esi + 0x44c]
mov edx, dword [ebp - 4]
call fcn.00404a44
mov eax, dword [esi + 0x44c]
call fcn.00404a3c
mov edi, eax
mov eax, dword [esi + 0x450]
mov eax, dword [eax + 4]
call fcn.00404a3c
cmp edi, eax
jle 0x4c27b7
mov eax, dword [ebp - 4]
call fcn.00404a3c
mov edi, eax
lea eax, [esi + 0x44c]
call fcn.00404c94
add eax, edi
push eax
mov eax, dword [esi + 0x44c]
call fcn.00404a3c
push eax
lea eax, [esi + 0x44c]
call fcn.00404c94
mov edx, eax
pop ecx
pop eax
call fcn.00402a08
mov eax, dword [esi + 0x450]
mov eax, dword [eax + 4]
call fcn.00404a3c
mov edx, eax
lea eax, [esi + 0x44c]
call fcn.00404dc8
lea edx, [ebp - 0x10]
mov eax, dword [esi + 0x44c]
call fcn.00408a04
mov eax, dword [ebp - 0x10]
push eax
lea edx, [ebp - 0x14]
mov eax, dword [esi + 0x450]
mov eax, dword [eax + 4]
call fcn.00408a04
mov edx, dword [ebp - 0x14]
pop eax
call fcn.00404b88
jne 0x4c27f3
mov ecx, dword [esi + 0x44c]
mov edx, esi
mov eax, dword [esi + 0x3c]
call dword [esi + 0x38]
mov edi, ebx
and edi, 0xff
push edi
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
mov dword [esi + edi*4 + 0x4c], eax
inc ebx
add dword [ebp - 8], 4
test bl, bl
jne 0x4c2450
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4c283f
lea eax, [ebp - 0x14]
mov edx, 3
call fcn.004047a0
lea eax, [ebp - 4]
call fcn.0040477c
ret