Function at 0x403a14
Capabilities:
Log keystrokes via polling

Disassembly:
push 7
jmp 0x402871
push 6
mov dword [0x44d8a4], eax
push ebx
push esi
mov ebx, dword [esp + 0xc]
mov esi, dword [esp + 0x10]
push ecx
push edi
mov ecx, dword [ebx*4 + 0x45e590]
test ecx, ecx
je 0x40286b
cmp ecx, 0xffffffff
je 0x40286b
mov edx, dword [ecx + 0xc]
test edx, edx
je 0x403a69
mov eax, esi
and esi, 0x7fffff
shr eax, 0x17
test ah, ah
jne 0x403a57
xor edx, edx
jmp 0x403a69
movzx eax, al
mov edi, eax
cmp edx, 0xffffff88
jle 0x403a69
test eax, eax
je 0x403a69
mul edx
add esi, eax
mov eax, 0x45e580
mov dword [eax], ebx
mov dword [eax + 8], esi
cmp esi, 0xffffffff
jl 0x40286f
cmp esi, dword [ecx]
jg 0x40286f
je 0x403abd
lea ecx, [ecx + esi*8 + 0x18]
mov eax, dword [ecx]
mov esi, dword [ecx + 4]
test eax, eax
jne 0x403a99
cdq
mov eax, 0x45e3c8
cmp edx, 0xffffff88
jle 0x403b91
push esi
push 1
call fcn.0040517e
mov dword [edx], eax
mov dword [edx + 4], esi
mov dword [edx - 0x1e0], ecx
pop edx
pop edi
pop ecx
pop esi
pop ebx
ret 8
inc dword [ecx]
cmp esi, dword [ecx + 8]
jl 0x403a86
push esi
push edx
mov edx, 0x44d8b0
mov eax, dword [edx]
and dword [edx], 0
test eax, eax
jne 0x403aea
mov ah, 0x80
mov edx, esi
shr edx, 2
cmp edx, eax
jbe 0x403aea
add esi, edx
and esi, 0xfffff000
or eax, 0xffffffff
add esi, eax
dec esi
dec esi
lea eax, [esi*8 + 0x18]
push eax
push ecx
push 8
fxsave [0x44ce50]
push dword [0x45e8c4]
call sub.kernel32.dll_HeapReAlloc
fxrstor [0x44ce50]
test eax, eax
je 0x4028f2
mov dword [ebx*4 + 0x45e590], eax
xchg ecx, eax
mov dword [ecx + 8], esi
cmp ebx, 1
je 0x403b2f
cmp ebx, 2
jne 0x403b8a
shl esi, 4
push ecx
push ebx
push esi
mov eax, dword [ebx*4 + 0x45e574]
push eax
xchg ebx, eax
mov esi, 0x45e730
lodsd eax, dword [esi]
cmp eax, ebx
je 0x403b50
cmp esi, 0x45e8c0
jb 0x403b43
sub ebx, eax
push 8
fxsave [0x44ce50]
push dword [0x45e8c4]
call sub.kernel32.dll_HeapReAlloc
fxrstor [0x44ce50]
test ebx, ebx
jne 0x403b79
mov ecx, dword [esi - 4]
jecxz 0x403b79
mov dword [esi - 4], eax
pop ebx
pop ecx
test eax, eax
je 0x4028f2
mov dword [ebx*4 + 0x45e574], eax
pop edx
pop esi
jmp 0x403a86
mov ebx, edi
xchg esi, eax
call fcn.00405134
xchg edi, eax
mov dword [edi], ecx
mov dword [edi + 4], esi
mov dword [edi + 8], edx
add edi, 0x1c
push edx
cmp edx, 0xffffff88
mov edx, esi
jne 0x403bc1
movzx eax, byte [esi]
inc esi
cmp al, 9
jne 0x403bba
dec ebx
js 0x403bbe
mov edx, esi
test al, al
jne 0x403bad
dec esi
jmp 0x403bf1
lodsb al, byte [esi]
cmp al, 0x22
je 0x403be1
dec esi
movzx eax, byte [esi]
inc esi
cmp al, 0x2c
jne 0x403bed
dec ebx
js 0x403bf1
mov edx, esi
movzx eax, byte [esi]
inc esi
cmp al, 0x2c
je 0x403bcf
cmp al, 0x22
jne 0x403bed
inc edx
movzx eax, byte [esi]
inc esi
cmp al, 0x22
je 0x403bed
test al, al
jne 0x403be1
test al, al
jne 0x403bc7
push edx
xchg edx, eax
and dword [edi], 0
cmp ebx, 0
jg 0x403c42
cmp esi, eax
jbe 0x403c21
mov dl, byte [esi - 1]
test dl, dl
je 0x403c12
cmp dl, 0x2c
jne 0x403c13
cmp dword [esp + 4], 0xffffff87
jne 0x403c13
dec esi
cmp byte [esi - 1], 0x22
jne 0x403c21
cmp dword [esp + 4], 0xffffff87
jne 0x403c21
dec esi
sub esi, eax
push esi
mov edx, esi
xchg esi, eax
test edx, edx
jle 0x403c3f
lodsb al, byte [esi]
cmp al, 0x22
jne 0x403c3b
cmp byte [esi], al
jne 0x403c3b
lodsb al, byte [esi]
dec edx
jle 0x403c3f
dec dword [esp]
stosb byte es:[edi], al
dec edx
jne 0x403c2b
mov byte [edi], dl
pop eax
push 1
push edi
call fcn.00405146
pop dword [eax + 0xc]
cmp byte [esi], 0x22
jne 0x403c53
inc esi
mov dword [eax + 0x10], esi
mov dword [eax + 0x14], ebx
pop esi
add eax, 0x1c
mov dword [eax - 4], eax
mov esi, edi
sub esi, eax
push esi
jmp 0x403aaa