Function at 0x46fad0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x14
push ebx
push esi
mov esi, ecx
push edi
mov dword [ebp - 4], esi
push dword [esi + 4]
call dword [sym.imp.USER32.dll_SetFocus]
mov eax, dword [ebp + 0x10]
mov ebx, dword [sym.imp.USER32.dll_GetKeyState]
movsx edi, ax
shr eax, 0x10
cwde
push 0x10
mov dword [ebp + 0x10], edi
mov dword [ebp - 8], eax
call ebx
test ax, ax
jns 0x46fb3d
mov ebx, dword [ebp - 4]
mov edi, dword [esi + 0x60]
mov esi, dword [esi + 0x64]
mov eax, dword [ebx + 0x2c]
cdq
push edx
push eax
push esi
push edi
call fcn.00514100
sub edi, eax
mov dword [ebx + 0x60], edi
mov edi, dword [ebp + 0x10]
sbb esi, edx
mov dword [ebx + 0x64], esi
mov esi, ebx
mov ebx, dword [sym.imp.USER32.dll_GetKeyState]
mov eax, dword [esi + 0x60]
mov dword [esi + 0x68], eax
mov eax, dword [esi + 0x64]
mov dword [esi + 0x6c], eax
mov ecx, dword [ebp - 8]
sub esp, 8
mov eax, esp
mov dword [eax + 4], ecx
mov ecx, esi
mov dword [eax], edi
lea eax, [ebp - 0x14]
push eax
call fcn.004701a0
mov eax, dword [ebp - 0x14]
cmp eax, 0xffffffff
jle 0x46fbe6
mov dword [esi + 0x88], eax
mov eax, dword [ebp - 0x10]
push 0x10
mov dword [esi + 0x8c], eax
call ebx
test ax, ax
jns 0x46fbe6
mov eax, dword [esi + 0x2c]
mov ebx, dword [esi + 0x64]
mov edi, dword [esi + 0x60]
cdq
push edx
push eax
push ebx
push edi
call fcn.00514100
mov ecx, dword [esi + 0x68]
mov dword [ebp - 0xc], eax
mov dword [ebp - 0x10], edx
cmp ebx, dword [esi + 0x6c]
jb 0x46fbb7
ja 0x46fba0
cmp edi, ecx
jbe 0x46fbb7
mov eax, dword [esi + 0x2c]
dec eax
cdq
sub eax, dword [ebp - 0xc]
sbb edx, dword [ebp - 0x10]
add eax, edi
mov dword [esi + 0x60], eax
adc edx, ebx
mov dword [esi + 0x64], edx
jmp 0x46fbc1
sub edi, eax
mov dword [esi + 0x60], edi
sbb ebx, edx
mov dword [esi + 0x64], ebx
mov eax, dword [esi + 0x60]
mov dword [esi + 0x70], eax
mov eax, dword [esi + 0x64]
mov dword [esi + 0x74], eax
mov eax, dword [esi + 0x6c]
mov dword [esi + 0x60], ecx
mov dword [esi + 0x64], eax
mov byte [esi + 0x81], 1
call dword [sym.imp.USER32.dll_DestroyCaret]
mov edi, dword [ebp + 0x10]
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
js 0x46fc5f
push dword [ebp - 8]
push edi
push dword [esi + 4]
call dword [sym.imp.USER32.dll_DragDetect]
test eax, eax
je 0x46fc58
mov eax, dword [esi + 0x2c]
mov edi, dword [esi + 0x60]
mov esi, dword [esi + 0x64]
cdq
push edx
mov ebx, eax
mov dword [ebp + 0x10], edx
push ebx
push esi
push edi
call fcn.00514100
sub edi, eax
mov eax, dword [ebp - 4]
sbb esi, edx
mov dword [eax + 0x64], esi
mov esi, eax
mov dword [eax + 0x60], edi
mov eax, dword [esi + 0x60]
push dword [esi + 4]
mov dword [esi + 0x68], eax
mov eax, dword [esi + 0x64]
add ebx, dword [esi + 0x68]
mov dword [esi + 0x6c], eax
mov eax, dword [ebp + 0x10]
adc eax, dword [esi + 0x6c]
mov dword [esi + 0x70], ebx
mov dword [esi + 0x74], eax
mov byte [esi + 0x81], 1
call dword [sym.imp.USER32.dll_SetCapture]
jmp 0x46fc5f
mov byte [esi + 0x81], 0
cmp dword [esi + 0x84], 1
je 0x46fc71
cmp byte [esi + 0x81], 0
jne 0x46fc78
mov ecx, esi
call fcn.00470540
push 1
push 0
push dword [esi + 4]
call dword [sym.imp.USER32.dll_InvalidateRect]
mov eax, dword [esi + 0xbc]
test eax, eax
je 0x46fc9a
push dword [esi + 0xc0]
call eax
add esp, 4
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x10