Function at 0x4c7010
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x10
push ebx
mov ebx, dword [esp + 0x18]
push ebp
push esi
push edi
mov ecx, ebx
call fcn.004ccdc0
mov ecx, ebx
mov dword [esp + 0x10], eax
call fcn.004ccdc0
mov edi, eax
xor ebp, ebp
dec edi
mov dword [esp + 0x14], ebp
test eax, eax
je 0x4c7096
push edi
mov ecx, ebx
call fcn.004ccd90
mov ecx, dword [esp + 0x28]
mov esi, dword [ebx + 0x360]
mov edx, dword [eax + 0x58]
sub ecx, esi
cmp edx, ecx
jne 0x4c708b
mov eax, dword [eax + 0x54]
mov esi, 0x5b6224
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4c7081
test cl, cl
je 0x4c707d
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4c7081
add eax, 2
add esi, 2
test cl, cl
jne 0x4c705d
xor eax, eax
jmp 0x4c7086
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x4c708b
inc ebp
mov eax, edi
dec edi
test eax, eax
jne 0x4c703a
mov dword [esp + 0x14], ebp
mov eax, dword [ebx + 0x340]
mov dword [esp + 0x18], 0
test eax, eax
mov dword [esp + 0x1c], 0
jle 0x4c7118
mov ebp, dword [ebx + 0x33c]
mov edx, eax
mov edi, dword [ebp]
mov esi, 0x5b6224
mov eax, dword [edi + 0x54]
mov bl, byte [eax]
mov cl, bl
cmp bl, byte [esi]
jne 0x4c70e7
test cl, cl
je 0x4c70e3
mov bl, byte [eax + 1]
mov cl, bl
cmp bl, byte [esi + 1]
jne 0x4c70e7
add eax, 2
add esi, 2
test cl, cl
jne 0x4c70c3
xor eax, eax
jmp 0x4c70ec
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x4c710e
mov eax, dword [edi + 0x58]
mov ecx, dword [esp + 0x18]
cmp eax, ecx
jle 0x4c70ff
mov dword [esp + 0x18], eax
mov eax, dword [edi + 0x5c]
mov ecx, dword [esp + 0x1c]
cmp eax, ecx
jle 0x4c710e
mov dword [esp + 0x1c], eax
add ebp, 4
dec edx
jne 0x4c70b8
mov ebx, dword [esp + 0x24]
mov eax, dword [esp + 0x10]
mov ebp, dword [esp + 0x28]
mov ecx, eax
dec eax
test ecx, ecx
mov dword [esp + 0x10], eax
je 0x4c72ad
mov edi, dword [esp + 0x2c]
mov edx, dword [esp + 0x10]
mov ecx, ebx
push edx
call fcn.004ccd90
mov esi, eax
mov eax, dword [esp + 0x30]
cmp eax, 0xb
ja case.0x4c714e.6
jmp dword [eax*4 + 0x4c7530]
lea ecx, [ebp - 1]
jmp 0x4c723e
mov eax, dword [esi + 0x58]
lea edx, [ebp + 1]
cmp eax, edx
jmp 0x4c7241
cmp dword [esi + 0x58], ebp
jne case.0x4c714e.6
mov ecx, dword [esi + 0x5c]
lea eax, [edi - 1]
cmp ecx, eax
je 0x4c7348
jmp case.0x4c714e.6
cmp dword [esi + 0x58], ebp
jne case.0x4c714e.6
mov eax, dword [esi + 0x5c]
lea ecx, [edi + 1]
cmp eax, ecx
jmp 0x4c7246
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jge 0x4c71c1
lea eax, [ebp - 1]
mov ecx, dword [esi + 0x58]
cdq
idiv dword [ebx + 0x360]
mov eax, ebp
sub eax, edx
cmp ecx, eax
jmp 0x4c7241
mov ecx, dword [ebx + 0x360]
lea eax, [ebp - 1]
cdq
idiv ecx
sub edx, 5
test edx, edx
jg 0x4c71e0
mov eax, ebp
cdq
idiv ecx
mov ecx, ebp
sub ecx, edx
inc ecx
jmp 0x4c723e
mov eax, dword [esi + 0x58]
lea edx, [ebp - 6]
cmp eax, edx
jmp 0x4c7241
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
mov ecx, dword [ebx + 0x360]
test ax, ax
lea eax, [ebp - 1]
cdq
jge 0x4c720c
idiv ecx
inc eax
imul eax, ecx
cmp dword [esi + 0x58], eax
jmp 0x4c7241
idiv ecx
inc eax
imul eax, ecx
lea ecx, [ebp + 6]
cmp eax, ecx
jge 0x4c723e
cmp dword [esi + 0x58], eax
jmp 0x4c7241
mov eax, ebp
cdq
idiv dword [ebx + 0x360]
test edx, edx
je 0x4c7235
mov ecx, dword [esi + 0x58]
lea eax, [ebp + 1]
cmp ecx, eax
jmp 0x4c7241
cmp ebp, dword [esp + 0x18]
jge 0x4c724e
lea ecx, [ebp + 1]
cmp dword [esi + 0x58], ecx
jne case.0x4c714e.6
cmp dword [esi + 0x5c], edi
je 0x4c7513
jmp case.0x4c714e.6
cmp dword [esi + 0x58], 1
jne case.0x4c714e.6
mov eax, edi
cdq
idiv dword [esp + 0x1c]
mov eax, dword [esi + 0x5c]
inc edx
cmp eax, edx
jmp 0x4c7246
lea ecx, [ebp - 1]
mov eax, ecx
cdq
idiv dword [ebx + 0x360]
test edx, edx
jne 0x4c723e
cmp ebp, 1
jne 0x4c723e
mov edx, dword [esp + 0x18]
mov eax, dword [esi + 0x58]
cmp eax, edx
jne case.0x4c714e.6
mov ecx, dword [esp + 0x1c]
lea eax, [ecx + edi - 2]
cdq
idiv ecx
mov eax, dword [esi + 0x5c]
inc edx
cmp eax, edx
je 0x4c7513
mov eax, dword [esp + 0x10]
mov ecx, eax
dec eax
test ecx, ecx
mov dword [esp + 0x10], eax
jne 0x4c7133
mov eax, dword [esp + 0x30]
cmp eax, 3
jne 0x4c7398
mov ecx, ebx
call fcn.004ccdc0
mov esi, eax
mov edx, esi
dec esi
test edx, edx
je 0x4c72f6
mov edi, 1
push esi
mov ecx, ebx
call fcn.004ccd90
mov ecx, dword [ebx + 0x360]
mov edx, dword [eax + 0x58]
add ecx, ebp
cmp edx, ecx
jne 0x4c72ef
cmp dword [eax + 0x5c], edi
je 0x4c738e
mov edx, esi
dec esi
test edx, edx
jne 0x4c72cf
mov ecx, ebx
call fcn.004ccdc0
mov ecx, eax
dec eax
test ecx, ecx
mov dword [esp + 0x10], eax
je 0x4c7513
mov esi, eax
mov edi, 1
push esi
mov ecx, ebx
call fcn.004ccd90
mov ecx, eax
mov eax, ebp
cdq
idiv dword [ebx + 0x360]
mov eax, dword [ecx + 0x58]
inc edx
cmp eax, edx
jne 0x4c7333
cmp dword [ecx + 0x5c], edi
je 0x4c7371
mov edx, esi
dec esi
test edx, edx
jne 0x4c7313
mov dword [esp + 0x10], esi
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret
dec edi
cmp edi, 1
jne 0x4c7513
cmp ebp, dword [ebx + 0x360]
jg 0x4c7513
mov ecx, dword [esp + 0x10]
pop edi
mov eax, 0xfffffff6
pop esi
pop ebp
sub eax, ecx
pop ebx
add esp, 0x10
ret
mov ecx, dword [ebx + 0x360]
mov eax, ebp
cdq
idiv ecx
mov dword [esp + 0x10], esi
inc edx
cmp edx, ecx
jg 0x4c738e
mov eax, 0xfffffff6
sub eax, esi
mov esi, eax
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret
cmp eax, 2
jne 0x4c7513
mov ecx, ebx
call fcn.004ccdc0
mov esi, eax
mov ecx, esi
dec esi
test ecx, ecx
je 0x4c73da
mov edi, dword [esp + 0x14]
push esi
mov ecx, ebx
call fcn.004ccd90
mov ecx, dword [ebx + 0x360]
mov edx, ebp
sub edx, ecx
mov ecx, dword [eax + 0x58]
cmp ecx, edx
jne 0x4c73d3
cmp dword [eax + 0x5c], edi
je 0x4c738e
mov eax, esi
dec esi
test eax, eax
jne 0x4c73b5
mov eax, dword [ebx + 0x354]
mov dword [esp + 0x30], 0
test eax, eax
jle 0x4c743d
mov edi, dword [ebx + 0x350]
mov ebp, eax
mov ecx, dword [edi]
mov esi, 0x5b6304
mov eax, dword [ecx + 8]
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4c7422
test cl, cl
je 0x4c741e
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4c7422
add eax, 2
add esi, 2
test cl, cl
jne 0x4c73fe
xor eax, eax
jmp 0x4c7427
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x4c742f
inc dword [esp + 0x30]
add edi, 4
dec ebp
jne 0x4c73f4
mov eax, dword [esp + 0x30]
test eax, eax
jne 0x4c7445
mov dword [esp + 0x30], 1
mov ecx, ebx
call fcn.004ccdc0
mov edi, eax
mov dword [esp + 0x14], 0
dec edi
test eax, eax
je 0x4c74c2
mov ecx, dword [esp + 0x30]
lea ebp, [ecx - 1]
push edi
mov ecx, ebx
call fcn.004ccd90
mov edx, ebp
mov ecx, dword [esp + 0x28]
imul edx, dword [ebx + 0x360]
lea edx, [edx + ecx - 1]
mov ecx, dword [eax + 0x58]
cmp ecx, edx
jne 0x4c74bb
mov eax, dword [eax + 0x54]
mov esi, 0x5b6224
mov dl, byte [eax]
mov cl, dl
cmp dl, byte [esi]
jne 0x4c74ae
test cl, cl
je 0x4c74aa
mov dl, byte [eax + 1]
mov cl, dl
cmp dl, byte [esi + 1]
jne 0x4c74ae
add eax, 2
add esi, 2
test cl, cl
jne 0x4c748a
xor eax, eax
jmp 0x4c74b3
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x4c74bb
inc dword [esp + 0x14]
mov eax, edi
dec edi
test eax, eax
jne 0x4c7462
mov ecx, ebx
call fcn.004ccdc0
mov edi, eax
mov ecx, edi
dec edi
test ecx, ecx
mov dword [esp + 0x10], edi
je 0x4c7513
mov edx, dword [esp + 0x30]
mov ebp, dword [esp + 0x28]
lea esi, [edx - 1]
push edi
mov ecx, ebx
call fcn.004ccd90
mov ecx, esi
imul ecx, dword [ebx + 0x360]
lea edx, [ecx + ebp - 1]
mov ecx, dword [eax + 0x58]
cmp ecx, edx
jne 0x4c7508
mov ecx, dword [esp + 0x14]
mov edx, dword [eax + 0x5c]
cmp edx, ecx
je 0x4c751f
mov edx, edi
dec edi
test edx, edx
jne 0x4c74e1
mov dword [esp + 0x10], edi
mov eax, dword [esp + 0x10]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret
mov dword [esp + 0x10], edi
mov eax, edi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x10
ret