Function at 0x41c86c
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push esi
push edi
push ebp
add esp, 0xfffffdfc
mov ebx, eax
movsx esi, bl
mov eax, dword [0x48d550]
mov eax, dword [eax + esi*8 + 0x1a34]
mov edx, dword [0x48d270]
cmp eax, dword [edx + esi*4 + 0x98]
jne 0x41c8a6
push 0x10
call sub.user32.dll_GetAsyncKeyState
test ax, ax
jge 0x41cb76
cmp bl, 0xfd
jg 0x41c968
movsx esi, bl
mov eax, dword [0x48d550]
mov eax, dword [eax + esi*8 + 0x1a30]
mov edx, dword [0x48d270]
cmp eax, dword [edx + esi*4 + 0x98]
jne 0x41c968
push 0x10
call sub.user32.dll_GetAsyncKeyState
test ax, ax
jl 0x41c968
movsx esi, bl
mov eax, dword [0x48d550]
mov eax, dword [eax + esi*8 + 0x1a34]
mov edx, dword [0x48d270]
cmp eax, dword [edx + esi*4 + 0x98]
jbe 0x41cb76
movsx eax, bl
mov edx, dword [0x48d270]
mov edi, dword [edx + eax*4 + 0x98]
movsx eax, bl
mov edx, dword [0x48d550]
mov eax, dword [edx + eax*8 + 0x1a34]
mov edx, dword [0x48d270]
mov dword [edx + esi*4 + 0x98], eax
lea eax, [esp + 4]
push eax
movsx eax, bl
mov edx, dword [0x48d550]
mov edx, dword [edx + eax*8 + 0x1a34]
dec edx
mov ecx, 1
mov eax, ebx
call fcn.0041c514
test al, al
jne 0x41cb76
mov eax, dword [0x48d270]
mov dword [eax + esi*4 + 0x98], edi
jmp 0x41c9b4
mov eax, dword [0x48d550]
cmp byte [eax + 0x192b], 0
jne 0x41c9b4
mov eax, 0x41cb84
mov edx, 0x97
call fcn.00411d74
test al, al
jne 0x41c9a1
mov eax, dword [0x48d91c]
mov al, byte [eax]
mov edx, dword [0x48d550]
mov byte [edx + 0x192b], al
jmp 0x41cb76
mov eax, dword [0x48d91c]
mov al, byte [eax]
mov edx, dword [0x48d550]
mov byte [edx + 0x192b], al
movsx eax, bl
mov edx, dword [0x48d270]
mov edx, dword [edx + eax*4 + 0x98]
dec edx
mov eax, 1
call fcn.0040bb8c
mov esi, eax
mov dword [esp], 0x7fffffff
mov byte [0x49a615], 1
mov eax, dword [0x48d99c]
mov byte [eax], 1
mov eax, esi
call fcn.0041c804
mov eax, dword [0x48da44]
mov dl, 1
call fcn.0040e810
mov ebp, 0x64
mov edi, esi
lea eax, [esp + 4]
push eax
mov ecx, 1
mov edx, edi
mov eax, ebx
call fcn.0041c514
test al, al
jne 0x41ca1d
mov dword [esp], edi
jmp 0x41ca95
mov esi, edi
add edi, ebp
cmp ebp, 0x20000000
jg 0x41ca95
mov eax, esi
xor edx, edx
cmp edx, 0
jne 0x41ca3b
cmp eax, 0x7fffffff
jb 0x41ca3d
jmp 0x41ca95
jge 0x41ca95
mov eax, ebp
add eax, eax
mov ebp, eax
call fcn.0040f494
mov eax, dword [0x48d9fc]
cmp byte [eax], 0
jne 0x41ca95
mov eax, esi
call fcn.0041c804
mov eax, dword [0x48da44]
push eax
mov eax, dword [0x48db04]
mov eax, dword [eax]
push eax
call sub.user32.dll_SetWindowTextA
mov eax, edi
xor edx, edx
push edx
push eax
mov eax, ebp
cdq
add eax, dword [esp]
adc edx, dword [esp + 4]
add esp, 8
cmp edx, 0
jne 0x41ca8f
cmp eax, 0xfffffffe
jb 0x41ca01
jmp 0x41ca95
jl 0x41ca01
mov eax, dword [0x48d9fc]
cmp byte [eax], 0
je 0x41cab0
mov eax, dword [0x48d550]
mov byte [eax + 0x1931], 0
jmp 0x41cb43
mov edi, dword [esp]
add edi, esi
shr edi, 1
mov eax, esi
call fcn.0041c804
mov eax, dword [0x48da44]
push eax
mov eax, dword [0x48db04]
mov eax, dword [eax]
push eax
call sub.user32.dll_SetWindowTextA
lea eax, [esp + 4]
push eax
mov ecx, 1
mov edx, edi
mov eax, ebx
call fcn.0041c514
test al, al
jne 0x41caed
mov dword [esp], edi
jmp 0x41caef
mov esi, edi
call fcn.0040f494
mov eax, dword [0x48d9fc]
cmp byte [eax], 0
je 0x41cb0c
mov eax, dword [0x48d550]
mov byte [eax + 0x1931], 0
jmp 0x41cb43
lea edi, [esi + 1]
cmp edi, dword [esp]
jne 0x41cab0
call fcn.0040eb04
movsx eax, bl
mov edx, dword [0x48d270]
mov edx, dword [edx + eax*4 + 0x98]
mov ecx, dword [0x48d550]
mov dword [ecx + eax*8 + 0x1a30], edx
mov edx, dword [0x48d550]
mov dword [edx + eax*8 + 0x1a34], edi
movsx edi, bl
mov eax, dword [0x48d270]
mov eax, dword [eax + edi*4 + 0x98]
lea edx, [esi + 1]
call fcn.0040bb8c
mov edx, dword [0x48d270]
mov dword [edx + edi*4 + 0x98], eax
mov byte [0x49a615], 0
mov eax, dword [0x48d99c]
mov byte [eax], 0
add esp, 0x204
pop ebp
pop edi
pop esi
pop ebx
ret