Function at 0x4dced0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push ebx
push esi
mov esi, dword [ebp + 8]
xor ebx, ebx
push edi
push dword [ebp + 0xc]
mov edi, ecx
push esi
push 1
call fcn.004c8710
add esi, 0xffffffe0
cmp esi, 0x21
ja case.0x4dcefb.37
movzx eax, byte [esi + 0x4dd680]
jmp dword [eax*4 + 0x4dd660]
cmp dword [edi + 0x9c], ebx
jle case.0x4dcefb.37
call fcn.004c8430
test eax, eax
je 0x4dd005
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
mov ecx, dword [edi + 0x9c]
mov eax, dword [edi + 0x160]
je 0x4dcf97
dec ecx
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
lea ecx, [ebp + 0xc]
mov dword [eax + 4], 1
push dword [edi + 0x160]
push dword [edi + 0x164]
call fcn.004de080
mov ecx, dword [edi + 0x160]
add esp, 8
mov eax, dword [ebp + 0xc]
cmp eax, ecx
je 0x4dd0ce
sub eax, ecx
push 0
push ecx
sar eax, 2
mov ecx, edi
dec eax
push eax
push dword [edi + 0x9c]
call fcn.004db760
jmp 0x4dd0ce
dec ecx
xor esi, esi
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
mov ecx, dword [edi + 0x160]
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dcfdc
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dcfcd
add ecx, 4
cmp ecx, edx
jne 0x4dcfc0
cmp ecx, edx
je 0x4dcfdc
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dcfb0
test esi, esi
je 0x4dcfea
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
push 0
push ecx
push dword [edi + 0xa0]
mov ecx, edi
push dword [edi + 0x9c]
call fcn.004db760
jmp 0x4dd0ce
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
je 0x4dd042
mov ecx, dword [edi + 0x9c]
dec ecx
mov eax, dword [edi + 0x160]
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
jmp 0x4dd0ce
mov ecx, dword [edi + 0x160]
xor esi, esi
lea ebx, [ebx]
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd07c
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd06d
add ecx, 4
cmp ecx, edx
jne 0x4dd060
cmp ecx, edx
je 0x4dd07c
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd050
test esi, esi
je 0x4dd08a
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
mov ecx, dword [edi + 0x9c]
dec ecx
mov eax, dword [edi + 0x160]
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
mov ecx, dword [edi + 0x9c]
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov ecx, 1
cmp dword [eax], ebx
mov dword [eax], ecx
mov eax, dword [edi + 0x9c]
cmove ebx, ecx
mov dword [edi + 0xa0], eax
push dword [edi + 0x9c]
mov ecx, edi
call fcn.004daf50
test eax, eax
jne 0x4dd0ea
mov ecx, dword [edi + 0xb0]
call fcn.004ebda0
mov ecx, dword [edi + 0xb0]
mov eax, dword [ecx]
jmp 0x4dd643
mov ecx, dword [edi + 0x9c]
test ecx, ecx
js case.0x4dcefb.37
mov eax, dword [edi + 0x164]
sub eax, dword [edi + 0x160]
sar eax, 2
dec eax
cmp ecx, eax
jge case.0x4dcefb.37
call fcn.004c8430
test eax, eax
je 0x4dd1f0
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
mov ecx, dword [edi + 0x9c]
mov eax, dword [edi + 0x160]
je 0x4dd1a8
inc ecx
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
mov esi, dword [edi + 0x160]
mov ecx, esi
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd0ce
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd185
add ecx, 4
cmp ecx, edx
jne 0x4dd178
cmp ecx, edx
je 0x4dd0ce
push 0
push ecx
sub ecx, esi
sar ecx, 2
push ecx
push dword [edi + 0x9c]
mov ecx, edi
call fcn.004db760
jmp 0x4dd0ce
inc ecx
xor esi, esi
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
mov ecx, dword [edi + 0x160]
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dcfdc
nop
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd1dd
add ecx, 4
cmp ecx, edx
jne 0x4dd1d0
cmp ecx, edx
je 0x4dcfdc
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd1c1
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
je 0x4dd217
mov ecx, dword [edi + 0x9c]
inc ecx
jmp 0x4dd027
mov ecx, dword [edi + 0x160]
xor esi, esi
nop
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd24c
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd23d
add ecx, 4
cmp ecx, edx
jne 0x4dd230
cmp ecx, edx
je 0x4dd24c
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd220
test esi, esi
je 0x4dd25a
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
mov ecx, dword [edi + 0x9c]
inc ecx
jmp 0x4dd091
cmp dword [edi + 0x9c], 0xffffffff
je case.0x4dcefb.37
call fcn.004c8450
test eax, eax
je case.0x4dcefb.37
mov eax, dword [edi + 0x160]
mov ecx, dword [edi + 0x9c]
mov ecx, dword [eax + ecx*4]
xor eax, eax
cmp dword [ecx], eax
sete al
mov dword [ecx], eax
mov ecx, edi
call fcn.004dd950
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
pop edi
pop esi
xor eax, eax
pop ebx
pop ebp
ret 8
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
call fcn.004c8450
pop edi
pop esi
xor eax, eax
pop ebx
pop ebp
ret 8
cmp dword [edi + 0x9c], ebx
jle case.0x4dcefb.37
call fcn.004c8430
test eax, eax
je 0x4dd3cb
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
mov dword [edi + 0x9c], ebx
je 0x4dd355
mov eax, dword [edi + 0x160]
lea ecx, [ebp + 0xc]
mov eax, dword [eax]
mov dword [eax + 4], 1
push dword [edi + 0x160]
push dword [edi + 0x164]
call fcn.004de080
mov ecx, dword [edi + 0x160]
add esp, 8
mov eax, dword [ebp + 0xc]
cmp eax, ecx
je 0x4dd0ce
sub eax, ecx
push 0
push ecx
sar eax, 2
mov ecx, edi
dec eax
push eax
push dword [edi + 0x9c]
call fcn.004db760
jmp 0x4dd0ce
mov ecx, dword [edi + 0x160]
xor esi, esi
lea ecx, [ecx]
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd38c
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd37d
add ecx, 4
cmp ecx, edx
jne 0x4dd370
cmp ecx, edx
je 0x4dd38c
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd360
test esi, esi
je 0x4dd39a
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
mov ecx, dword [edi + 0x9c]
mov eax, dword [edi + 0x160]
push 0
push ecx
mov eax, dword [eax + ecx*4]
mov ecx, edi
mov dword [eax + 4], 1
push dword [edi + 0x9c]
push dword [edi + 0xa0]
call fcn.004db760
jmp 0x4dd0ce
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
je 0x4dd400
mov eax, dword [edi + 0x160]
mov dword [edi + 0x9c], ebx
mov eax, dword [eax]
mov dword [eax + 4], 1
jmp 0x4dd0ce
mov ecx, dword [edi + 0x160]
xor esi, esi
jmp 0x4dd410
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd43c
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd42d
add ecx, 4
cmp ecx, edx
jne 0x4dd420
cmp ecx, edx
je 0x4dd43c
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd410
test esi, esi
je 0x4dd44a
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
mov eax, dword [edi + 0x160]
mov dword [edi + 0x9c], ebx
mov eax, dword [eax]
jmp 0x4dd0a0
mov eax, dword [edi + 0x164]
sub eax, dword [edi + 0x160]
sar eax, 2
dec eax
cmp dword [edi + 0x9c], eax
jge case.0x4dcefb.37
call fcn.004c8430
test eax, eax
je 0x4dd550
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
je 0x4dd4f6
mov ecx, dword [edi + 0x164]
sub ecx, dword [edi + 0x160]
mov eax, dword [edi + 0x160]
sar ecx, 2
dec ecx
mov dword [edi + 0x9c], ecx
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], 1
mov esi, dword [edi + 0x160]
mov ecx, esi
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd0ce
lea ecx, [ecx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd185
add ecx, 4
cmp ecx, edx
jne 0x4dd4e0
jmp 0x4dd185
mov eax, dword [edi + 0x164]
sub eax, dword [edi + 0x160]
mov ecx, dword [edi + 0x160]
sar eax, 2
dec eax
xor esi, esi
mov dword [edi + 0x9c], eax
jmp 0x4dd520
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd38c
mov edi, edi
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd53d
add ecx, 4
cmp ecx, edx
jne 0x4dd530
cmp ecx, edx
je 0x4dd38c
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd520
call fcn.004c8450
mov ecx, dword [edi + 0x9c]
test eax, eax
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
mov dword [eax + 4], ebx
je 0x4dd57f
mov ecx, dword [edi + 0x164]
sub ecx, dword [edi + 0x160]
sar ecx, 2
jmp 0x4dd026
mov ecx, dword [edi + 0x160]
xor esi, esi
jmp 0x4dd590
mov edx, dword [edi + 0x164]
cmp ecx, edx
je 0x4dd5bc
lea ebx, [ebx]
mov eax, dword [ecx]
cmp dword [eax], ebx
jne 0x4dd5ad
add ecx, 4
cmp ecx, edx
jne 0x4dd5a0
cmp ecx, edx
je 0x4dd5bc
mov eax, dword [ecx]
mov esi, 1
mov dword [eax], ebx
jmp 0x4dd590
test esi, esi
je 0x4dd5ca
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
mov ecx, dword [edi + 0x164]
sub ecx, dword [edi + 0x160]
sar ecx, 2
jmp 0x4dd090
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jns case.0x4dcefb.37
mov eax, dword [edi + 0x160]
cmp eax, dword [edi + 0x164]
je case.0x4dcefb.37
mov eax, dword [edi + 0x164]
xor ecx, ecx
sub eax, dword [edi + 0x160]
sar eax, 2
test eax, eax
je 0x4dd638
mov edx, 1
mov eax, dword [edi + 0x160]
mov eax, dword [eax + ecx*4]
cmp dword [eax], 0
mov dword [eax], edx
mov eax, dword [edi + 0x164]
cmove ebx, edx
sub eax, dword [edi + 0x160]
inc ecx
sar eax, 2
cmp ecx, eax
jb 0x4dd613
mov ecx, edi
call fcn.004dd950
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0x20]
test ebx, ebx
je case.0x4dcefb.37
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0xdc]
pop edi
pop esi
xor eax, eax
pop ebx
pop ebp
ret 8