Function at 0x100196d8
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 [0x10158160], 0
push esi
push edi
mov edi, ecx
je 0x10019f9b
mov ecx, dword [0x10122698]
mov eax, dword [ecx]
mov eax, dword [eax + 0x6c]
call eax
test al, al
je 0x10019f9b
mov ecx, dword [0x10122698]
mov eax, dword [ecx]
mov eax, dword [eax + 0x68]
call eax
test al, al
je 0x10019f9b
mov eax, dword [0x101227d4]
mov dword [ebp - 0x14], eax
test eax, eax
je 0x10019f9b
mov eax, dword [0x101226d4]
test eax, eax
jne 0x100194ee
call fcn.10003520
mov edx, 0xe80c2f78
mov ecx, 0x101100f5
call fcn.10001980
mov edx, 0xc10bf213
mov ecx, 0x1011000d
mov esi, eax
call fcn.10001980
push esi
push eax
call fcn.1008c3b0
mov dword [0x101226d4], eax
mov ecx, dword [ebp - 0x14]
cmp dword [ecx + eax], 0
jle 0x10019f9b
mov ecx, dword [0x10122698]
lea edx, [ebp - 0x18]
push edx
lea edx, [ebp - 0x1c]
push edx
mov eax, dword [ecx]
call dword [eax + 0x14]
call fcn.1001a8f0
cmp byte [eax + 0x1a], 0
je 0x10019524
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x20], eax
call fcn.1001a8f0
cmp byte [eax], 0
je 0x10019539
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x24], eax
call fcn.1001a8f0
cmp byte [eax + 0x1b], 0
je 0x1001954f
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x28], eax
call fcn.1001a8f0
cmp byte [eax + 0x19], 0
je 0x10019565
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x18], eax
call fcn.1001a8f0
cmp byte [eax + 0x18], 0
je 0x1001957b
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x1c], eax
call fcn.1001a8f0
cmp byte [eax + 1], 0
jne 0x100195de
mov eax, dword [0x101227d4]
mov dword [ebp - 0x14], eax
mov eax, dword [0x10158094]
test eax, eax
jne 0x100195c8
call fcn.10003520
mov edx, 0xe80c2f78
mov ecx, 0x10110459
call fcn.10001980
mov edx, 0xc10bf213
mov ecx, 0x10110025
mov esi, eax
call fcn.10001980
push esi
push eax
call fcn.1008c3b0
mov dword [0x10158094], eax
mov ecx, dword [ebp - 0x14]
movss xmm0, dword [eax + ecx + 8]
ucomiss xmm0, dword [0x101180a8]
lahf
test ah, 0x44
jp 0x100195e9
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x30], eax
call fcn.1001a8f0
cmp byte [eax + 1], 0
jne 0x1001964c
mov eax, dword [0x101227d4]
mov dword [ebp - 0x14], eax
mov eax, dword [0x10158094]
test eax, eax
jne 0x10019636
call fcn.10003520
mov edx, 0xe80c2f78
mov ecx, 0x10110459
call fcn.10001980
mov edx, 0xc10bf213
mov ecx, 0x10110025
mov esi, eax
call fcn.10001980
push esi
push eax
call fcn.1008c3b0
mov dword [0x10158094], eax
mov ecx, dword [ebp - 0x14]
movss xmm0, dword [eax + ecx + 8]
ucomiss xmm0, dword [0x101180a8]
lahf
test ah, 0x44
jp 0x10019657
mov eax, dword [0x1012268c]
mov eax, dword [eax + 0x1c]
mov dword [edi + 0x2c], eax
mov eax, dword [0x1012268c]
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 [0x1011f1c8], 0
mov dword [ebp - 0x14], edx
je 0x100196de
cmp byte [0x10158171], 0
je 0x100196de
mov eax, dword [0x1011f208]
mov ecx, dword [0x10158184]
dec eax
cmp eax, 3
ja case.default.0x1001969c
jmp dword [eax*4 + 0x10019fd8]
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x100196d4
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x100196d4
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
sete al
jmp 0x100196d4
mov al, byte [ebp - 1]
test al, al
je 0x100196de
mov byte [ebp - 0x14], 1
jmp 0x100196e2
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 [0x10110758]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x18]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1f2], 0
mov dword [ebp - 0x14], ecx
je 0x1001978b
cmp byte [0x1015819f], 0
je 0x1001978b
mov eax, dword [0x1011f218]
mov ecx, dword [0x10158198]
dec eax
cmp eax, 3
ja case.default.0x10019754
jmp dword [eax*4 + 0x10019fe8]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019783
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019783
push ecx
call esi
test ax, ax
sete al
jmp 0x10019783
mov al, byte [ebp - 1]
test al, al
je 0x1001978b
mov dl, 1
jmp 0x1001978d
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 [0x1011075c]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x1c]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1f1], 0
mov dword [ebp - 0x14], ecx
je 0x100197ff
cmp byte [0x1015819e], 0
je 0x100197ff
push dword [0x101581a0]
call esi
test ax, ax
je 0x100197ff
mov dl, 1
jmp 0x10019801
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 [0x10110760]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99cee8
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x24]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1e8], 0
mov dword [ebp - 0x14], ecx
je 0x100198aa
cmp byte [0x10158194], 0
je 0x100198aa
mov eax, dword [0x1011f200]
mov ecx, dword [0x10158174]
dec eax
cmp eax, 3
ja case.default.0x10019873
jmp dword [eax*4 + 0x10019ff8]
push ecx
call esi
test ax, ax
setne al
jmp 0x100198a2
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x100198a2
push ecx
call esi
test ax, ax
sete al
jmp 0x100198a2
mov al, byte [ebp - 1]
test al, al
je 0x100198aa
mov dl, 1
jmp 0x100198ac
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 [0x10110764]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1f3], 0
mov dword [ebp - 0x14], ecx
je 0x10019955
cmp byte [0x101581a4], 0
je 0x10019955
mov eax, dword [0x1011f21c]
mov ecx, dword [0x10158178]
dec eax
cmp eax, 3
ja case.default.0x1001991e
jmp dword [eax*4 + 0x1001a008]
push ecx
call esi
test ax, ax
setne al
jmp 0x1001994d
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x1001994d
push ecx
call esi
test ax, ax
sete al
jmp 0x1001994d
mov al, byte [ebp - 1]
test al, al
je 0x10019955
mov dl, 1
jmp 0x10019957
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 [0x10110768]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1c0], 0
mov dword [ebp - 0x14], ecx
je 0x10019a00
cmp byte [0x10158170], 0
je 0x10019a00
mov eax, dword [0x1011f204]
mov ecx, dword [0x10158180]
dec eax
cmp eax, 3
ja case.default.0x100199c9
jmp dword [eax*4 + 0x1001a018]
push ecx
call esi
test ax, ax
setne al
jmp 0x100199f8
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x100199f8
push ecx
call esi
test ax, ax
sete al
jmp 0x100199f8
mov al, byte [ebp - 1]
test al, al
je 0x10019a00
mov dl, 1
jmp 0x10019a02
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 [0x1011076c]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x30]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1f0], 0
mov dword [ebp - 0x14], ecx
je 0x10019aab
cmp byte [0x1015819d], 0
je 0x10019aab
mov eax, dword [0x1011f20c]
mov ecx, dword [0x10158188]
dec eax
cmp eax, 3
ja case.default.0x10019a74
jmp dword [eax*4 + 0x1001a028]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019aa3
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019aa3
push ecx
call esi
test ax, ax
sete al
jmp 0x10019aa3
mov al, byte [ebp - 1]
test al, al
je 0x10019aab
mov dl, 1
jmp 0x10019aad
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 [0x10110770]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x30]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1dc], 0
mov dword [ebp - 0x14], ecx
je 0x10019b56
cmp byte [0x1015818c], 0
je 0x10019b56
mov eax, dword [0x1011f210]
mov ecx, dword [0x1015817c]
dec eax
cmp eax, 3
ja case.default.0x10019b1f
jmp dword [eax*4 + 0x1001a038]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019b4e
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019b4e
push ecx
call esi
test ax, ax
sete al
jmp 0x10019b4e
mov al, byte [ebp - 1]
test al, al
je 0x10019b56
mov dl, 1
jmp 0x10019b58
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 [0x10110774]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov ecx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge ecx, eax
cmp byte [0x1011f1e9], 0
mov dword [ebp - 0x14], ecx
je 0x10019c01
cmp byte [0x1015819c], 0
je 0x10019c01
mov eax, dword [0x1011f214]
mov ecx, dword [0x10158190]
dec eax
cmp eax, 3
ja case.default.0x10019bca
jmp dword [eax*4 + 0x1001a048]
push ecx
call esi
test ax, ax
setne al
jmp 0x10019bf9
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
setne al
jmp 0x10019bf9
push ecx
call esi
test ax, ax
sete al
jmp 0x10019bf9
mov al, byte [ebp - 1]
test al, al
je 0x10019c01
mov dl, 1
jmp 0x10019c03
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 [0x10110778]
mov word [ecx], ax
mov byte [ecx + 2], 0
mov ecx, edi
push edx
call fcn.10019180
mov eax, dword [0x1012268c]
mov edx, 0xff99e8ae
mov eax, dword [eax + 0x1c]
sub eax, dword [edi + 0x28]
cmp eax, 0xf
mov eax, 0xffffffff
cmovge edx, eax
cmp byte [0x1011f1f8], 0
mov dword [ebp - 0x14], edx
je 0x10019cb7
cmp byte [0x101581ac], 0
je 0x10019cb7
mov eax, dword [0x1011f1fc]
mov ecx, dword [0x101581a8]
dec eax
cmp eax, 3
ja case.default.0x10019c75
jmp dword [eax*4 + 0x1001a058]
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019cad
push ecx
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [ebp - 0x14]
test ax, ax
setne al
jmp 0x10019cad
push ecx
call esi
mov edx, dword [ebp - 0x14]
test ax, ax
sete al
jmp 0x10019cad
mov al, byte [ebp - 1]
test al, al
je 0x10019cb7
mov byte [ebp - 0x14], 1
jmp 0x10019cbb
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 [0x1011077c]
mov word [ecx], ax
mov al, byte [0x1011077e]
mov byte [ecx + 2], al
mov byte [ecx + 3], 0
mov ecx, edi
call fcn.10019180
cmp byte [0x10158171], 0
jne 0x10019d06
call fcn.1001a8f0
mov byte [eax + 0x1a], 0
cmp byte [0x10158194], 0
jne 0x10019d17
call fcn.1001a8f0
mov byte [eax], 0
cmp byte [0x101581a4], 0
jne 0x10019d29
call fcn.1001a8f0
mov byte [eax + 0x1b], 0
cmp byte [0x1015819f], 0
jne 0x10019d3b
call fcn.1001a8f0
mov byte [eax + 0x19], 0
cmp byte [0x1015819e], 0
jne 0x10019d4d
call fcn.1001a8f0
mov byte [eax + 0x18], 0
cmp byte [0x1015818c], 0
jne 0x10019d5f
call fcn.1001a8f0
mov byte [eax + 0x1d], 0
cmp byte [0x1015819d], 0
jne 0x10019d71
call fcn.1001a8f0
mov byte [eax + 0x1c], 0
mov edi, dword [edi + 0x38]
mov dword [ebp - 8], 0
mov esi, dword [edi]
cmp esi, edi
je 0x10019fcc
xorps xmm1, xmm1
nop dword [eax + eax]
movss xmm0, dword [esi + 0x24]
comiss xmm0, xmm1
jbe 0x10019f88
cmp byte [0x1011f1eb], 0
jne 0x10019e40
cmp byte [0x1015816b], 0
jne 0x10019eda
call fcn.10016b20
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 + 0x20]
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 [0x1011f1d8]
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 [0x101227b8]
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.1000e1d0
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 0x10019f62
cmp byte [0x1015816b], 0
je 0x10019eda
call fcn.10016b20
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 + 0x20]
mov ecx, dword [0x1011f1d8]
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 [0x101227b8]
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.1000e1d0
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 0x10019f62
call fcn.10016b20
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 + 0x20]
mov ecx, dword [0x1011f1d8]
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 [0x101227b8]
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.1000e1d0
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 [0x1011f1e4]
addss xmm1, dword [0x10117f98]
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 0x10019d90
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