Function at 0x54af60
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x20
mov eax, dword [0x62d040]
xor eax, esp
mov dword [esp + 0x18], eax
push ebx
push esi
push edi
mov edi, edx
mov esi, ecx
cmp edi, 0x20
je 0x54afa9
cmp edi, 0x25
je 0x54afa9
nop
cmp edi, 0x27
je 0x54afa9
cmp edi, 0x6b
je 0x54afa9
cmp edi, 0xbb
je 0x54afa9
xor al, al
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
cmp dword [esi + 0x6c], 0
je case.0x54afe4.33
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
mov bx, ax
push 0x10
shr bx, 0xf
call dword [sym.imp.USER32.dll_GetKeyState]
lea ecx, [edi - 0x20]
shr ax, 0xf
cmp ecx, 0x9b
ja case.0x54afe4.33
movzx ecx, byte [ecx + 0x54b2b0]
jmp dword [ecx*4 + 0x54b29c]
test bl, bl
je 0x54b00a
mov ecx, dword [esi + 0x6c]
mov eax, dword [ecx + 0x20]
mov dword [esi + 0x74], eax
lea eax, [esp + 0xc]
mov edx, dword [ecx + 0x20]
push eax
lea eax, [esp + 0x14]
push eax
push 2
push edx
jmp 0x54b032
test al, al
je case.0x54afe4.33
mov eax, dword [esi + 0x6c]
mov edx, dword [esi + 0x74]
mov ecx, dword [eax + 0x20]
lea eax, [esp + 0xc]
push eax
lea eax, [esp + 0x14]
cmp ecx, edx
push eax
mov eax, ecx
cmovbe eax, edx
cmovbe edx, ecx
push 4
push eax
mov ecx, esi
call fcn.0054a300
mov edx, dword [esp + 0x10]
lea eax, [esp + 0x14]
push eax
push 1
push dword [esp + 0x14]
mov ecx, esi
call fcn.0054a020
test al, al
je case.0x54afe4.33
push 0
lea eax, [esp + 0x18]
push eax
push dword [esi]
call dword [sym.imp.USER32.dll_InvalidateRect]
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
mov edi, dword [esi + 0x6c]
test byte [edi + 0x28], 1
jne 0x54b0a9
test byte [edi], 4
je 0x54b0a9
push 0
mov edx, edi
mov ecx, esi
call fcn.00549c60
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
mov ecx, dword [edi + 0x24]
test ecx, ecx
je case.0x54afe4.33
mov edi, dword ds:[edi + 0x20]
dec ecx
test edi, edi
je case.0x54afe4.33
mov eax, dword [esi + 0xd4]
mov eax, dword [eax + 8]
lea eax, [eax + edi*4]
mov ebx, dword ds:[eax - 4]
lea eax, [eax - 4]
dec edi
cmp dword [ebx + 0x24], ecx
je 0x54b0fd
test edi, edi
jne 0x54b0d4
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
mov dword [esi + 0x6c], ebx
mov edx, edi
mov eax, dword [ebx + 0x20]
mov ecx, esi
mov dword [esi + 0x74], eax
call fcn.0054a660
push 0
mov edx, ebx
mov ecx, esi
call fcn.0054a480
lea eax, [esp + 0xc]
mov edx, edi
push eax
lea eax, [esp + 0x14]
push eax
push 4
push edi
mov ecx, esi
call fcn.0054a300
mov edx, dword [esp + 0x10]
lea eax, [esp + 0x14]
push eax
push 1
push dword [esp + 0x14]
mov ecx, esi
call fcn.0054a020
test al, al
je 0x54b159
push 0
lea eax, [esp + 0x18]
push eax
push dword [esi]
call dword [sym.imp.USER32.dll_InvalidateRect]
mov ecx, esi
call fcn.0054d640
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
mov ecx, dword [esi + 0x6c]
test byte [ecx + 0x28], 1
jne case.0x54afe4.33
test byte [ecx], 4
jne 0x54b1aa
mov edx, ecx
mov ecx, esi
push 1
call fcn.00549c60
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
mov edx, dword [ecx + 0x20]
mov edi, dword [esi + 0xd4]
lea eax, [edx + 1]
cmp eax, dword [edi]
jae case.0x54afe4.33
mov eax, dword [edi + 8]
mov edi, dword [eax + edx*4 + 4]
mov eax, dword [ecx + 0x24]
inc eax
cmp dword [edi + 0x24], eax
jne case.0x54afe4.33
mov dword [esi + 0x6c], edi
mov ecx, esi
mov eax, dword [edi + 0x20]
mov dword [esi + 0x74], eax
mov edx, dword [edi + 0x20]
inc edx
call fcn.0054a660
push 0
mov edx, edi
mov ecx, esi
call fcn.0054a480
mov eax, dword [esi + 0x6c]
mov edx, dword [eax + 0x20]
lea eax, [esp + 0xc]
push eax
lea eax, [esp + 0x14]
push eax
push 4
push edx
jmp 0x54b129
cmp edi, 0x6b
jne 0x54b229
test bl, bl
jne 0x54b239
mov al, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x18]
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret
cmp edi, 0xbb
jne case.0x54afe4.33
test bl, bl
je case.0x54afe4.33
test al, al
je case.0x54afe4.33
test byte [esi + 0x20], 0x10
je 0x54b251
mov edx, dword [esi + 8]
mov ecx, esi
push 0
push dword [esi + 0xb4]
call fcn.00549740
xor edi, edi
cmp dword [esi + 0xac], edi
jbe case.0x54afe4.33
xor ebx, ebx
nop dword [eax]
mov eax, dword [esi + 0xa4]
mov ecx, esi
mov edx, dword [esi + 0xc]
push 0
push dword [ebx + eax]
call fcn.00549740
inc edi
lea ebx, [ebx + 4]
cmp edi, dword [esi + 0xac]
jb 0x54b260
mov ecx, dword [esp + 0x24]
mov al, 1
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.00583f7f
add esp, 0x20
ret