Function at 0x447b60
Capabilities:
Check for foreground window switch
Log keystrokes via polling

Disassembly:
sub esp, 0x78
mov eax, dword [0x4951c0]
xor eax, esp
mov dword [esp + 0x70], eax
mov edx, dword [0x4edba0]
push ebp
push esi
mov esi, ecx
mov ecx, dword [0x544434]
mov dword [esp + 0x3c], ecx
mov ecx, dword [0x53b594]
mov dword [esp + 0x40], edx
mov edx, dword [0x53c458]
add ecx, 2
add edx, 2
xor eax, eax
or ebp, 0xffffffff
mov dword [esp + 0x44], ecx
mov ecx, dword [0x4ac80c]
mov dword [esp + 0x48], edx
mov edx, dword [0x53b16c]
push edi
mov dword [esp + 0x2c], eax
mov dword [0x543998], eax
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x20], edx
lea edi, [ebp + 2]
cmp dword [0x58fb10], eax
jne 0x447be4
call fcn.004566d0
lea eax, [esp + 0x40]
push eax
push 0
push edi
xor edx, edx
mov ecx, ebx
call fcn.0045f070
mov eax, esi
mov dword [0x49b484], edi
mov dword [0x53b590], edi
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x447bf5
sub eax, edx
mov ecx, eax
imul ecx, dword [0x4ed33c]
mov eax, dword [0x4965ec]
cdq
sub eax, edx
shr ecx, 2
sar eax, 1
sub eax, ecx
cmp eax, edi
jge 0x447c1c
mov eax, edi
mov ecx, dword [0x544748]
neg eax
mov dword [esp + 0x1c], eax
mov eax, dword [0x4967f0]
cdq
sub eax, edx
sar eax, 1
sub ecx, eax
cmp byte [0x52db08], 0
mov dword [esp + 0x18], ecx
je 0x447c64
cmp dword [0x653778], 0
push 0
push 0x52db08
je 0x447c5d
mov ecx, 0xa
call fcn.004700b0
jmp 0x447c64
mov ecx, ebx
call fcn.00471890
mov edx, dword [0x52d868]
shl edx, 8
add edx, dword [0x4ed664]
lea eax, [esp + 0x1c]
shl edx, 8
add edx, dword [0x544c8c]
lea ecx, [esp + 0x18]
push edx
push eax
push esi
mov edx, ebx
call fcn.00445d00
mov eax, dword [0x4965ec]
mov ecx, dword [0x4ed33c]
cdq
sub eax, edx
sar eax, 1
lea edx, [eax + ecx*2]
add ecx, ecx
add ecx, ecx
sub eax, ecx
mov cx, word [0x485b68]
mov dword [esp + 0x28], eax
mov eax, dword [0x4967f0]
mov dword [esp + 0x24], edx
cdq
sub eax, edx
mov edx, dword [0x485b64]
sar eax, 1
add eax, dword [0x544748]
mov dword [esp + 0x6c], edx
mov dl, byte [0x485b6a]
mov word [esp + 0x70], cx
mov ecx, dword [0x485b6c]
mov dword [esp + 0x1c], eax
mov byte [esp + 0x72], dl
mov dx, word [0x485b70]
mov dword [esp + 0x73], ecx
mov cl, byte [0x485b72]
xor esi, esi
neg eax
mov word [esp + 0x77], dx
mov byte [esp + 0x79], cl
mov dword [esp + 0x18], eax
lea edi, [esp + 0x6c]
nop
mov edx, dword [esp + esi*4 + 0x24]
mov ecx, dword [esp + 0x20]
mov eax, dword [esp + 0x18]
neg edx
mov dword [esp + 0x10], edx
push ecx
lea edx, [esp + 0x14]
push edx
push edi
lea ecx, [esp + 0x20]
mov edx, ebx
mov dword [esp + 0x20], eax
call fcn.00445d00
inc esi
add edi, 7
cmp esi, 2
jl 0x447d10
mov edi, dword [esp + 0x2c]
push 1
push 0
push 0
push 0
lea eax, [esp + 0x60]
push eax
call dword [sym.imp.USER32.dll_PeekMessageA]
test eax, eax
je 0x447d45
mov edx, dword [0x49ac78]
mov eax, dword [ebx + 0x10]
lea ecx, [esp + 0x50]
push ecx
push edx
push eax
call dword [sym.imp.USER32.dll_TranslateAcceleratorA]
test eax, eax
jne 0x447d81
lea ecx, [esp + 0x50]
push ecx
call dword [sym.imp.USER32.dll_TranslateMessage]
lea edx, [esp + 0x50]
push edx
call dword [sym.imp.USER32.dll_DispatchMessageA]
cmp dword [0x58fe6c], 0
jne 0x448142
mov esi, dword [sym.imp.USER32.dll_GetForegroundWindow]
call esi
mov ecx, dword [0x49ab6c]
cmp eax, dword [ecx + 0x10]
je 0x447db0
xor eax, eax
jmp 0x447dbb
push 0x25
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movzx eax, ax
test eax, 0x8000
jne 0x447de5
call esi
mov edx, dword [0x49ab6c]
cmp eax, dword [edx + 0x10]
je 0x447dd3
xor eax, eax
jmp 0x447dde
push 0x26
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movzx eax, ax
test eax, 0x8000
je 0x447e3f
mov esi, dword [sym.imp.WINMM.dll_timeGetTime]
call esi
lea ecx, [edi + 0x7d]
cmp eax, ecx
ja 0x447df8
cmp eax, edi
jae 0x447e45
call esi
mov edi, eax
lea eax, [ebp - 1]
test eax, eax
jge 0x447e08
mov eax, 1
mov edx, dword [esp + eax*4 + 0x24]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x2c], edx
mov edx, dword [0x49ab6c]
lea ecx, [esp + 0x2c]
mov dword [esp + 0x30], eax
mov eax, dword [edx + 0x10]
push ecx
push eax
call dword [sym.imp.USER32.dll_ClientToScreen]
mov ecx, dword [esp + 0x30]
mov edx, dword [esp + 0x2c]
push ecx
push edx
call dword [sym.imp.USER32.dll_SetCursorPos]
jmp 0x447e45
mov esi, dword [sym.imp.WINMM.dll_timeGetTime]
call dword [sym.imp.USER32.dll_GetForegroundWindow]
mov ecx, dword [0x49ab6c]
cmp eax, dword [ecx + 0x10]
je 0x447e5a
xor eax, eax
jmp 0x447e65
push 0x27
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movzx eax, ax
test eax, 0x8000
jne 0x447e93
call dword [sym.imp.USER32.dll_GetForegroundWindow]
mov edx, dword [0x49ab6c]
cmp eax, dword [edx + 0x10]
je 0x447e81
xor eax, eax
jmp 0x447e8c
push 0x28
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movzx eax, ax
test eax, 0x8000
je 0x447ee3
call esi
lea ecx, [edi + 0x7d]
cmp eax, ecx
ja 0x447ea0
cmp eax, edi
jae 0x447ee3
call esi
mov edi, eax
lea eax, [ebp + 1]
cmp eax, 1
jle 0x447eae
xor eax, eax
mov edx, dword [esp + eax*4 + 0x24]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x34], edx
mov edx, dword [0x49ab6c]
lea ecx, [esp + 0x34]
mov dword [esp + 0x38], eax
mov eax, dword [edx + 0x10]
push ecx
push eax
call dword [sym.imp.USER32.dll_ClientToScreen]
mov ecx, dword [esp + 0x38]
mov edx, dword [esp + 0x34]
push ecx
push edx
call dword [sym.imp.USER32.dll_SetCursorPos]
cmp dword [ebx + 0xa2c], 0x200
jne 0x448028
mov eax, dword [ebx + 0xa34]
mov ecx, dword [esp + 0x1c]
cmp eax, ecx
jl 0x447f71
mov edx, dword [0x4edb80]
add edx, ecx
cmp eax, edx
jge 0x447f71
mov eax, dword [ebx + 0xa30]
mov edx, dword [esp + 0x24]
cmp eax, edx
mov ecx, dword [0x4ed33c]
jl 0x447f59
lea edx, [edx + ecx*2]
add edx, ecx
cmp eax, edx
jge 0x447f59
xor esi, esi
cmp ebp, esi
je 0x448028
cmp byte [0x52f068], 0
je 0x447fb7
cmp dword [0x653778], 0
push 0
push 0x52f068
je 0x447fb0
mov ecx, 0xa
call fcn.004700b0
jmp 0x447fb7
mov edx, dword [esp + 0x28]
cmp eax, edx
jl 0x447f71
lea edx, [edx + ecx*2]
add edx, ecx
cmp eax, edx
jge 0x447f71
mov esi, 1
jmp 0x447f2c
cmp ebp, 0xffffffff
je 0x447fab
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + ebp*4 + 0x24]
mov edx, dword [esp + 0x20]
mov dword [esp + 0x14], ecx
neg eax
push edx
mov dword [esp + 0x14], eax
lea ecx, [ebp*8]
sub ecx, ebp
lea eax, [esp + 0x14]
lea edx, [esp + ecx + 0x70]
push eax
push edx
lea ecx, [esp + 0x20]
mov edx, ebx
call fcn.00445d00
or ebp, 0xffffffff
jmp 0x448028
mov ecx, ebx
call fcn.00471890
cmp ebp, 0xffffffff
je 0x447ff1
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + ebp*4 + 0x24]
mov edx, dword [esp + 0x20]
mov dword [esp + 0x14], ecx
neg eax
push edx
mov dword [esp + 0x14], eax
lea ecx, [ebp*8]
sub ecx, ebp
lea eax, [esp + 0x14]
lea edx, [esp + ecx + 0x70]
push eax
push edx
lea ecx, [esp + 0x20]
mov edx, ebx
call fcn.00445d00
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + esi*4 + 0x24]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x14], ecx
neg eax
push edx
mov dword [esp + 0x14], eax
lea ecx, [esi*8]
sub ecx, esi
lea eax, [esp + 0x14]
lea edx, [esp + ecx + 0x70]
push eax
push edx
lea ecx, [esp + 0x20]
mov edx, ebx
mov ebp, esi
call fcn.00445d00
mov eax, dword [ebx + 0xa2c]
cmp eax, 0x202
je 0x448045
cmp eax, 0x102
jne 0x448058
cmp dword [ebx + 0xa30], 0xd
jne 0x448058
mov dword [0x58faec], 0
cmp ebp, 0xffffffff
jne 0x448157
cmp eax, 0x205
je 0x44808a
call dword [sym.imp.USER32.dll_GetForegroundWindow]
mov ecx, dword [0x49ab6c]
cmp eax, dword [ecx + 0x10]
je 0x448074
xor eax, eax
jmp 0x44807f
push 0x1b
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
movzx eax, ax
test eax, 0x8000
je 0x447d45
mov esi, dword [sym.imp.KERNEL32.dll_Sleep]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
call dword [sym.imp.USER32.dll_GetForegroundWindow]
mov edx, dword [0x49ab6c]
cmp eax, dword [edx + 0x10]
je 0x4480ab
xor eax, eax
jmp 0x4480b2
push 0x1b
call edi
movzx eax, ax
test eax, 0x8000
je 0x4480bf
push 0
call esi
jmp 0x448096
cmp byte [0x5439a0], 0
mov dword [0x58faf0], 0
je 0x448142
cmp ebp, 0xffffffff
je 0x44810c
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + ebp*4 + 0x24]
mov edx, dword [esp + 0x20]
mov dword [esp + 0x14], ecx
neg eax
push edx
mov dword [esp + 0x14], eax
lea ecx, [ebp*8]
sub ecx, ebp
lea eax, [esp + 0x14]
lea edx, [esp + ecx + 0x70]
push eax
push edx
lea ecx, [esp + 0x20]
mov edx, ebx
call fcn.00445d00
cmp dword [0x653778], 0
push 0
push 0x5439a0
je 0x44813b
mov ecx, 0xa
call fcn.004700b0
or eax, 0xffffffff
pop edi
pop esi
pop ebp
mov ecx, dword [esp + 0x70]
xor ecx, esp
call fcn.00407f40
add esp, 0x78
ret
mov ecx, ebx
call fcn.00471890
or eax, 0xffffffff
pop edi
pop esi
pop ebp
mov ecx, dword [esp + 0x70]
xor ecx, esp
call fcn.00407f40
add esp, 0x78
ret
cmp ebp, 1
jne 0x44816e
cmp byte [0x52e2b0], 0
je 0x44819d
push 0
push 0x52e2b0
jmp 0x448181
test ebp, ebp
jne 0x44819d
cmp byte [0x53bca8], 0
je 0x44819d
push ebp
push 0x53bca8
cmp dword [0x653778], 0
je 0x448196
mov ecx, 0xa
call fcn.004700b0
jmp 0x44819d
mov ecx, ebx
call fcn.00471890
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + ebp*4 + 0x24]
mov edx, dword [esp + 0x20]
mov dword [esp + 0x14], ecx
neg eax
push edx
mov dword [esp + 0x14], eax
lea ecx, [ebp*8]
sub ecx, ebp
lea eax, [esp + 0x14]
lea edx, [esp + ecx + 0x70]
push eax
push edx
lea ecx, [esp + 0x20]
mov edx, ebx
call fcn.00445d00
mov ecx, dword [esp + 0x7c]
pop edi
pop esi
mov eax, ebp
pop ebp
xor ecx, esp
call fcn.00407f40
add esp, 0x78
ret