Function at 0x403910
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x34
push ebx
push esi
mov esi, ecx
push edi
mov eax, dword [esi + 0x74]
test eax, eax
je 0x403c07
mov ax, word [esi + 0x54]
test ah, 0x10
jne 0x403c07
test ah, 1
je 0x403967
mov eax, dword [esi + 0x70]
add eax, 0x10
mov ecx, dword [eax]
mov dword [esp + 0x18], ecx
mov edx, dword [eax + 4]
mov dword [esp + 0x1c], edx
mov ecx, dword [eax + 8]
mov dword [esp + 0x20], ecx
mov edx, dword [eax + 0xc]
lea eax, [esp + 0x18]
push eax
push 0x28
mov dword [esp + 0x2c], edx
call fcn.00405e00
add esp, 8
jmp 0x40398c
lea ecx, [esi + 0x84]
mov edx, dword [esi + 0x84]
mov dword [esp + 0x18], edx
mov eax, dword [ecx + 4]
mov dword [esp + 0x1c], eax
mov edx, dword [ecx + 8]
mov dword [esp + 0x20], edx
mov eax, dword [ecx + 0xc]
mov dword [esp + 0x24], eax
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
mov ebx, dword [esp + 0x48]
mov edi, dword [esp + 0x44]
xor ecx, ecx
mov dword [esi + 0x68], 0
test ax, ax
setl cl
test ebx, ebx
mov dword [esp + 0xc], ecx
je 0x403a81
mov edx, dword [esi + 0x48]
mov eax, dword [edi]
cmp edx, eax
jne 0x403a81
mov eax, dword [esi + 0x4c]
mov ecx, dword [edi + 4]
cmp eax, ecx
jne 0x403a81
call fcn.0040a690
sub eax, dword [esi + 0x44]
cmp eax, 0x1f4
jge 0x403a81
mov eax, dword [esi + 0x18]
mov ecx, dword [esi + 4]
mov dword [esi + 0x14], eax
lea edi, [ecx + eax*2]
mov ecx, dword [esi + 0x10]
cmp eax, ecx
jge 0x403a29
mov edx, dword [esi + 0x18]
mov ecx, esi
push edx
call fcn.00403c30
test eax, eax
jne 0x403a29
mov ax, word [edi]
cmp ax, 0xd
je 0x403a29
cmp ax, 0xa
je 0x403a29
mov edx, dword [esi + 0x18]
mov ecx, dword [esi + 0x10]
add edi, 2
inc edx
mov eax, edx
mov dword [esi + 0x18], edx
cmp eax, ecx
jl 0x4039f8
mov eax, dword [esi + 0x14]
mov ecx, dword [esi + 4]
test eax, eax
lea edi, [ecx + eax*2]
jle 0x403c07
add edi, 0xfffffffe
mov edx, dword [esi + 0x14]
mov ecx, esi
dec edx
push edx
call fcn.00403c30
test eax, eax
jne 0x403c07
mov ax, word [edi]
cmp ax, 0xd
je 0x403c07
cmp ax, 0xa
je 0x403c07
mov ecx, dword [esi + 0x14]
sub edi, 2
dec ecx
mov eax, ecx
mov dword [esi + 0x14], ecx
test eax, eax
jg 0x403a3d
pop edi
pop esi
pop ebx
add esp, 0x34
ret 8
mov dword [esi + 0x40], ebx
mov eax, dword [edi]
mov dword [esi + 0x48], eax
mov ecx, dword [edi + 4]
mov dword [esi + 0x4c], ecx
call fcn.0040a690
test byte [esi + 0x55], 1
mov dword [esi + 0x44], eax
mov edx, dword [edi]
mov eax, dword [edi + 4]
mov dword [esp + 0x10], edx
mov dword [esp + 0x14], eax
je 0x403b03
lea ecx, [esp + 0x28]
lea edx, [esi + 0x24]
push ecx
push edx
call fcn.00406710
mov eax, dword [esi + 0x70]
add esp, 8
mov ecx, dword [eax + 4]
mov edx, dword [ecx + 0x58]
mov eax, dword [edx + 0xc0]
test eax, eax
je 0x403aec
mov eax, dword [esp + 0x10]
mov edx, dword [esp + 0x14]
lea ecx, [eax*4]
lea eax, [edx*4]
mov dword [esp + 0x10], ecx
mov dword [esp + 0x14], eax
lea ecx, [esp + 0x10]
lea edx, [esp + 0x10]
push ecx
lea eax, [esp + 0x2c]
push edx
push eax
call fcn.00406280
add esp, 0xc
mov ecx, esi
call fcn.00402f70
mov ecx, eax
test ecx, ecx
je 0x403c07
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0x20]
sub eax, edx
cdq
idiv dword [esi + 0x98]
mov ebx, eax
lea eax, [ecx - 1]
cmp ebx, eax
mov ecx, ebx
jl 0x403b32
mov ecx, eax
test ecx, ecx
jge 0x403b3a
xor ebx, ebx
jmp 0x403b40
cmp ebx, eax
jl 0x403b40
mov ebx, eax
mov edx, dword [esi + 0x20]
mov eax, dword [esi + 0x64]
add ebx, edx
cmp ebx, eax
jle 0x403b4e
mov ebx, eax
mov ecx, dword [esi + 0x60]
mov edi, dword [ecx + ebx*4]
mov ecx, esi
push edi
call fcn.00403030
mov edx, dword [esi + 0x1c]
mov ecx, eax
add edi, edx
mov dword [esp + 0x44], ecx
cmp edi, ecx
jle 0x403b6d
mov edi, ecx
mov eax, dword [esi + 4]
mov edx, dword [esi + 0x3c]
push ebp
cmp word [eax + edi*2], 0
mov ebx, dword [edx + ebx*4]
lea eax, [eax + edi*2]
je 0x403bd2
mov ebp, eax
jmp 0x403b89
mov ecx, dword [esp + 0x48]
cmp edi, ecx
jge 0x403bbe
mov ecx, dword [esi + 0x9c]
mov ecx, dword [ecx + edi*4]
mov eax, ecx
cdq
sub eax, edx
mov edx, dword [esp + 0x14]
sar eax, 1
add eax, ebx
cmp edx, eax
jl 0x403bd2
mov eax, dword [esp + 0x20]
add ebx, ecx
cmp ebx, eax
jg 0x403bd2
add ebp, 2
inc edi
cmp word [ebp], 0
jne 0x403b85
jmp 0x403bd2
push edi
mov ecx, esi
call fcn.00403c30
test eax, eax
je 0x403bd2
inc edi
mov dword [esi + 0x68], 1
mov eax, dword [esi + 0x50]
mov dword [esi + 0x18], edi
test eax, eax
pop ebp
jne 0x403bf8
mov eax, dword [esp + 0xc]
mov dword [esi + 0x50], 1
test eax, eax
jne 0x403c07
mov dword [esi + 0x14], edi
pop edi
pop esi
pop ebx
add esp, 0x34
ret 8
mov eax, dword [esp + 0x48]
test eax, eax
jne 0x403c07
mov dword [esi + 0x50], 0
pop edi
pop esi
pop ebx
add esp, 0x34
ret 8