Function at 0x10019851
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff8
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x48
cmp byte [0x10120570], 0
push esi
push edi
mov edi, ecx
je 0x1001a13b
mov ecx, dword [0x101202f8]
mov eax, dword [ecx]
mov eax, dword [eax + 0x6c]
call eax
test al, al
je 0x1001a13b
mov ecx, dword [0x101202f8]
mov eax, dword [ecx]
mov eax, dword [eax + 0x68]
call eax
test al, al
je 0x1001a13b
mov eax, dword [0x10120420]
mov dword [ebp - 0x14], eax
test eax, eax
je 0x1001a13b
mov eax, dword [0x10120334]
test eax, eax
jne 0x1001968e
call fcn.100034c0
mov edx, 0xe80c2f78
mov ecx, 0x10110195
call fcn.100018f0
mov edx, 0xc10bf213
mov ecx, 0x101100ad
mov esi, eax
call fcn.100018f0
push esi
push eax
call fcn.1008e510
mov dword [0x10120334], eax
mov ecx, dword [ebp - 0x14]
cmp dword [ecx + eax], 0
jle 0x1001a13b
mov ecx, dword [0x101202f8]
lea edx, [ebp - 0x18]
push edx
lea edx, [ebp - 0x1c]
push edx
mov eax, dword [ecx]
call dword [eax + 0x14]
call fcn.1001a890
cmp byte [eax + 0x1a], 0
je 0x100196c4
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x20], eax
call fcn.1001a890
cmp byte [eax], 0
je 0x100196d9
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x24], eax
call fcn.1001a890
cmp byte [eax + 0x1b], 0
je 0x100196ef
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x28], eax
call fcn.1001a890
cmp byte [eax + 0x19], 0
je 0x10019705
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x18], eax
call fcn.1001a890
cmp byte [eax + 0x18], 0
je 0x1001971b
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x1c], eax
call fcn.1001a890
cmp byte [eax + 1], 0
jne 0x1001977e
mov eax, dword [0x10120420]
mov dword [ebp - 0x14], eax
mov eax, dword [0x101204a4]
test eax, eax
jne 0x10019768
call fcn.100034c0
mov edx, 0xe80c2f78
mov ecx, 0x10110509
call fcn.100018f0
mov edx, 0xc10bf213
mov ecx, 0x101100c5
mov esi, eax
call fcn.100018f0
push esi
push eax
call fcn.1008e510
mov dword [0x101204a4], eax
mov ecx, dword [ebp - 0x14]
movss xmm0, dword [eax + ecx + 8]
ucomiss xmm0, dword [0x10117168]
lahf
test ah, 0x44
jp 0x10019789
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x30], eax
call fcn.1001a890
cmp byte [eax + 1], 0
jne 0x100197ec
mov eax, dword [0x10120420]
mov dword [ebp - 0x14], eax
mov eax, dword [0x101204a4]
test eax, eax
jne 0x100197d6
call fcn.100034c0
mov edx, 0xe80c2f78
mov ecx, 0x10110509
call fcn.100018f0
mov edx, 0xc10bf213
mov ecx, 0x101100c5
mov esi, eax
call fcn.100018f0
push esi
push eax
call fcn.1008e510
mov dword [0x101204a4], eax
mov ecx, dword [ebp - 0x14]
movss xmm0, dword [eax + ecx + 8]
ucomiss xmm0, dword [0x10117168]
lahf
test ah, 0x44
jp 0x100197f7
mov eax, dword [0x101202ec]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x2c], eax
mov eax, dword [0x101202ec]
or ecx, 0xffffffff
mov esi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
mov edx, 0xffe899bf
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x20]
cmp eax, 0x19
cmovge edx, ecx
cmp byte [0x1011e1d0], 0
mov dword [ebp - 0x14], edx
je 0x1001987e
cmp byte [0x10120585], 0
je 0x1001987e
mov eax, dword [0x1011e210]
mov ecx, dword [0x10120598]
dec eax
cmp eax, 3
ja case.default.0x1001983c
jmp dword [eax*4 + 0x1001a178]
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019874
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019874
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
sete al
jmp 0x10019874
mov al, byte [ebp - 1]
test al, al
je 0x1001987e
mov byte [ebp - 0x14], 1
jmp 0x10019882
mov byte [ebp - 0x14], 0
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push edx
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x1011080c]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x18]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1fa], 0
mov dword [ebp - 0x14], ecx
je 0x1001992b
cmp byte [0x101205b3], 0
je 0x1001992b
mov eax, dword [0x1011e220]
mov ecx, dword [0x101205ac]
dec eax
cmp eax, 3
ja case.default.0x100198f4
jmp dword [eax*4 + 0x1001a188]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019923
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019923
push ecx
call esi
test ax, ax
sete al
jmp 0x10019923
mov al, byte [ebp - 1]
test al, al
je 0x1001992b
mov dl, 1
jmp 0x1001992d
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110810]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x1c]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1f9], 0
mov dword [ebp - 0x14], ecx
je 0x1001999f
cmp byte [0x101205b2], 0
je 0x1001999f
push dword [0x101205b4]
call esi
test ax, ax
je 0x1001999f
mov dl, 1
jmp 0x100199a1
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110814]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99cee8
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x24]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1f0], 0
mov dword [ebp - 0x14], ecx
je 0x10019a4a
cmp byte [0x101205a8], 0
je 0x10019a4a
mov eax, dword [0x1011e208]
mov ecx, dword [0x10120588]
dec eax
cmp eax, 3
ja case.default.0x10019a13
jmp dword [eax*4 + 0x1001a198]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019a42
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019a42
push ecx
call esi
test ax, ax
sete al
jmp 0x10019a42
mov al, byte [ebp - 1]
test al, al
je 0x10019a4a
mov dl, 1
jmp 0x10019a4c
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110818]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1fb], 0
mov dword [ebp - 0x14], ecx
je 0x10019af5
cmp byte [0x101205b8], 0
je 0x10019af5
mov eax, dword [0x1011e224]
mov ecx, dword [0x1012058c]
dec eax
cmp eax, 3
ja case.default.0x10019abe
jmp dword [eax*4 + 0x1001a1a8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019aed
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019aed
push ecx
call esi
test ax, ax
sete al
jmp 0x10019aed
mov al, byte [ebp - 1]
test al, al
je 0x10019af5
mov dl, 1
jmp 0x10019af7
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x1011081c]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1c8], 0
mov dword [ebp - 0x14], ecx
je 0x10019ba0
cmp byte [0x10120584], 0
je 0x10019ba0
mov eax, dword [0x1011e20c]
mov ecx, dword [0x10120594]
dec eax
cmp eax, 3
ja case.default.0x10019b69
jmp dword [eax*4 + 0x1001a1b8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019b98
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019b98
push ecx
call esi
test ax, ax
sete al
jmp 0x10019b98
mov al, byte [ebp - 1]
test al, al
je 0x10019ba0
mov dl, 1
jmp 0x10019ba2
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110820]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x30]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1f8], 0
mov dword [ebp - 0x14], ecx
je 0x10019c4b
cmp byte [0x101205b1], 0
je 0x10019c4b
mov eax, dword [0x1011e214]
mov ecx, dword [0x1012059c]
dec eax
cmp eax, 3
ja case.default.0x10019c14
jmp dword [eax*4 + 0x1001a1c8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019c43
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019c43
push ecx
call esi
test ax, ax
sete al
jmp 0x10019c43
mov al, byte [ebp - 1]
test al, al
je 0x10019c4b
mov dl, 1
jmp 0x10019c4d
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110824]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x30]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1e4], 0
mov dword [ebp - 0x14], ecx
je 0x10019cf6
cmp byte [0x101205a0], 0
je 0x10019cf6
mov eax, dword [0x1011e218]
mov ecx, dword [0x10120590]
dec eax
cmp eax, 3
ja case.default.0x10019cbf
jmp dword [eax*4 + 0x1001a1d8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019cee
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019cee
push ecx
call esi
test ax, ax
sete al
jmp 0x10019cee
mov al, byte [ebp - 1]
test al, al
je 0x10019cf6
mov dl, 1
jmp 0x10019cf8
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110828]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011e1f1], 0
mov dword [ebp - 0x14], ecx
je 0x10019da1
cmp byte [0x101205b0], 0
je 0x10019da1
mov eax, dword [0x1011e21c]
mov ecx, dword [0x101205a4]
dec eax
cmp eax, 3
ja case.default.0x10019d6a
jmp dword [eax*4 + 0x1001a1e8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019d99
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019d99
push ecx
call esi
test ax, ax
sete al
jmp 0x10019d99
mov al, byte [ebp - 1]
test al, al
je 0x10019da1
mov dl, 1
jmp 0x10019da3
xor dl, dl
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 2
mov dword [ecx + 0x14], 0xf
mov ax, word [0x1011082c]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019320
mov eax, dword [0x101202ec]
mov edx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge edx, eax
cmp byte [0x1011e200], 0
mov dword [ebp - 0x14], edx
je 0x10019e57
cmp byte [0x101205c0], 0
je 0x10019e57
mov eax, dword [0x1011e204]
mov ecx, dword [0x101205bc]
dec eax
cmp eax, 3
ja case.default.0x10019e15
jmp dword [eax*4 + 0x1001a1f8]
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019e4d
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019e4d
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
sete al
jmp 0x10019e4d
mov al, byte [ebp - 1]
test al, al
je 0x10019e57
mov byte [ebp - 0x14], 1
jmp 0x10019e5b
mov byte [ebp - 0x14], 0
sub esp, 0x18
xorps xmm0, xmm0
mov ecx, esp
push edx
push dword [ebp - 0x14]
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], 3
mov dword [ecx + 0x14], 0xf
mov ax, word [0x10110830]
mov word [ecx], ax
mov al, byte [0x10110832]
mov byte [ecx + 2], al
mov byte [ecx + 3], 0
mov ecx, edi
call fcn.10019320
cmp byte [0x10120585], 0
jne 0x10019ea6
call fcn.1001a890
mov byte [eax + 0x1a], 0
cmp byte [0x101205a8], 0
jne 0x10019eb7
call fcn.1001a890
mov byte [eax], 0
cmp byte [0x101205b8], 0
jne 0x10019ec9
call fcn.1001a890
mov byte [eax + 0x1b], 0
cmp byte [0x101205b3], 0
jne 0x10019edb
call fcn.1001a890
mov byte [eax + 0x19], 0
cmp byte [0x101205b2], 0
jne 0x10019eed
call fcn.1001a890
mov byte [eax + 0x18], 0
cmp byte [0x101205a0], 0
jne 0x10019eff
call fcn.1001a890
mov byte [eax + 0x1d], 0
cmp byte [0x101205b1], 0
jne 0x10019f11
call fcn.1001a890
mov byte [eax + 0x1c], 0
mov edi, dword [edi + 0x38]
mov dword [ebp - 8], 0
mov esi, dword [edi]
cmp esi, edi
je 0x1001a16c
xorps xmm1, xmm1
nop dword [eax + eax]
movss xmm0, dword [esi + 0x24]
comiss xmm0, xmm1
jbe 0x1001a128
cmp byte [0x10120579], 0
jne 0x10019fe0
cmp byte [0x1012057c], 0
jne 0x1001a07a
call fcn.10016cc0
mov dword [ebp - 0x24], eax
push 0
push 1
mov ecx, dword [eax]
push 1
push 0
mov dword [ebp - 0xc], 0xff000000
mov eax, dword [ecx + 0x24]
mov dword [ebp - 0x28], eax
mov eax, dword [ebp - 0x18]
cdq
push dword [ebp - 0xc]
sub eax, edx
sar eax, 1
add eax, dword [ebp - 8]
add eax, dword [0x1011e1e0]
push dword [esi + 0x20]
sub esp, 0x18
movd xmm1, eax
mov ecx, esp
mov eax, dword [ebp - 0x1c]
cdq
sub eax, edx
sar eax, 1
cvtdq2ps xmm1, xmm1
movd xmm0, eax
mov eax, dword [0x10120408]
mov dword [ebp - 0x20], eax
lea eax, [esi + 8]
cvtdq2ps xmm0, xmm0
push eax
movss dword [ebp - 0x34], xmm1
movss dword [ebp - 0x38], xmm0
call fcn.1000e120
push dword [ebp - 0x34]
push dword [ebp - 0x38]
push ecx
mov ecx, dword [ebp - 0x24]
mov dword [esp], 0x41e80000
push dword [ebp - 0x20]
call dword [ebp - 0x28]
jmp 0x1001a102
cmp byte [0x1012057c], 0
je 0x1001a07a
call fcn.10016cc0
mov dword [ebp - 0x24], eax
push 0
push 1
mov ecx, dword [eax]
push 1
push 0
mov dword [ebp - 0x10], 0xff000000
mov eax, dword [ecx + 0x24]
mov ecx, dword [0x1011e1e0]
mov dword [ebp - 0x20], eax
add ecx, 0x3a
mov eax, dword [ebp - 0x18]
cdq
push dword [ebp - 0x10]
sub eax, edx
sar eax, 1
add eax, dword [ebp - 8]
push dword [esi + 0x20]
add eax, ecx
sub esp, 0x18
mov ecx, esp
movd xmm1, eax
mov eax, dword [ebp - 0x1c]
cdq
sub eax, edx
sar eax, 1
cvtdq2ps xmm1, xmm1
movd xmm0, eax
mov eax, dword [0x10120408]
mov dword [ebp - 0x28], eax
lea eax, [esi + 8]
cvtdq2ps xmm0, xmm0
push eax
movss dword [ebp - 0x3c], xmm1
movss dword [ebp - 0x40], xmm0
call fcn.1000e120
push dword [ebp - 0x3c]
push dword [ebp - 0x40]
push ecx
mov ecx, dword [ebp - 0x24]
mov dword [esp], 0x41e80000
push dword [ebp - 0x28]
call dword [ebp - 0x20]
jmp 0x1001a102
call fcn.10016cc0
mov dword [ebp - 0x24], eax
push 0
push 1
mov ecx, dword [eax]
push 1
push 0
mov dword [ebp - 0x14], 0xff000000
mov eax, dword [ecx + 0x24]
mov ecx, dword [0x1011e1e0]
mov dword [ebp - 0x20], eax
add ecx, 0x1d
mov eax, dword [ebp - 0x18]
cdq
push dword [ebp - 0x14]
sub eax, edx
sar eax, 1
add eax, dword [ebp - 8]
push dword [esi + 0x20]
add eax, ecx
sub esp, 0x18
mov ecx, esp
movd xmm1, eax
mov eax, dword [ebp - 0x1c]
cdq
sub eax, edx
sar eax, 1
cvtdq2ps xmm1, xmm1
movd xmm0, eax
mov eax, dword [0x10120408]
mov dword [ebp - 0x28], eax
lea eax, [esi + 8]
cvtdq2ps xmm0, xmm0
push eax
movss dword [ebp - 0x44], xmm1
movss dword [ebp - 0x48], xmm0
call fcn.1000e120
push dword [ebp - 0x44]
push dword [ebp - 0x48]
push ecx
mov ecx, dword [ebp - 0x24]
mov dword [esp], 0x41e80000
push dword [ebp - 0x28]
call dword [ebp - 0x20]
movd xmm0, dword [ebp - 8]
movss xmm1, dword [0x1011e1ec]
addss xmm1, dword [0x1011706c]
cvtdq2ps xmm0, xmm0
addss xmm1, xmm0
cvttss2si ecx, xmm1
xorps xmm1, xmm1
mov dword [ebp - 8], ecx
mov esi, dword [esi]
cmp esi, edi
jne 0x10019f30
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret
mov dword [edi + 0x18], 0
mov dword [edi + 0x1c], 0
mov dword [edi + 0x20], 0
mov dword [edi + 0x24], 0
mov dword [edi + 0x28], 0
mov dword [edi + 0x2c], 0
mov dword [edi + 0x30], 0
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret