Function at 0x401240
Capabilities:
Log keystrokes via polling
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x208
mov eax, dword [section..data]
xor eax, esp
mov dword [esp + 0x204], eax
push esi
push edi
push 0x124
lea eax, [esp + 0xe8]
mov dword [esp + 0xbc], 0
push 0
push eax
mov dword [esp + 0xc8], 0
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
mov dword [esp + 0xe0], 0x128
push 0
push 2
call dword [sym.imp.KERNEL32.dll_CreateToolhelp32Snapshot]
lea ecx, [esp + 0xe0]
mov dword [esp + 0xa8], eax
push ecx
push eax
call dword [sym.imp.KERNEL32.dll_Process32Next]
test eax, eax
je 0x40137e
lea esi, [esp + 0x104]
mov ecx, esi
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4012c8
sub ecx, edx
mov edi, 6
cmp ecx, edi
mov dword [esp + 0x1c], ecx
mov edx, str.hl.exe
cmovb edi, ecx
sub edi, 4
jb 0x401301
nop dword [eax]
mov eax, dword [edx]
cmp eax, dword [esi]
jne 0x401306
add edx, 4
add esi, 4
sub edi, 4
jae 0x4012f0
cmp edi, 0xfffffffc
je 0x40133a
mov al, byte [edx]
cmp al, byte [esi]
jne 0x401333
cmp edi, 0xfffffffd
je 0x40133a
mov al, byte [edx + 1]
cmp al, byte [esi + 1]
jne 0x401333
cmp edi, 0xfffffffe
je 0x40133a
mov al, byte [edx + 2]
cmp al, byte [esi + 2]
jne 0x401333
cmp edi, 0xffffffff
je 0x40133a
mov al, byte [edx + 3]
cmp al, byte [esi + 3]
je 0x40133a
sbb eax, eax
or eax, 1
jmp 0x40133c
xor eax, eax
test eax, eax
jne 0x401347
cmp ecx, 6
ja 0x401347
jae 0x40135b
lea eax, [esp + 0xe0]
push eax
push dword [esp + 0xac]
jmp 0x4012ae
mov eax, dword [esp + 0xe8]
push eax
push 0
push 0x1fffff
mov dword [esp + 0xc4], eax
call dword [sym.imp.KERNEL32.dll_OpenProcess]
mov dword [esp + 0xbc], eax
mov eax, dword [esp + 0xa8]
test eax, eax
je 0x401390
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
sub esp, 8
lea ecx, [esp + 0xc0]
mov eax, esp
mov dword [eax], str.client.dll
mov dword [eax + 4], 0xa
call section..text
sub esp, 8
mov esi, eax
mov ecx, esp
mov dword [ecx], str.engine.dll
mov dword [ecx + 4], 0xa
lea ecx, [esp + 0xc0]
call section..text
add eax, 0x58cfc4
lea ecx, [esi + 0xdb25dc]
mov dword [esp + 0x78], eax
lea eax, [esi + 0x4dcde8c]
mov dword [esp + 0x74], ecx
mov dword [esp + 0x7c], eax
nop dword [eax + eax]
lea ecx, [esp + 0x38]
call fcn.00401140
mov ecx, dword [esp + 0x38]
mov edx, ecx
mov edi, dword [esp + 0x3c]
mov eax, edi
cmp edx, 0xfff0bdbf
jne 0x401414
cmp eax, 0x7fffffff
je 0x40143a
cmp eax, 0x7fffffff
jg 0x401429
jl 0x401425
cmp edx, 0xfff0bdbf
jae 0x401429
or al, 0xff
jmp 0x40142b
mov al, 1
test al, al
jns 0x40143a
add ecx, 0xf4240
adc edi, 0
jmp 0x401442
or ecx, 0xffffffff
mov edi, 0x7fffffff
mov dword [esp + 8], edi
mov dword [esp + 0x10], ecx
nop word [eax + eax]
lea ecx, [esp + 0x90]
call fcn.00401140
mov esi, dword [esp + 0x90]
mov ecx, dword [esp + 0x10]
mov edx, dword [esp + 0x94]
cmp ecx, esi
jne 0x40147a
cmp edi, edx
je 0x40156d
cmp edi, edx
jg 0x401488
jl 0x401484
cmp ecx, esi
jae 0x401488
or al, 0xff
jmp 0x40148a
mov al, 1
test al, al
jle 0x40156d
sub ecx, esi
mov dword [esp + 0x24], ecx
sbb edi, edx
cmp ecx, 0x914f0000
jne 0x4014ca
cmp edi, 0x4e94
jne 0x4014d0
push 0
push 0xf4240
push edi
push ecx
call fcn.004029e0
mov esi, eax
push esi
mov dword [esp + 0x2c], esi
call sub.KERNEL32.dll_Sleep
mov edi, dword [esp + 8]
jmp 0x401450
cmp edi, 0x4e94
jg 0x4014e0
jl 0x4014dc
cmp ecx, 0x914f0000
jae 0x4014e0
or al, 0xff
jmp 0x4014e2
mov al, 1
test al, al
jle 0x4014fa
mov esi, 0x5265c00
push esi
call sub.KERNEL32.dll_Sleep
mov edi, dword [esp + 8]
jmp 0x401450
push 0
push 0xf4240
push edi
push ecx
call fcn.004029e0
push 0
mov esi, eax
mov eax, edx
push 0xf4240
push eax
push esi
mov dword [esp + 0x1c], esi
call fcn.00402b70
mov ecx, dword [esp + 0x24]
cmp eax, ecx
jne 0x40152a
cmp edx, edi
je 0x401554
cmp edx, edi
jg 0x401538
jl 0x401534
cmp eax, ecx
jae 0x401538
or al, 0xff
jmp 0x40153a
mov al, 1
test al, al
jns 0x401554
add esi, 1
push esi
mov dword [esp + 0x2c], esi
call sub.KERNEL32.dll_Sleep
mov edi, dword [esp + 8]
jmp 0x401450
mov eax, dword [esp + 0xc]
mov dword [esp + 0x28], esi
mov esi, eax
push esi
call sub.KERNEL32.dll_Sleep
mov edi, dword [esp + 8]
jmp 0x401450
push 0x10
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
je 0x4013f0
mov esi, dword [esp + 0xbc]
lea eax, [esp + 0xa8]
push 0
push 4
push eax
push dword [esp + 0x80]
mov dword [esp + 0xb8], 0
push esi
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
mov edi, dword [esp + 0xa8]
lea eax, [esp + 0xd8]
push 0
push 4
push eax
lea eax, [edi + 0xf4]
mov dword [esp + 0xe4], 0
push eax
push esi
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push 0
push 0xc
lea eax, [esp + 0x54]
mov dword [esp + 0x54], 0
push eax
lea eax, [edi + 0x138]
mov dword [esp + 0x5c], 0
push eax
push esi
mov dword [esp + 0x68], 0
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push 0
push 0xc
lea eax, [esp + 0x48]
mov dword [esp + 0x48], 0
push eax
lea eax, [edi + 0x108]
mov dword [esp + 0x50], 0
push eax
push esi
mov dword [esp + 0x5c], 0
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
movss xmm0, dword [esp + 0x40]
lea eax, [esp + 0xdc]
addss xmm0, dword [esp + 0x4c]
push 0
push 4
push eax
push dword [esp + 0x84]
movss dword [esp + 0x74], xmm0
movss xmm0, dword [esp + 0x54]
addss xmm0, dword [esp + 0x60]
push esi
mov dword [esp + 0xf0], 0
movss dword [esp + 0x84], xmm0
movss xmm0, dword [esp + 0x5c]
addss xmm0, dword [esp + 0x68]
movss dword [esp + 0x80], xmm0
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
mov esi, dword [esp + 0xdc]
lea eax, [esp + 0xb0]
push 0
push 4
push eax
lea eax, [esi + 0x180]
mov dword [esp + 0xbc], 0
push eax
push dword [esp + 0xcc]
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push 0
push 0xc
lea eax, [esi + 0x4d90]
mov dword [esp + 0xd4], 0
mov esi, dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
lea ecx, [esp + 0xd4]
push ecx
push eax
push dword [esp + 0xcc]
mov dword [esp + 0xe4], 0
mov dword [esp + 0xe8], 0
mov dword [esp + 0x3c], eax
call esi
push 0
push 0xc
lea eax, [esp + 0x60]
mov dword [esp + 0x60], 0
push eax
lea eax, [edi + 0x303c]
mov dword [esp + 0x68], 0
mov edi, dword [esp + 0xc8]
push eax
push edi
mov dword [esp + 0x74], 0
call esi
movss xmm1, dword [0x403158]
mov eax, 1
movss xmm0, dword [esp + 0x58]
mov ecx, dword [esp + 0xb0]
mulss xmm0, xmm1
rol eax, cl
mov dword [esp + 0x80], eax
mov eax, dword [esp + 0x7c]
movss dword [esp + 0x68], xmm0
movss xmm0, dword [esp + 0x5c]
mulss xmm0, xmm1
mov dword [esp + 0x34], eax
mov dword [esp + 0x24], 0x20
movss dword [esp + 0x88], xmm0
movss xmm0, dword [esp + 0x60]
mulss xmm0, xmm1
movss dword [esp + 0x84], xmm0
movss xmm0, dword [0x403160]
movss dword [esp + 0x30], xmm0
xorps xmm0, xmm0
movss dword [esp + 0xc], xmm0
movss dword [esp + 0x10], xmm0
movss dword [esp + 8], xmm0
nop word [eax + eax]
push 0
push 4
lea ecx, [esp + 0xb8]
mov dword [esp + 0xb8], 0
push ecx
push eax
push edi
call esi
mov eax, dword [esp + 0xb0]
lea ecx, [esp + 0xac]
push 0
push 4
mov dword [esp + 0xb0], eax
add eax, 0xf4
push ecx
push eax
push edi
mov dword [esp + 0xc0], 0
call esi
mov eax, dword [esp + 0xd8]
cmp dword [esp + 0xac], eax
je 0x401b45
push 0
push 1
lea eax, [esp + 0xbf]
mov byte [esp + 0xbf], 0
push eax
mov eax, dword [esp + 0xb4]
add eax, 0xed
push eax
push edi
call esi
cmp byte [esp + 0xb7], 0
jne 0x401b45
push 0
push 4
lea eax, [esp + 0xb4]
mov dword [esp + 0xb4], 0
push eax
mov eax, dword [esp + 0xb4]
add eax, 0x25f
push eax
push edi
call esi
cmp dword [esp + 0xac], 0
jne 0x401b45
push 0
push 4
lea eax, [esp + 0xb4]
mov dword [esp + 0xb4], 0
push eax
mov eax, dword [esp + 0xb4]
add eax, 0x980
push eax
push edi
call esi
mov eax, dword [esp + 0x80]
test dword [esp + 0xac], eax
je 0x401b45
push 0
push 4
lea eax, [esp + 0xb4]
mov dword [esp + 0xb4], 0
push eax
mov eax, dword [esp + 0xb4]
add eax, 0x26a8
push eax
push edi
call esi
mov esi, dword [esp + 0xac]
lea eax, [esp + 0xb0]
push 0
push 4
push eax
lea eax, [esi + 0x18c]
mov dword [esp + 0xbc], 0
push eax
push edi
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push 0
push 4
lea eax, [esp + 0xb0]
mov dword [esp + 0xb0], 0
push eax
lea eax, [esi + 0x19c]
push eax
push edi
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push 0
push 4
lea eax, [esp + 0xc8]
mov dword [esp + 0xc8], 0
push eax
lea eax, [esi + 0x1ac]
mov esi, dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
push eax
push edi
call esi
movss xmm0, dword [esp + 0xd4]
sub esp, 8
addss xmm0, dword [esp + 0x8c]
movss dword [esp + 0x94], xmm0
movss xmm0, dword [esp + 0xb8]
subss xmm0, dword [esp + 0x6c]
movss dword [esp + 0xb8], xmm0
movss dword [esp + 0x1c], xmm0
movss xmm0, dword [esp + 0xb0]
subss xmm0, dword [esp + 0x78]
movss dword [esp + 0xb4], xmm0
fld dword [esp + 0xb4]
movss dword [esp + 0xb0], xmm0
movss xmm0, dword [esp + 0xc8]
subss xmm0, dword [esp + 0x74]
fstp dword [esp + 4]
fld dword [esp + 0xb8]
fstp dword [esp]
xorps xmm0, xmmword [0x403170]
cvtss2sd xmm0, xmm0
movsd qword [esp + 0x20], xmm0
call sub.api_ms_win_crt_math_l1_1_0.dll__hypotf
fstp dword [esp + 0xc8]
movss xmm0, dword [esp + 0xc8]
add esp, 8
fld qword [esp + 0x18]
cvtps2pd xmm0, xmm0
movsd qword [esp + 0xc0], xmm0
fld qword [esp + 0xc0]
call sub.api_ms_win_crt_math_l1_1_0.dll__CIatan2
movss xmm0, dword [esp + 0xcc]
addss xmm0, dword [esp + 0x68]
fstp qword [esp + 0x18]
movsd xmm1, qword [esp + 0x18]
cvtpd2ps xmm1, xmm1
mulss xmm1, dword [0x403164]
subss xmm1, xmm0
movss xmm0, dword [esp + 0xa8]
cvtps2pd xmm0, xmm0
movss dword [esp + 0xac], xmm1
movss dword [esp + 0xc0], xmm1
movsd qword [esp + 0x18], xmm0
movss xmm0, dword [esp + 0x14]
fld qword [esp + 0x18]
cvtps2pd xmm0, xmm0
movsd qword [esp + 0x18], xmm0
fld qword [esp + 0x18]
call sub.api_ms_win_crt_math_l1_1_0.dll__CIatan2
movss xmm0, dword [esp + 0xd0]
sub esp, 8
addss xmm0, dword [esp + 0x90]
fstp qword [esp + 0x20]
movsd xmm1, qword [esp + 0x20]
cvtpd2ps xmm1, xmm1
mulss xmm1, dword [0x403164]
subss xmm1, xmm0
movss dword [esp + 0x1c], xmm1
fld dword [esp + 0x1c]
fstp dword [esp + 4]
fld dword [esp + 0xc8]
fstp dword [esp]
movss dword [esp + 0xb8], xmm1
call sub.api_ms_win_crt_math_l1_1_0.dll__hypotf
movss xmm1, dword [esp + 0x38]
add esp, 8
fstp dword [esp + 0x14]
movss xmm0, dword [esp + 0x14]
xorps xmm3, xmm3
comiss xmm1, xmm0
jbe 0x401b48
movss xmm1, dword [esp + 0xac]
movss xmm2, dword [esp + 0xb0]
movss dword [esp + 0x30], xmm0
xorps xmm0, xmm0
subss xmm0, dword [esp + 0x8c]
movss dword [esp + 0xc], xmm1
movss dword [esp + 0x10], xmm2
movss dword [esp + 8], xmm0
jmp 0x401b5a
xorps xmm3, xmm3
movss xmm0, dword [esp + 8]
movss xmm1, dword [esp + 0xc]
movss xmm2, dword [esp + 0x10]
mov eax, dword [esp + 0x34]
add eax, 0x10
sub dword [esp + 0x24], 1
mov dword [esp + 0x34], eax
jne 0x4017d0
ucomiss xmm1, xmm3
lahf
test ah, 0x44
jp 0x401b8f
ucomiss xmm2, xmm3
lahf
test ah, 0x44
jp 0x401b8f
ucomiss xmm0, xmm3
lahf
test ah, 0x44
jnp 0x4013f0
movss xmm3, dword [0x40315c]
lea eax, [esp + 0x9c]
divss xmm1, xmm3
push 0
push 0xc
push eax
divss xmm2, xmm3
divss xmm0, xmm3
addss xmm1, dword [esp + 0xd8]
addss xmm2, dword [esp + 0xdc]
addss xmm0, dword [esp + 0xe0]
push dword [esp + 0x34]
push edi
movss dword [esp + 0xb0], xmm1
movss dword [esp + 0xb4], xmm2
movss dword [esp + 0xb8], xmm0
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
jmp 0x4013f0