Function at 0x49fb88
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push esi
push edi
push ebp
add esp, 0xfffffdfc
mov ebx, eax
cmp bl, 0xf6
jl 0x49fc96
cmp bl, 0xfd
jg 0x49fc96
movsx esi, bl
mov eax, dword [0x4be784]
mov eax, dword [eax + esi*8 + 0x1a34]
mov edx, dword [0x4be408]
cmp eax, dword [edx + esi*4 + 0xa8]
jne 0x49fbd4
push 0x10
call sub.user32.dll_GetAsyncKeyState
test ax, ax
jge 0x49febb
cmp bl, 0xfd
jg 0x49fc96
movsx esi, bl
mov eax, dword [0x4be784]
mov eax, dword [eax + esi*8 + 0x1a30]
mov edx, dword [0x4be408]
cmp eax, dword [edx + esi*4 + 0xa8]
jne 0x49fc96
push 0x10
call sub.user32.dll_GetAsyncKeyState
test ax, ax
jl 0x49fc96
movsx esi, bl
mov eax, dword [0x4be784]
mov eax, dword [eax + esi*8 + 0x1a34]
mov edx, dword [0x4be408]
cmp eax, dword [edx + esi*4 + 0xa8]
jbe 0x49febb
movsx eax, bl
mov edx, dword [0x4be408]
mov edi, dword [edx + eax*4 + 0xa8]
movsx eax, bl
mov edx, dword [0x4be784]
mov eax, dword [edx + eax*8 + 0x1a34]
mov edx, dword [0x4be408]
mov dword [edx + esi*4 + 0xa8], eax
lea eax, [esp + 4]
push eax
movsx eax, bl
mov edx, dword [0x4be784]
mov edx, dword [edx + eax*8 + 0x1a34]
dec edx
mov ecx, 1
mov eax, ebx
call fcn.0049f7f8
test al, al
jne 0x49febb
mov eax, dword [0x4be408]
mov dword [eax + esi*4 + 0xa8], edi
jmp 0x49fce2
mov eax, dword [0x4be784]
cmp byte [eax + 0xa3f], 0
jne 0x49fce2
mov eax, 0x49fec8
mov edx, 0x97
call fcn.004b12a8
test al, al
jne 0x49fccf
mov eax, dword [0x4bec68]
mov al, byte [eax]
mov edx, dword [0x4be784]
mov byte [edx + 0xa3f], al
jmp 0x49febb
mov eax, dword [0x4bec68]
mov al, byte [eax]
mov edx, dword [0x4be784]
mov byte [edx + 0xa3f], al
movsx eax, bl
mov edx, dword [0x4be408]
mov edx, dword [edx + eax*4 + 0xa8]
dec edx
mov eax, 1
call fcn.004aa588
mov ebp, eax
mov dword [esp], 0x7fffffff
mov eax, dword [0x4beab8]
mov byte [eax], 1
mov eax, dword [0x4becec]
mov byte [eax], 1
mov eax, ebp
call fcn.0049fb20
mov eax, dword [0x4bedb0]
mov dl, 1
call fcn.004ad8ec
mov edi, 0x64
mov esi, ebp
lea eax, [esp + 4]
push eax
mov ecx, 1
mov edx, esi
mov eax, ebx
call fcn.0049f7f8
test al, al
jne 0x49fd4c
mov dword [esp], esi
jmp 0x49fdc4
mov ebp, esi
add esi, edi
cmp edi, 0x20000000
jg 0x49fdc4
mov eax, ebp
xor edx, edx
cmp edx, 0
jne 0x49fd6a
cmp eax, 0x7fffffff
jb 0x49fd6c
jmp 0x49fdc4
jge 0x49fdc4
mov eax, edi
add eax, eax
mov edi, eax
call fcn.004ae0a4
mov eax, dword [0x4bed48]
cmp byte [eax], 0
jne 0x49fdc4
mov eax, ebp
call fcn.0049fb20
mov eax, dword [0x4bedb0]
push eax
mov eax, dword [0x4bee9c]
mov eax, dword [eax]
push eax
call sub.user32.dll_SetWindowTextA
mov eax, esi
xor edx, edx
push edx
push eax
mov eax, edi
cdq
add eax, dword [esp]
adc edx, dword [esp + 4]
add esp, 8
cmp edx, 0
jne 0x49fdbe
cmp eax, 0xfffffffe
jb 0x49fd30
jmp 0x49fdc4
jl 0x49fd30
mov eax, dword [0x4bed48]
cmp byte [eax], 0
je 0x49fddf
mov eax, dword [0x4be784]
mov byte [eax + 0x1931], 0
jmp 0x49fe87
mov esi, dword [esp]
add esi, ebp
shr esi, 1
mov eax, ebp
call fcn.0049fb20
mov eax, dword [0x4bedb0]
push eax
mov eax, dword [0x4bee9c]
mov eax, dword [eax]
push eax
call sub.user32.dll_SetWindowTextA
lea eax, [esp + 4]
push eax
mov ecx, 1
mov edx, esi
mov eax, ebx
call fcn.0049f7f8
test al, al
jne 0x49fe1c
mov dword [esp], esi
jmp 0x49fe1e
mov ebp, esi
call fcn.004ae0a4
mov eax, dword [0x4bed48]
cmp byte [eax], 0
je 0x49fe3b
mov eax, dword [0x4be784]
mov byte [eax + 0x1931], 0
jmp 0x49fe87
cmp ebp, dword [esp]
jne 0x49fe43
dec ebp
jmp 0x49fe4b
lea eax, [ebp + 1]
cmp eax, dword [esp]
jne 0x49fddf
call fcn.004adbe0
cmp bl, 0xf6
jl 0x49fe87
cmp bl, 0xfd
jg 0x49fe87
movsx eax, bl
mov edx, dword [0x4be408]
mov edx, dword [edx + eax*4 + 0xa8]
mov ecx, dword [0x4be784]
mov dword [ecx + eax*8 + 0x1a30], edx
mov edx, dword [0x4be784]
lea ecx, [ebp + 1]
mov dword [edx + eax*8 + 0x1a34], ecx
movsx esi, bl
mov eax, dword [0x4be408]
mov eax, dword [eax + esi*4 + 0xa8]
lea edx, [ebp + 1]
call fcn.004aa588
mov edx, dword [0x4be408]
mov dword [edx + esi*4 + 0xa8], eax
mov eax, dword [0x4beab8]
mov byte [eax], 0
mov eax, dword [0x4becec]
mov byte [eax], 0
add esp, 0x204
pop ebp
pop edi
pop esi
pop ebx
ret