Function at 0x10046597
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x24
mov eax, dword [0x1008c00c]
xor eax, esp
mov dword [esp + 0x20], eax
mov eax, dword [0x10090d48]
mov dword [esp + 4], eax
push ebx
push esi
push edi
mov edi, ecx
mov dword [esp + 0x14], edi
test eax, eax
je 0x100469ba
lea ebx, [eax + 8]
call fcn.1004564a
mov esi, eax
mov ecx, 0x20c
cmp edx, 0x207
ja 0x1004690e
cmp edx, 0x206
jae 0x10046938
lea eax, [ecx - 0xc]
cmp edx, eax
ja 0x10046889
je 0x10046839
xor ebx, ebx
mov ecx, 0x100
inc ebx
cmp edx, 0x101
ja 0x1004665a
cmp edx, ecx
jae 0x10046676
cmp edx, 7
jb 0x100469ba
cmp edx, 8
jbe 0x10046646
cmp edx, 0x20
jne 0x100469ba
cmp word [ebp + 0xc], bx
jne 0x100469ba
call fcn.100457ac
test al, al
je 0x100469ba
mov eax, ebx
jmp 0x100469bc
cmp edx, 7
sete al
movzx eax, al
push eax
call fcn.10002ba7
jmp 0x100469ba
cmp edx, 0x102
je 0x100467d8
lea eax, [edx - 0x104]
cmp eax, ebx
ja 0x100469ba
cmp edx, ecx
je 0x10046685
mov byte [esp + 0xf], 0
cmp edx, 0x104
jne 0x10046689
mov byte [esp + 0xf], bl
cmp dword [ebp + 8], ecx
jae 0x100469ba
call fcn.10045992
mov esi, dword [ebp + 8]
cmp esi, 0xd
jne 0x100466b3
mov eax, dword [ebp + 0xc]
mov ecx, 0x100
shr eax, 0x10
test cx, ax
lea eax, [ecx + 0xd]
cmovne esi, eax
mov ecx, esi
call fcn.10046052
test eax, eax
je 0x100466cd
mov dl, byte [esp + 0xf]
push ecx
push esi
mov ecx, eax
call fcn.10045850
pop ecx
pop ecx
cmp esi, 0x10
jne 0x10046723
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
mov edi, 0xa0
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x100466fd
push ecx
mov dl, cl
mov ecx, 0x210
push edi
call fcn.10045850
pop ecx
pop ecx
mov edi, 0xa1
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x100469ba
push ecx
mov dl, cl
mov ecx, 0x214
jmp 0x100467cb
cmp esi, 0x11
jne 0x10046776
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
mov edi, 0xa2
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x10046753
push ecx
mov dl, cl
mov ecx, 0x20f
push edi
call fcn.10045850
pop ecx
pop ecx
mov edi, 0xa3
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x100469ba
push ecx
mov dl, cl
mov ecx, 0x213
jmp 0x100467cb
cmp esi, 0x12
jne 0x100469ba
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
mov edi, 0xa4
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x100467aa
push ecx
mov dl, cl
mov ecx, 0x211
push edi
call fcn.10045850
pop ecx
pop ecx
mov edi, 0xa5
push edi
call esi
mov cl, byte [esp + 0xf]
shr eax, 0xf
and al, bl
cmp al, cl
jne 0x100469ba
push ecx
mov dl, cl
mov ecx, 0x215
push edi
call fcn.10045850
pop ecx
pop ecx
jmp 0x100469ba
push edi
call dword [sym.imp.USER32.dll_IsWindowUnicode]
test eax, eax
je 0x10046806
mov ecx, dword [ebp + 8]
lea eax, [ecx - 1]
cmp eax, 0xfffe
ja 0x100469ba
push ecx
mov ecx, dword [esp + 0x14]
lea ecx, [ecx + 8]
call fcn.100027c7
jmp 0x100469ba
and dword [esp + 0x28], 0
lea eax, [esp + 0x28]
xor ebx, ebx
inc ebx
push ebx
push eax
push ebx
lea eax, [ebp + 8]
push eax
push ebx
push 0
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
mov ecx, dword [esp + 0x10]
movzx eax, word [esp + 0x28]
push eax
lea ecx, [ecx + 8]
call fcn.1000277b
jmp 0x100469ba
cmp byte [esi + 8], 0
mov dword [esi + 4], edi
jne 0x1004686a
and dword [esp + 0x24], 0
lea eax, [esp + 0x18]
push eax
mov dword [esp + 0x1c], 0x10
mov dword [esp + 0x20], 2
mov dword [esp + 0x24], edi
call dword [sym.imp.USER32.dll_TrackMouseEvent]
mov byte [esi + 8], 1
mov ecx, dword [ebp + 0xc]
mov eax, ecx
shr eax, 0x10
cwde
movd xmm2, eax
movsx eax, cx
cvtdq2ps xmm2, xmm2
movd xmm1, eax
cvtdq2ps xmm1, xmm1
jmp 0x10046a25
cmp edx, 0x201
je 0x10046938
mov eax, 0x202
cmp edx, eax
je 0x100468bc
jbe 0x100469ba
cmp edx, 0x204
jbe 0x10046938
cmp edx, 0x205
jne 0x100469ba
xor ebx, ebx
cmp edx, 0x205
push 2
sete bl
cmp edx, 0x208
pop eax
cmove ebx, eax
cmp edx, ecx
jne 0x100468e9
mov eax, dword [ebp + 8]
xor ebx, ebx
shr eax, 0x10
cmp ax, 1
setne bl
add ebx, 3
mov eax, dword [esi + 0xc]
btr eax, ebx
mov dword [esi + 0xc], eax
test eax, eax
jne 0x10046906
call dword [sym.imp.USER32.dll_GetCapture]
cmp eax, edi
jne 0x10046906
call dword [sym.imp.USER32.dll_ReleaseCapture]
push 0
push ebx
jmp 0x100469ae
cmp edx, ecx
ja 0x100469f0
je 0x100468bc
mov eax, edx
sub eax, 0x208
je 0x100468bc
sub eax, 1
je 0x10046938
sub eax, 1
je 0x100469ce
sub eax, 1
jne 0x100469ba
xor ebx, ebx
inc ebx
cmp edx, 0x204
je 0x1004694d
xor edi, edi
cmp edx, 0x206
jne 0x1004694f
mov edi, ebx
cmp edx, 0x207
je 0x1004695f
cmp edx, 0x209
jne 0x10046962
push 2
pop edi
cmp edx, 0x20b
je 0x10046972
cmp edx, 0x20d
jne 0x10046989
mov eax, dword [ebp + 8]
xor ecx, ecx
shr eax, 0x10
cmp ax, bx
setne cl
add ecx, 3
mov dword [esp + 0x28], ecx
mov edi, ecx
cmp dword [esi + 0xc], 0
jne 0x100469a3
call dword [sym.imp.USER32.dll_GetCapture]
test eax, eax
jne 0x100469a3
push dword [esp + 0x14]
call dword [sym.imp.USER32.dll_SetCapture]
mov eax, dword [esi + 0xc]
bts eax, edi
push ebx
mov dword [esi + 0xc], eax
push edi
mov ecx, dword [esp + 0x18]
lea ecx, [ecx + 8]
call fcn.10002ae1
xor eax, eax
mov ecx, dword [esp + 0x2c]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.1006dac1
mov esp, ebp
pop ebp
ret
mov eax, dword [ebp + 8]
xorps xmm1, xmm1
shr eax, 0x10
cwde
movd xmm2, eax
cvtdq2ps xmm2, xmm2
divss xmm2, dword [0x10088668]
mov ecx, ebx
call fcn.10002b4f
jmp 0x100469ba
mov eax, edx
sub eax, 0x20d
je 0x10046938
sub eax, 1
je 0x10046a3a
sub eax, 0xb
je 0x10046a2e
sub eax, 0x8a
jne 0x100469ba
cmp dword [esi + 4], edi
jne 0x10046a16
and dword [esi + 4], eax
movss xmm1, dword [0x1008876c]
mov byte [esi + 8], 0
movaps xmm2, xmm1
mov ecx, ebx
call fcn.10002a23
jmp 0x100469ba
cmp dword [ebp + 8], 7
jne 0x100469ba
mov byte [esi + 0x25], 1
jmp 0x100469ba
mov eax, dword [ebp + 8]
xorps xmm2, xmm2
shr eax, 0x10
cwde
movd xmm1, eax
cvtdq2ps xmm1, xmm1
divss xmm1, dword [0x10088668]
jmp 0x100469e7