Function at 0x5135f5
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x4c
mov eax, dword [0x5c2f60]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [ebp + 0x2c]
push ebx
mov ebx, dword [ebp + 0x20]
push esi
and dword [eax], 0
xor esi, esi
push edi
mov edi, dword [ebp + 0xc]
mov dword [ebp - 0x30], edi
mov dword [ebp - 0x2c], ebx
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x28], esi
cmp dword [edi + 8], esi
jle 0x51363c
push esi
mov ecx, edi
call fcn.00419c06
cmp dword [eax], ebx
je 0x513651
inc esi
mov dword [ebp - 0x28], esi
cmp esi, dword [edi + 8]
jl 0x513627
xor eax, eax
mov ecx, dword [ebp - 4]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.00540fa1
mov esp, ebp
pop ebp
ret 0x28
test esi, esi
js 0x51363c
push 0x58d5d0
mov ecx, ebx
call fcn.00409cb9
xor ebx, ebx
mov dword [ebp - 0x38], eax
cmp dword [ebp + 8], 9
jne 0x51381c
or dword [ebp - 0x2c], 0xffffffff
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov ecx, 0x8000
test cx, ax
je 0x513756
lea ebx, [esi - 1]
test ebx, ebx
jns 0x5136a9
cmp dword [ebp + 0x24], 0
jne 0x51374b
cmp dword [ebp + 0x28], 0
jne 0x51373d
mov ebx, dword [edi + 8]
dec ebx
cmp ebx, esi
je 0x51363c
cmp dword [ebp - 0x38], 0
je 0x5136cb
push ebx
mov ecx, edi
call fcn.00419c06
push 0x58d5d0
mov ecx, dword [eax]
call fcn.00409cb9
test eax, eax
jne 0x513720
push ebx
mov ecx, edi
call fcn.00419c06
mov edi, dword [eax]
mov eax, dword [edi]
mov esi, dword [eax + 0x11c]
mov ecx, esi
call fcn.005417cc
mov ecx, edi
call esi
test eax, eax
je 0x51371a
mov ecx, dword [ebp - 0x30]
push ebx
call fcn.00419c06
lea edi, [ebp - 0x14]
mov esi, dword [eax]
lea eax, [ebp - 0x14]
add esi, 0x74
push eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
call dword [sym.imp.USER32.dll_IsRectEmpty]
mov esi, dword [ebp - 0x28]
mov edi, dword [ebp - 0x30]
test eax, eax
jne 0x513720
mov dword [ebp - 0x2c], ebx
jmp 0x513720
mov esi, dword [ebp - 0x28]
mov edi, dword [ebp - 0x30]
mov eax, dword [ebp - 0x2c]
dec ebx
test eax, eax
js 0x51368d
push eax
mov ecx, edi
call fcn.00419c06
mov ebx, dword [eax]
mov eax, ebx
jmp 0x51363e
mov eax, dword [ebp - 0x34]
mov dword [eax], 2
jmp 0x51363c
mov eax, dword [ebp - 0x34]
or dword [eax], 0xffffffff
jmp 0x51363c
lea ebx, [esi + 1]
cmp ebx, dword [edi + 8]
jl 0x513774
cmp dword [ebp + 0x28], 0
jne 0x51380e
cmp dword [ebp + 0x24], 0
jne 0x513800
xor ebx, ebx
cmp ebx, esi
je 0x51363c
cmp dword [ebp - 0x38], 0
je 0x51379a
push ebx
mov ecx, edi
call fcn.00419c06
push 0x58d5d0
mov ecx, dword [eax]
call fcn.00409cb9
test eax, eax
jne 0x5137ef
push ebx
mov ecx, edi
call fcn.00419c06
mov edi, dword [eax]
mov eax, dword [edi]
mov esi, dword [eax + 0x11c]
mov ecx, esi
call fcn.005417cc
mov ecx, edi
call esi
test eax, eax
je 0x5137e9
mov ecx, dword [ebp - 0x30]
push ebx
call fcn.00419c06
lea edi, [ebp - 0x14]
mov esi, dword [eax]
lea eax, [ebp - 0x14]
add esi, 0x74
push eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
call dword [sym.imp.USER32.dll_IsRectEmpty]
mov esi, dword [ebp - 0x28]
mov edi, dword [ebp - 0x30]
test eax, eax
jne 0x5137ef
mov dword [ebp - 0x2c], ebx
jmp 0x5137ef
mov esi, dword [ebp - 0x28]
mov edi, dword [ebp - 0x30]
mov eax, dword [ebp - 0x2c]
inc ebx
test eax, eax
js 0x513759
jmp 0x51372c
mov eax, dword [ebp - 0x34]
mov dword [eax], 0xfffffffe
jmp 0x51363c
mov eax, dword [ebp - 0x34]
mov dword [eax], 1
jmp 0x51363c
mov edi, dword [ebp - 0x2c]
mov eax, dword [edi]
mov esi, dword [eax + 0x160]
mov ecx, esi
call fcn.005417cc
mov ecx, edi
call esi
test eax, eax
jne 0x51363c
mov eax, dword [ebp + 8]
mov ecx, edi
lea edi, [ebp - 0x48]
lea esi, [ecx + 0x74]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
sub eax, 0x25
je 0x51393f
sub eax, 1
je 0x513869
sub eax, 1
je 0x51393f
sub eax, 1
jne 0x513736
mov eax, dword [ebp - 0x48]
add eax, dword [ebp - 0x40]
cdq
sub eax, edx
mov edx, eax
sar edx, 1
cmp dword [ebp + 8], 0x28
mov dword [ebp - 0x34], edx
jne 0x513885
mov esi, dword [ebp - 0x3c]
inc esi
jmp 0x513889
mov esi, dword [ebp - 0x44]
dec esi
xor eax, eax
mov dword [ebp - 0x38], esi
cmp dword [ebp + 8], 0x28
mov ecx, edx
mov dword [ebp - 0x28], ecx
setne al
dec eax
and eax, 0xa
add eax, 0xfffffffb
mov dword [ebp - 0x2c], eax
mov edi, eax
mov eax, esi
mov dword [ebp - 0x2c], eax
cmp ecx, dword [ebp + 0x10]
jge 0x5138b9
cmp edx, dword [ebp + 0x18]
jg 0x513736
test ebx, ebx
jne 0x513926
mov esi, dword [ebp - 0x30]
push esi
push eax
push ecx
call fcn.005135b4
mov ebx, eax
test ebx, ebx
jne 0x5138e0
push esi
push dword [ebp - 0x2c]
push dword [ebp - 0x34]
call fcn.005135b4
mov ebx, eax
test ebx, ebx
je 0x5138fc
mov eax, dword [ebx]
mov esi, dword [eax + 0x11c]
mov ecx, esi
call fcn.005417cc
mov ecx, ebx
call esi
mov esi, dword [ebp - 0x30]
neg eax
sbb eax, eax
and ebx, eax
mov eax, dword [ebp - 0x2c]
add eax, edi
cmp dword [ebp + 8], 0x28
mov dword [ebp - 0x2c], eax
jne 0x513911
cmp eax, dword [ebp + 0x1c]
jg 0x51391d
jmp 0x513916
cmp eax, dword [ebp + 0x14]
jl 0x51391d
mov ecx, dword [ebp - 0x28]
test ebx, ebx
je 0x5138c0
mov edx, dword [ebp - 0x34]
mov ecx, dword [ebp - 0x28]
mov esi, dword [ebp - 0x38]
sub ecx, 5
add edx, 5
mov dword [ebp - 0x28], ecx
mov dword [ebp - 0x34], edx
test ebx, ebx
je 0x5138a6
jmp 0x513736
cmp dword [ebp + 8], 0x27
mov esi, dword [ebp - 0x48]
jne 0x51394e
mov eax, dword [ebp - 0x40]
inc eax
jmp 0x513951
lea eax, [esi - 6]
mov edi, dword [ebp - 0x30]
xor edx, edx
cmp dword [ebp + 8], 0x27
mov dword [ebp - 0x28], eax
setne dl
dec edx
and edx, 0xa
add edx, 0xfffffffb
mov dword [ebp - 0x4c], edx
cmp dword [ebp + 8], 0x27
jne 0x51398e
cmp eax, dword [ebp + 0x18]
jle 0x5139ad
cmp dword [ebp + 0x28], 0
jne 0x51380e
cmp dword [ebp + 0x24], 0
jne 0x513800
mov eax, dword [ebp + 0x10]
jmp 0x5139aa
cmp eax, dword [ebp + 0x10]
jge 0x5139ad
cmp dword [ebp + 0x24], 0
jne 0x51374b
cmp dword [ebp + 0x28], 0
jne 0x51373d
mov eax, dword [ebp + 0x18]
mov dword [ebp - 0x28], eax
cmp eax, esi
jl 0x5139ba
cmp eax, dword [ebp - 0x40]
jle 0x513736
mov edx, dword [ebp - 0x44]
xor esi, esi
mov dword [ebp - 0x24], eax
add eax, 5
mov dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x3c]
mov dword [ebp - 0x20], edx
mov dword [ebp - 0x18], eax
cmp dword [ecx + 0xb8], esi
jne 0x5139e1
cmp dword [ecx + 0xbc], esi
je 0x513a01
mov eax, dword [ecx]
mov esi, dword [eax + 0x144]
mov ecx, esi
call fcn.005417cc
mov ecx, dword [ebp - 0x2c]
call esi
xor esi, esi
test eax, eax
je 0x513a15
mov eax, dword [ebp - 0x18]
mov edx, dword [ebp - 0x20]
push 0xfffffffffffffffd
sub eax, edx
pop ecx
cdq
idiv ecx
push eax
push esi
lea eax, [ebp - 0x24]
push eax
call dword [sym.imp.USER32.dll_InflateRect]
mov eax, esi
mov dword [ebp - 0x14], esi
mov dword [ebp - 0x10], esi
mov dword [ebp - 0xc], esi
mov dword [ebp - 8], esi
mov dword [ebp - 0x30], esi
cmp dword [edi + 8], esi
jle 0x513a79
push eax
mov ecx, edi
call fcn.00419c06
mov eax, dword [eax]
mov dword [ebp - 0x38], eax
mov eax, dword [eax]
mov esi, dword [eax + 0x11c]
mov ecx, esi
call fcn.005417cc
mov ecx, dword [ebp - 0x38]
call esi
test eax, eax
je 0x513a69
mov esi, dword [ebp - 0x38]
lea eax, [ebp - 0x24]
push eax
lea eax, [esi + 0x74]
push eax
lea eax, [ebp - 0x14]
push eax
call dword [sym.imp.USER32.dll_IntersectRect]
test eax, eax
jne 0x513a77
mov eax, dword [ebp - 0x30]
inc eax
mov dword [ebp - 0x30], eax
cmp eax, dword [edi + 8]
jl 0x513a2b
jmp 0x513a79
mov ebx, esi
mov eax, dword [ebp - 0x28]
add eax, dword [ebp - 0x4c]
mov dword [ebp - 0x28], eax
test ebx, ebx
jne 0x513736
mov ecx, dword [ebp - 0x2c]
mov esi, dword [ebp - 0x48]
jmp 0x51396a