Function at 0x40aa00
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push ecx
push ebx
mov ebx, ecx
push esi
push edi
cmp byte [ebx + 0x800], 0
jne 0x40ac2d
cmp byte [0x46e97c], 0
jne 0x40ac2d
cmp byte [ebx + 0x14], 0
je 0x40ab50
push 0x100
lea edi, [ebx + 0x215]
push 0
push edi
call fcn.0042bfd0
mov eax, dword [ebx + 0x10]
add esp, 0xc
mov ecx, dword [eax]
push edi
push 0x100
push eax
call dword [ecx + 0x24]
test eax, eax
jns 0x40aa6e
mov eax, dword [ebx + 0x10]
push eax
mov ecx, dword [eax]
call dword [ecx + 0x1c]
mov eax, dword [ebx + 0x10]
push edi
push 0x100
push eax
mov ecx, dword [eax]
call dword [ecx + 0x24]
mov al, byte [ebx + 0x267]
or al, byte [ebx + 0x266]
or al, byte [ebx + 0x265]
or al, byte [ebx + 0x264]
or al, byte [ebx + 0x262]
or al, byte [ebx + 0x261]
or al, byte [ebx + 0x260]
or al, byte [ebx + 0x25e]
or al, byte [ebx + 0x25d]
or al, byte [ebx + 0x25c]
jns 0x40aac6
movzx eax, byte [ebx + 0x33f]
or byte [ebx + 0x23f], al
movzx eax, byte [ebx + 0x34b]
or byte [ebx + 0x24b], al
movzx eax, byte [ebx + 0x222]
or byte [ebx + 0x2a5], al
movzx eax, byte [ebx + 0x23d]
or byte [ebx + 0x2a7], al
movzx eax, byte [ebx + 0x23e]
or byte [ebx + 0x292], al
movzx eax, byte [ebx + 0x2b1]
or byte [ebx + 0x231], al
xor esi, esi
lea esp, [esp]
movzx eax, byte [esi + 0x44a530]
test eax, eax
je 0x40ab2f
test byte [edi + eax], 0x80
je 0x40ab27
test byte [eax + ebx + 0x315], 0x80
jne 0x40ab2f
push 0
push esi
mov ecx, ebx
call fcn.0040a3f0
jmp 0x40ab2f
push esi
mov ecx, ebx
call fcn.0040a870
inc esi
cmp esi, 0x100
jl 0x40ab00
lea edi, [ebx + 0x315]
mov ecx, 0x40
lea esi, [ebx + 0x215]
rep movsd dword es:[edi], dword [esi]
jmp 0x40abfd
mov al, byte [ebx + 0x415]
test al, al
je 0x40abae
cmp byte [ebx + 0x416], 0
jne 0x40abaa
cmp byte [ebx + 0x1b5], 0
jne 0x40abf4
cmp byte [ebx + 0x1b6], 0
jne 0x40ab88
mov ecx, dword [ebx + 0x7fc]
push 0
push 0x10
mov eax, dword [ecx]
call dword [eax + 0x5c]
mov ecx, dword [ebx + 0x7fc]
push 0
push 0xa0
mov eax, dword [ecx]
call dword [eax + 0x5c]
mov byte [ebx + 0x125], 0x80
mov byte [ebx + 0x1b5], 0x80
jmp 0x40abf4
test al, al
jne 0x40abf4
cmp byte [ebx + 0x416], 0
je 0x40abf4
cmp byte [ebx + 0x1b5], 0
je 0x40abf4
mov ecx, dword [ebx + 0x7fc]
push 0xa0
mov eax, dword [ecx]
call dword [eax + 0x60]
cmp byte [ebx + 0x1b6], 0
jne 0x40abe6
mov ecx, dword [ebx + 0x7fc]
push 0x10
mov eax, dword [ecx]
call dword [eax + 0x60]
mov byte [ebx + 0x125], 0
mov byte [ebx + 0x1b5], 0
mov word [ebx + 0x415], 0
push 0x14
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
and ax, 0xff01
mov word [ebp - 2], ax
cmp byte [ebx + 0x417], al
je 0x40ac2d
push 0
push 0xf0
mov ecx, ebx
call fcn.0040a3f0
mov ax, word [ebp - 2]
mov byte [ebx + 0x417], al
cmp byte [ebx + 0x418], 0
je 0x40ac78
cmp byte [ebx + 0x800], 0
jne 0x40ac78
lea eax, [ebx + 0x115]
mov edi, 0xfffffeeb
mov esi, eax
sub edi, ebx
mov edi, edi
mov al, byte [esi]
test al, al
jns 0x40ac6b
and al, 0x7f
mov byte [esi], al
jne 0x40ac6b
mov ecx, dword [ebx + 0x7fc]
lea eax, [edi + esi]
push eax
mov edx, dword [ecx]
call dword [edx + 0x60]
inc esi
lea eax, [edi + esi]
cmp eax, 0x100
jl 0x40ac50
jmp 0x40acb4
lea eax, [ebx + 0x115]
mov edi, 0xfffffeeb
mov esi, eax
sub edi, ebx
mov al, byte [esi]
mov cl, al
and cl, 0x7f
je 0x40aca9
and al, 0x80
dec cl
or al, cl
mov byte [esi], al
jne 0x40aca9
mov ecx, dword [ebx + 0x7fc]
lea eax, [esi + edi]
push eax
mov edx, dword [ecx]
call dword [edx + 0x60]
inc esi
lea eax, [esi + edi]
cmp eax, 0x100
jl 0x40ac87
pop edi
mov byte [ebx + 0x418], 0
pop esi
mov byte [ebx + 0x115], 0
pop ebx
mov esp, ebp
pop ebp
ret