Function at 0x46f0d0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x28
mov eax, dword [0x583384]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
push esi
push edi
mov edi, dword [sym.imp.USER32.dll_GetKeyState]
mov ebx, ecx
push 0x10
call edi
mov esi, dword [sym.imp.USER32.dll_InvalidateRect]
xor ecx, ecx
test ax, ax
mov eax, dword [ebp + 0xc]
sets cl
add eax, 0xffffffdf
cmp eax, 0x22
ja case.0x46f113.35
movzx eax, byte [eax + 0x46fa8c]
jmp dword [eax*4 + 0x46fa6c]
test ecx, ecx
je 0x46f16a
cmp dword [ebx + 0x84], 1
je 0x46f16a
cmp byte [ebx + 0x81], 0
jne 0x46f143
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
push 1
push 0
push 0xffffffffffffffff
mov ecx, ebx
call fcn.0046daa0
mov eax, dword [ebx + 0x60]
push 1
push 0
push dword [ebx + 4]
mov dword [ebx + 0x70], eax
mov eax, dword [ebx + 0x64]
mov dword [ebx + 0x74], eax
call esi
jmp case.0x46f113.35
push 0
push 0
push 0xffffffffffffffff
mov ecx, ebx
mov byte [ebx + 0x81], 0
call fcn.0046daa0
jmp case.0x46f113.35
test ecx, ecx
je 0x46f1b4
cmp dword [ebx + 0x84], 1
je 0x46f1b4
cmp byte [ebx + 0x81], 0
jne 0x46f1ac
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
push 1
push 0
push 1
jmp 0x46f149
mov eax, dword [ebx + 0x84]
dec eax
mov byte [ebx + 0x81], 0
cmp eax, 3
ja case.default.0x46f1cb
jmp dword [eax*4 + 0x46fab0]
mov eax, dword [ebx + 0x3c]
mov edi, dword [ebx + 0x38]
cdq
idiv edi
mov ecx, dword [ebx + 0x48]
mov esi, dword [ebx + 0x88]
inc esi
mov dword [ebx + 0x88], esi
lea eax, [eax + ecx*2]
dec eax
cmp esi, eax
jle case.default.0x46f1cb
mov eax, dword [ebx + 0x40]
cdq
idiv edi
mov dword [ebx + 0x88], eax
jmp case.default.0x46f1cb
inc dword [ebx + 0x88]
jmp case.default.0x46f1cb
mov eax, dword [ebx + 0x28]
mov ecx, dword [ebx + 0x2c]
cdq
idiv ecx
lea ecx, [ecx*2 + 1]
mov edi, dword [ebx + 0x88]
mov esi, eax
inc edi
mov eax, dword [ebx + 0x40]
imul esi, ecx
mov ecx, dword [ebx + 0x38]
cdq
idiv ecx
mov dword [ebx + 0x88], edi
add eax, 0xfffffffe
add eax, esi
cmp edi, eax
jle case.default.0x46f1cb
mov eax, dword [ebx + 0x44]
cdq
idiv ecx
mov dword [ebx + 0x88], eax
jmp case.default.0x46f1cb
mov eax, dword [ebx + 0x44]
mov edi, dword [ebx + 0x38]
cdq
idiv edi
mov ecx, dword [ebx + 0x88]
mov esi, dword [ebx + 0x28]
dec eax
inc ecx
add eax, esi
mov dword [ebx + 0x88], ecx
cmp ecx, eax
jle case.default.0x46f1cb
mov eax, dword [ebx + 0x3c]
cdq
idiv edi
mov ecx, dword [ebx + 0x30]
mov dword [ebx + 0x88], eax
dec ecx
mov eax, dword [ebx + 0x8c]
cmp eax, ecx
jne 0x46f29a
mov eax, esi
cdq
add dword [ebx + 0x58], eax
adc dword [ebx + 0x5c], edx
jmp case.default.0x46f1cb
inc eax
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f2d8
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f2f5
jb 0x46f2ea
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f2f5
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb case.0x46f113.35
ja 0x46f317
cmp dword [ebx + 0x60], eax
jb case.0x46f113.35
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp case.0x46f113.35
test ecx, ecx
je 0x46f3f0
cmp dword [ebx + 0x84], 1
je 0x46f3f0
cmp byte [ebx + 0x81], 0
jne 0x46f358
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f38f
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x28]
dec dword [ebx + 0x8c]
neg eax
cdq
add dword [ebx + 0x60], eax
adc dword [ebx + 0x64], edx
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f3be
jb 0x46f3b3
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f3be
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb 0x46f150
ja 0x46f3e0
cmp dword [ebx + 0x60], eax
jb 0x46f150
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp 0x46f150
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
mov byte [ebx + 0x81], 0
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f42e
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x28]
dec dword [ebx + 0x8c]
neg eax
cdq
add dword [ebx + 0x60], eax
adc dword [ebx + 0x64], edx
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f45d
jb 0x46f452
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f45d
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb case.0x46f113.35
ja 0x46f47f
cmp dword [ebx + 0x60], eax
jb case.0x46f113.35
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp case.0x46f113.35
test ecx, ecx
je 0x46f556
cmp dword [ebx + 0x84], 1
je 0x46f556
cmp byte [ebx + 0x81], 0
jne 0x46f4c0
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f4f7
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x28]
inc dword [ebx + 0x8c]
cdq
add dword [ebx + 0x60], eax
adc dword [ebx + 0x64], edx
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f524
jb 0x46f519
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f524
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb 0x46f150
ja 0x46f546
cmp dword [ebx + 0x60], eax
jb 0x46f150
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp 0x46f150
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
mov byte [ebx + 0x81], 0
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f594
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x28]
inc dword [ebx + 0x8c]
cdq
add dword [ebx + 0x60], eax
adc dword [ebx + 0x64], edx
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f5c1
jb 0x46f5b6
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f5c1
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb case.0x46f113.35
ja 0x46f5e3
cmp dword [ebx + 0x60], eax
jb case.0x46f113.35
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp case.0x46f113.35
test ecx, ecx
je 0x46f6b5
cmp dword [ebx + 0x84], 1
je 0x46f6b5
cmp byte [ebx + 0x81], 0
jne 0x46f624
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
push 1
push 2
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f666
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f683
jb 0x46f678
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f683
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb 0x46f150
ja 0x46f6a5
cmp dword [ebx + 0x60], eax
jb 0x46f150
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp 0x46f150
push 1
push 2
mov ecx, ebx
mov byte [ebx + 0x81], 0
call fcn.0046de70
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f6fe
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f71b
jb 0x46f710
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f71b
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb case.0x46f113.35
ja 0x46f73d
cmp dword [ebx + 0x60], eax
jb case.0x46f113.35
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp case.0x46f113.35
test ecx, ecx
je 0x46f8e0
cmp dword [ebx + 0x84], 1
je 0x46f8e0
cmp byte [ebx + 0x81], 0
jne 0x46f77e
mov eax, dword [ebx + 0x60]
mov dword [ebx + 0x68], eax
mov eax, dword [ebx + 0x64]
mov byte [ebx + 0x81], 1
mov dword [ebx + 0x6c], eax
push 0
push 0
push 0xb
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_SendMessageA]
xorps xmm0, xmm0
mov dword [ebp - 8], 0
push 0xfffffffffffffff0
push dword [ebx + 4]
movups xmmword [ebp - 0x20], xmm0
mov dword [ebp - 0x20], 0x1c
movq qword [ebp - 0x10], xmm0
mov dword [ebp - 0x1c], 7
call dword [sym.imp.USER32.dll_GetWindowLongA]
test eax, 0x200000
je 0x46f7d3
lea eax, [ebp - 0x20]
push eax
push 1
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_GetScrollInfo]
test eax, eax
jne 0x46f7e6
xorps xmm0, xmm0
mov dword [ebp - 8], 0
movups xmmword [ebp - 0x20], xmm0
movq qword [ebp - 0x10], xmm0
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
mov esi, dword [ebx + 0x58]
mov edi, dword [ebx + 0x5c]
cdq
add eax, esi
mov ecx, eax
mov dword [ebx + 0x58], eax
adc edx, edi
sub ecx, esi
mov eax, edx
mov dword [ebx + 0x5c], edx
sbb eax, edi
add dword [ebx + 0x60], ecx
mov ecx, ebx
adc dword [ebx + 0x64], eax
call fcn.004705b0
mov ecx, ebx
call fcn.00470540
push 0
push 1
push 0xb
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_SendMessageA]
mov esi, dword [sym.imp.USER32.dll_InvalidateRect]
push 1
push 0
push dword [ebx + 4]
call esi
mov eax, dword [ebx + 0xbc]
test eax, eax
je 0x46f84d
push dword [ebx + 0xc0]
call eax
add esp, 4
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f884
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46f8a1
jb 0x46f896
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46f8a1
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb 0x46f8c6
ja 0x46f8bb
cmp dword [ebx + 0x60], eax
jb 0x46f8c6
push 0
push 1
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x60]
push 1
push 0
push dword [ebx + 4]
mov dword [ebx + 0x70], eax
mov eax, dword [ebx + 0x64]
mov dword [ebx + 0x74], eax
call esi
jmp 0x46fa3b
push 0
push 0
push 0xb
push dword [ebx + 4]
mov byte [ebx + 0x81], 0
call dword [sym.imp.USER32.dll_SendMessageA]
xorps xmm0, xmm0
mov dword [ebp - 8], 0
push 0xfffffffffffffff0
push dword [ebx + 4]
movups xmmword [ebp - 0x20], xmm0
mov dword [ebp - 0x20], 0x1c
movq qword [ebp - 0x10], xmm0
mov dword [ebp - 0x1c], 7
call dword [sym.imp.USER32.dll_GetWindowLongA]
test eax, 0x200000
je 0x46f93c
lea eax, [ebp - 0x20]
push eax
push 1
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_GetScrollInfo]
test eax, eax
jne 0x46f94f
xorps xmm0, xmm0
mov dword [ebp - 8], 0
movups xmmword [ebp - 0x20], xmm0
movq qword [ebp - 0x10], xmm0
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
mov esi, dword [ebx + 0x58]
mov edi, dword [ebx + 0x5c]
cdq
add eax, esi
mov ecx, eax
mov dword [ebx + 0x58], eax
adc edx, edi
sub ecx, esi
mov eax, edx
mov dword [ebx + 0x5c], edx
sbb eax, edi
add dword [ebx + 0x60], ecx
mov ecx, ebx
adc dword [ebx + 0x64], eax
call fcn.004705b0
mov ecx, ebx
call fcn.00470540
push 0
push 1
push 0xb
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_SendMessageA]
mov esi, dword [sym.imp.USER32.dll_InvalidateRect]
push 1
push 0
push dword [ebx + 4]
call esi
mov eax, dword [ebx + 0xbc]
test eax, eax
je 0x46f9b6
push dword [ebx + 0xc0]
call eax
add esp, 4
mov eax, dword [ebx + 0x34]
imul eax, dword [ebx + 0x8c]
mov ecx, dword [ebx + 0x38]
imul ecx, dword [ebx + 0x88]
push eax
lea eax, [ebp - 0x28]
push ecx
push eax
mov ecx, ebx
call fcn.004701a0
mov ecx, dword [eax]
mov eax, dword [eax + 4]
cmp ecx, 0xffffffff
jle 0x46f9ed
mov dword [ebx + 0x88], ecx
mov dword [ebx + 0x8c], eax
mov eax, dword [ebx + 0x64]
cmp eax, dword [ebx + 0x5c]
ja 0x46fa0a
jb 0x46f9ff
mov eax, dword [ebx + 0x60]
cmp eax, dword [ebx + 0x58]
jae 0x46fa0a
push 0
push 0
mov ecx, ebx
call fcn.0046de70
mov eax, dword [ebx + 0x30]
imul eax, dword [ebx + 0x28]
cdq
add eax, dword [ebx + 0x58]
adc edx, dword [ebx + 0x5c]
cmp dword [ebx + 0x64], edx
jb 0x46fa3b
ja 0x46fa24
cmp dword [ebx + 0x60], eax
jb 0x46fa3b
push 0
push 1
mov ecx, ebx
call fcn.0046de70
jmp 0x46fa3b
push 0x11
call edi
mov esi, dword [sym.imp.USER32.dll_InvalidateRect]
mov ecx, ebx
call fcn.00470540
push 1
push 0
push dword [ebx + 4]
call esi
push dword [ebx + 4]
call dword [sym.imp.USER32.dll_SetFocus]
mov ecx, dword [ebp - 4]
xor eax, eax
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.00513512
mov esp, ebp
pop ebp
ret 0x10