Function at 0x10021ce0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x10195328
mov eax, dword fs:[0]
push eax
sub esp, 0x3c
push ebx
push esi
push edi
mov eax, dword [0x101f9e44]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, ecx
cmp dword [edi + 0x284], 0
je 0x100221e4
call fcn.10039fc9
mov ecx, dword [eax + 4]
call fcn.100366da
xor esi, esi
mov dword [ebp - 4], 0
mov dword [ebp - 0x18], esi
cmp dword [ebp + 0x18], esi
je 0x10021d49
push dword [edi + 0x20]
call dword [sym.imp.USER32.dll_GetDC]
push eax
call fcn.10044f11
mov esi, eax
mov dword [ebp - 0x18], eax
movaps xmm0, xmmword [0x101d84b0]
push dword [edi + 0x20]
movups xmmword [ebp - 0x48], xmm0
call dword [sym.imp.USER32.dll_IsWindow]
test eax, eax
je 0x10021d8f
push ecx
push 0
lea eax, [ebp - 0x38]
mov ecx, edi
push eax
call fcn.10024200
lea ecx, [ebp - 0x48]
cmp ecx, eax
je 0x10021d8f
mov ecx, dword [eax + 4]
mov edx, dword [eax]
mov dword [ebp - 0x1c], ecx
mov ecx, dword [eax + 8]
mov eax, dword [eax + 0xc]
mov dword [ebp - 0x10], edx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0x14], eax
jmp 0x10021da7
mov eax, dword [ebp - 0x3c]
mov ecx, dword [ebp - 0x40]
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x48]
mov dword [ebp - 0x20], ecx
mov ecx, dword [ebp - 0x44]
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0x10], eax
mov ebx, dword [ebp + 8]
mov dword [ebp - 0x24], ebx
test ebx, ebx
js 0x10021dbf
mov eax, dword [edi + 0x2c8]
cmp ebx, eax
cmovl ebx, eax
mov dword [ebp - 0x24], ebx
mov ecx, dword [ebp + 0x10]
mov dword [ebp + 0x10], ecx
test ecx, ecx
js 0x10021dd7
mov eax, dword [edi + 0x2c8]
cmp ecx, eax
cmovl ecx, eax
mov dword [ebp + 0x10], ecx
mov eax, dword [ebp + 0xc]
mov dword [edi + 0x140], 0xffffffff
mov dword [edi + 0x144], 0xffffffff
mov dword [ebp + 0xc], eax
test eax, eax
js 0x10021e15
mov edx, dword [edi + 0x2d0]
cmp eax, edx
jge 0x10021e15
movsx ecx, ax
shr eax, 0x10
cwde
mov dword [edi + 0x140], ecx
mov dword [edi + 0x144], eax
mov dword [ebp + 0xc], edx
mov ecx, dword [ebp + 0x14]
mov dword [ebp + 8], ecx
test ecx, ecx
js 0x10021e2d
mov eax, dword [edi + 0x2d0]
cmp ecx, eax
cmovl ecx, eax
mov dword [ebp + 8], ecx
cmp dword [ebp + 0x1c], 0
je 0x100220a9
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
movzx eax, ax
shr eax, 0xf
mov dword [edi + 0xec], eax
mov ecx, dword [edi + 0x580]
mov eax, ecx
neg eax
sbb eax, eax
mov dword [ebp + 0x14], eax
test ecx, ecx
je 0x10021f73
lea eax, [edi + 0x574]
nop dword [eax + eax]
lea ecx, [ebp - 0x30]
mov dword [ebp - 0x30], 0xffffffff
push ecx
lea ecx, [ebp - 0x28]
mov dword [ebp - 0x2c], 0xffffffff
push ecx
lea ecx, [ebp + 0x14]
push ecx
mov ecx, eax
call fcn.1002c820
mov eax, dword [ebp - 0x30]
test eax, eax
js 0x10021f52
cmp eax, dword [edi + 0x2c4]
jge 0x10021f52
mov esi, dword [ebp - 0x2c]
test esi, esi
js 0x10021f52
cmp esi, dword [edi + 0x2cc]
jge 0x10021f52
push esi
push eax
mov ecx, edi
call fcn.1000eb30
mov ecx, eax
test ecx, ecx
je 0x10021ed3
mov eax, dword [ecx]
call dword [eax + 0x48]
and eax, 0xfffffffd
mov ecx, edi
push eax
push esi
push dword [ebp - 0x30]
call fcn.10026c20
mov eax, dword [ebp - 0x30]
cmp ebx, eax
jg 0x10021ef8
cmp eax, dword [ebp + 0x10]
jg 0x10021ef8
cmp dword [ebp + 0xc], esi
jg 0x10021ef8
cmp esi, dword [ebp + 8]
jle 0x10021f60
cmp dword [ebp - 0x10], 0
jl 0x10021f60
mov ecx, dword [ebp - 0x1c]
test ecx, ecx
js 0x10021f60
mov edx, dword [ebp - 0x20]
test edx, edx
js 0x10021f60
cmp dword [ebp - 0x14], 0
jl 0x10021f60
cmp dword [ebp - 0x10], edx
jg 0x10021f60
cmp ecx, dword [ebp - 0x14]
jg 0x10021f60
cmp eax, dword [ebp - 0x10]
jl 0x10021f60
cmp eax, edx
jg 0x10021f60
cmp esi, ecx
jl 0x10021f60
cmp esi, dword [ebp - 0x14]
jg 0x10021f60
cmp dword [ebp + 0x18], 0
je 0x10021f47
mov ecx, dword [ebp - 0x18]
test ecx, ecx
je 0x10021f47
push ecx
push esi
push eax
mov ecx, edi
call fcn.100217c0
jmp 0x10021f60
push esi
push eax
mov ecx, edi
call fcn.10027850
jmp 0x10021f60
push dword [ebp - 0x28]
lea ecx, [edi + 0x574]
call fcn.1002c730
cmp dword [ebp + 0x14], 0
lea eax, [edi + 0x574]
jne 0x10021e70
mov esi, dword [ebp - 0x18]
mov eax, dword [edi + 0x278]
test dword [edi + 0x274], eax
jne 0x100220a6
test ebx, ebx
js 0x100221cc
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0x10]
mov ecx, dword [ebp + 8]
test edx, edx
js 0x100220af
test eax, eax
js 0x100220af
test ecx, ecx
js 0x100220af
mov ecx, dword [edi + 0x59c]
mov eax, ecx
neg eax
sbb eax, eax
mov dword [ebp + 0x14], eax
test ecx, ecx
je 0x1002212c
lea eax, [ebp - 0x30]
mov dword [ebp - 0x30], 0xffffffff
push eax
lea eax, [ebp - 0x28]
mov dword [ebp - 0x2c], 0xffffffff
push eax
lea eax, [ebp + 0x14]
push eax
lea ecx, [edi + 0x590]
call fcn.1002c820
mov eax, dword [ebp - 0x30]
test eax, eax
js 0x10022096
cmp eax, dword [edi + 0x2c4]
jge 0x10022096
mov esi, dword [ebp - 0x2c]
test esi, esi
js 0x10022096
cmp esi, dword [edi + 0x2cc]
jge 0x10022096
push esi
push eax
mov ecx, edi
call fcn.1000eb30
mov ecx, eax
test ecx, ecx
je 0x1002202c
mov eax, dword [ecx]
call dword [eax + 0x48]
or eax, 2
mov ecx, edi
push eax
push esi
push dword [ebp - 0x30]
call fcn.10026c20
cmp dword [ebp - 0x10], 0
jl 0x10022096
mov ecx, dword [ebp - 0x1c]
test ecx, ecx
js 0x10022096
mov edx, dword [ebp - 0x20]
test edx, edx
js 0x10022096
mov eax, dword [ebp - 0x14]
test eax, eax
js 0x10022096
cmp dword [ebp - 0x10], edx
jg 0x10022096
cmp ecx, eax
jg 0x10022096
mov eax, dword [ebp - 0x30]
cmp eax, dword [ebp - 0x10]
jl 0x10022096
cmp eax, edx
jg 0x10022096
cmp esi, ecx
jl 0x10022096
cmp esi, dword [ebp - 0x14]
jg 0x10022096
cmp dword [ebp + 0x18], 0
je 0x1002208d
mov ecx, dword [ebp - 0x18]
test ecx, ecx
je 0x1002208d
push ecx
push esi
push eax
mov ecx, edi
call fcn.100217c0
jmp 0x10022096
push esi
push eax
mov ecx, edi
call fcn.10027850
cmp dword [ebp + 0x14], 0
jne 0x10021fc5
mov ebx, dword [ebp - 0x24]
mov esi, dword [ebp - 0x18]
mov ecx, dword [ebp + 8]
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0x10]
test ebx, ebx
js 0x100221cc
test edx, edx
js 0x100221cc
test eax, eax
js 0x100221cc
test ecx, ecx
js 0x100221cc
cmp eax, dword [edi + 0x2c4]
jge 0x100221cc
cmp ecx, dword [edi + 0x2cc]
jge 0x100221cc
cmp ebx, eax
jg 0x100221cc
cmp edx, ecx
jg 0x100221cc
mov esi, edx
nop dword [eax]
push esi
push ebx
mov ecx, edi
call fcn.10027550
mov ecx, dword [ebp + 0x1c]
cmp ecx, eax
je 0x100221b2
push esi
test ecx, ecx
mov ecx, edi
push ebx
je 0x1002213e
call fcn.1000eb30
mov ecx, eax
test ecx, ecx
jne 0x10022134
or eax, 2
jmp 0x10022151
mov ecx, dword [ebp + 8]
jmp 0x100220ac
mov eax, dword [ecx]
call dword [eax + 0x48]
or eax, 2
jmp 0x10022151
call fcn.1000eb30
mov ecx, eax
test ecx, ecx
je 0x1002214e
mov eax, dword [ecx]
call dword [eax + 0x48]
and eax, 0xfffffffd
push eax
push esi
push ebx
mov ecx, edi
call fcn.10026c20
cmp dword [ebp - 0x10], 0
jl 0x100221b2
mov eax, dword [ebp - 0x1c]
test eax, eax
js 0x100221b2
mov ecx, dword [ebp - 0x20]
test ecx, ecx
js 0x100221b2
mov edx, dword [ebp - 0x14]
test edx, edx
js 0x100221b2
cmp dword [ebp - 0x10], ecx
jg 0x100221b2
cmp eax, edx
jg 0x100221b2
cmp ebx, dword [ebp - 0x10]
jl 0x100221b2
cmp ebx, ecx
jg 0x100221b2
cmp esi, eax
jl 0x100221b2
cmp esi, edx
jg 0x100221b2
cmp dword [ebp + 0x18], 0
je 0x100221a9
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x100221a9
push eax
push esi
push ebx
mov ecx, edi
call fcn.100217c0
jmp 0x100221b2
push esi
push ebx
mov ecx, edi
call fcn.10027850
inc esi
cmp esi, dword [ebp + 8]
jle 0x10022100
mov edx, dword [ebp + 0xc]
inc ebx
cmp ebx, dword [ebp + 0x10]
jle 0x100220f7
mov esi, dword [ebp - 0x18]
test esi, esi
je 0x100221dc
push dword [esi + 4]
push dword [edi + 0x20]
call dword [sym.imp.USER32.dll_ReleaseDC]
lea ecx, [ebp + 0x1b]
call fcn.1001cec0
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x18