Function at 0x461ea0
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push ebp
push esi
push edi
mov esi, ecx
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
mov edx, dword [esi + 0x1014]
xor ebx, ebx
xor eax, eax
lea ecx, [esi + 0x18]
cmp dword [ecx], edx
je 0x461eca
inc eax
add ecx, 0x54
cmp eax, 0x30
jl 0x461ebb
jmp 0x461ecc
mov ebx, eax
mov ecx, dword [esi + 0x102c]
mov eax, ebx
cdq
idiv ecx
mov eax, ebx
mov edi, edx
cdq
idiv ecx
mov edx, dword [esp + 0x14]
lea ebp, [edx - 3]
cmp ebp, 0x25
ja case.0x461ef6.10
xor edx, edx
mov dl, byte [ebp + 0x462118]
jmp dword [edx*4 + 0x4620f8]
test edi, edi
jle 0x461f0b
imul ecx, eax
lea edx, [edi - 1]
add ecx, edx
jmp 0x461f80
test eax, eax
jne 0x461f2d
test edi, edi
jne 0x461f1c
imul ecx, eax
xor edx, edx
add ecx, edx
jmp 0x461f80
mov eax, dword [esi + 0x1028]
lea edx, [ecx - 1]
dec eax
imul ecx, eax
add ecx, edx
jmp 0x461f80
dec eax
lea edx, [ecx - 1]
imul ecx, eax
add ecx, edx
jmp 0x461f80
lea edx, [ecx - 1]
cmp edi, edx
jge 0x461f49
imul ecx, eax
lea edx, [edi + 1]
add ecx, edx
jmp 0x461f80
jne 0x461f61
mov edx, dword [esi + 0x1028]
dec edx
cmp eax, edx
jne 0x461f61
xor eax, eax
xor edx, edx
imul ecx, eax
add ecx, edx
jmp 0x461f80
xor edx, edx
inc eax
imul ecx, eax
add ecx, edx
jmp 0x461f80
mov edx, dword [esi + 0x1028]
dec edx
cmp eax, edx
jge 0x461f79
inc eax
jmp 0x461f7b
xor eax, eax
imul ecx, eax
add ecx, edi
lea eax, [ecx*8]
sub eax, ecx
lea eax, [eax + eax*2]
mov ecx, dword [esi + eax*4 + 0x18]
lea edi, [esi + eax*4 + 0x18]
push ecx
mov ecx, esi
call fcn.00460b40
mov eax, dword [esi + 0x1018]
mov edx, dword [edi]
push 0x64
push edx
mov ecx, dword [eax + 0x20]
push 0x4dc
push ecx
call dword [sym.imp.USER32.dll_PostMessageA]
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
test eax, eax
jg 0x461fc7
mov eax, dword [esi + 0x1028]
dec eax
imul ecx, eax
add ecx, edi
lea eax, [ecx*8]
sub eax, ecx
mov ecx, esi
lea edx, [eax + eax*2]
mov eax, dword [esi + edx*4 + 0x18]
push eax
lea edi, [esi + edx*4 + 0x18]
call fcn.00460b40
mov edx, dword [esi + 0x1018]
mov ecx, dword [edi]
push 0x64
push ecx
mov eax, dword [edx + 0x20]
push 0x4dc
push eax
call dword [sym.imp.USER32.dll_PostMessageA]
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov eax, dword [esi + 0x101c]
test eax, eax
je case.0x461ef6.10
mov eax, dword [esi + 0x1014]
mov edx, dword [esi]
push 0
push eax
mov ecx, esi
call dword [edx + 0x30]
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov eax, dword [esi + 0x101c]
test eax, eax
je case.0x461ef6.10
mov eax, dword [esi + 0x1014]
mov edx, dword [esi]
push 0
push eax
mov ecx, esi
call dword [edx + 0x34]
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, 0x80
je 0x4620b1
mov eax, dword [esi + 0x1018]
test eax, eax
je case.0x461ef6.10
mov eax, dword [eax + 0x20]
push eax
call dword [sym.imp.USER32.dll_GetParent]
push eax
call sub.MFC42.DLL_CWnd::FromHandle
mov esi, dword [esi + 0x1018]
test esi, esi
je 0x46208c
mov esi, dword [esi + 0x20]
mov ecx, dword [eax + 0x20]
push 1
push esi
push ecx
call dword [sym.imp.USER32.dll_GetNextDlgTabItem]
push eax
call sub.MFC42.DLL_CWnd::FromHandle
test eax, eax
je case.0x461ef6.10
mov ecx, eax
call sub.MFC42.DLL_CWnd::SetFocus
pop edi
pop esi
pop ebp
pop ebx
ret 0xc
mov eax, dword [esi + 0x1030]
test eax, eax
je case.0x461ef6.10
mov eax, dword [esi + 0x1018]
mov edx, dword [esi + 0x1014]
push 0
push edx
mov ecx, dword [eax + 0x20]
push 0x4de
push ecx
call dword [sym.imp.USER32.dll_PostMessageA]
mov eax, dword [esi + 0x101c]
test eax, eax
je case.0x461ef6.10
mov ecx, dword [esi + 0x1018]
push 0
call sub.MFC42.DLL_CWnd::ShowWindow
pop edi
pop esi
pop ebp
pop ebx
ret 0xc