Function at 0x414880
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x20
push esi
mov esi, ecx
mov eax, dword [esi + 0x2cc]
test eax, eax
mov ecx, dword [esi + 0x2d0]
jl 0x4148aa
cmp eax, dword [esi + 0xf0]
jge 0x4148aa
test ecx, ecx
jl 0x4148aa
cmp ecx, dword [esi + 0xf8]
jl 0x4148b8
mov ecx, esi
call sub.MFC71.DLL_CWnd::Default
pop esi
add esp, 0x20
ret 0xc
push ebx
mov ebx, dword [esi + 0x2d0]
push ebp
mov ebp, dword [sym.imp.USER32.dll_GetKeyState]
push edi
mov edi, dword [esi + 0x2cc]
push 0x11
mov dword [esp + 0x1c], edi
mov dword [esp + 0x20], ebx
mov dword [esp + 0x14], 0
call ebp
test ah, ah
jns case.0x4148f8.46
mov eax, dword [esp + 0x34]
add eax, 0xffffffd3
cmp eax, 0x2b
ja case.0x4148f8.46
movzx eax, byte [eax + 0x41503c]
jmp dword [eax*4 + 0x415028]
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 0x150]
jmp case.0x4148f8.46
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x144]
jmp case.0x4148f8.46
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 0x148]
jmp case.0x4148f8.46
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x14c]
push 0x10
call ebp
test ah, ah
jns 0x414946
cmp dword [esp + 0x34], 0x2d
jne 0x414946
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 0x14c]
mov eax, dword [esp + 0x34]
add eax, 0xfffffff7
cmp eax, 0x68
mov dword [esp + 0x14], eax
ja case.0x414967.20
movzx ecx, byte [eax + 0x415098]
mov ebp, dword [sym.imp.USER32.dll_SendMessageA]
jmp dword [ecx*4 + 0x415068]
mov edx, dword [esi + 0x2d0]
mov eax, dword [esi + 0x2cc]
push edx
push eax
mov ecx, esi
call fcn.0040d7b0
test eax, eax
je 0x414b59
mov ecx, dword [esi + 0x2d0]
mov edx, dword [esi + 0x2cc]
push 0xffffffffffffff97
push ecx
push edx
mov ecx, esi
call fcn.0040e5a0
mov eax, dword [esi + 0x2d0]
mov ecx, dword [esi + 0x2cc]
push 0x41bd67
push eax
push ecx
mov ecx, esi
call fcn.00413f10
mov edx, dword [esi + 0x2d0]
mov eax, dword [esi + 0x2cc]
push 0
push edx
push eax
mov ecx, esi
call fcn.00413fd0
mov ecx, dword [esi + 0x2d0]
mov edx, dword [esi + 0x2cc]
push 0x41bd67
push ecx
push edx
mov ecx, esi
call fcn.00413f70
mov eax, dword [esi + 0x2d0]
mov ecx, dword [esi + 0x2cc]
push eax
push ecx
push 1
mov ecx, esi
call fcn.00413280
mov edx, dword [esi + 0x2d0]
mov eax, dword [esi + 0x2cc]
push 0xffffffffffffff96
push edx
push eax
mov ecx, esi
call fcn.0040e5a0
push 0
lea eax, [esi + 0x2cc]
push eax
mov ecx, esi
call fcn.004128f0
jmp 0x414b59
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, ah
jns 0x414a7f
mov eax, dword [esi + 0xfc]
cmp ebx, eax
jle 0x414a50
dec ebx
mov dword [esp + 0x1c], ebx
jmp 0x414b59
jne 0x414a73
cmp edi, dword [esi + 0xf4]
jle 0x414a73
mov ebx, dword [esi + 0xf8]
dec edi
dec ebx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x10], 1
jmp 0x414b55
mov ecx, esi
call sub.MFC71.DLL_CWnd::Default
jmp 0x414b59
mov eax, dword [esi + 0xf8]
dec eax
cmp ebx, eax
jge 0x414a94
inc ebx
mov dword [esp + 0x1c], ebx
jmp 0x414b59
jne 0x414a73
mov ecx, dword [esi + 0xf0]
dec ecx
cmp edi, ecx
jge 0x414a73
mov ebx, dword [esi + 0xfc]
inc edi
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x10], 1
jmp 0x414b55
mov eax, dword [esi + 0xf0]
mov ecx, edi
inc edi
cmp edi, eax
mov dword [esp + 0x18], edi
jge 0x414afb
lea ebx, [ebx]
test edi, edi
jl 0x414aec
cmp edi, eax
jge 0x414aec
cmp edi, dword [esi + 0x108]
jge 0x414aff
mov edx, dword [esi + 0x104]
cmp dword [edx + edi*4], 0
jg 0x414b55
mov edx, dword [esi + 0xf0]
inc edi
cmp edi, edx
jl 0x414ad0
mov dword [esp + 0x18], edi
mov edi, ecx
jmp 0x414b55
mov dword [esp + 0x18], edi
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov ecx, dword [esi + 0xf4]
mov eax, edi
dec edi
cmp edi, ecx
mov dword [esp + 0x18], edi
jl 0x414b53
lea esp, [esp]
test edi, edi
jl 0x414b44
cmp edi, dword [esi + 0xf0]
jge 0x414b44
cmp edi, dword [esi + 0x108]
jge 0x414c08
mov ecx, dword [esi + 0x104]
cmp dword [ecx + edi*4], 0
jg 0x414b55
mov ecx, dword [esi + 0xf4]
dec edi
cmp edi, ecx
jge 0x414b20
mov dword [esp + 0x18], edi
mov edi, eax
mov dword [esp + 0x18], edi
cmp edi, dword [esi + 0x2cc]
jne 0x414b6d
cmp ebx, dword [esi + 0x2d0]
je 0x41501c
mov eax, dword [esi + 0x2a4]
test eax, eax
jne 0x414bca
lea ecx, [esi + 0x310]
call fcn.0040c870
mov edx, dword [esi + 0x9c]
neg edx
sbb edx, edx
add edx, 4
push 0x10
mov dword [esi + 0x2a4], edx
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, ah
jns 0x414ba8
cmp dword [esp + 0x34], 9
jne 0x414bb4
mov dword [esi + 0x2c4], edi
mov dword [esi + 0x2c8], ebx
lea eax, [esp + 0x18]
push eax
mov ecx, esi
call fcn.00413b40
mov dword [esi + 0x2a4], 0
push ebx
push edi
lea ecx, [esp + 0x30]
push ecx
mov ecx, esi
call fcn.004133a0
mov ecx, ebx
push ecx
mov eax, edi
push eax
mov ecx, esi
call fcn.0040d7f0
test eax, eax
jne 0x415002
mov eax, dword [esp + 0x14]
cmp eax, 0x1f
ja case.0x414c01.1
movzx edx, byte [eax + 0x41511c]
jmp dword [edx*4 + 0x415104]
mov dword [esp + 0x18], edi
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov eax, dword [esi + 0xf8]
mov ecx, ebx
inc ebx
cmp ebx, eax
mov dword [esp + 0x1c], ebx
jge 0x414c51
test ebx, ebx
jl 0x414c42
cmp ebx, eax
jge 0x414c42
cmp ebx, dword [esi + 0x11c]
jge 0x414c5c
mov edx, dword [esi + 0x118]
cmp dword [edx + ebx*4], 0
jg 0x414a8b
mov edx, dword [esi + 0xf8]
inc ebx
cmp ebx, edx
jl 0x414c22
mov dword [esp + 0x1c], ebx
mov ebx, ecx
mov dword [esp + 0x1c], ebx
jmp 0x414b59
mov dword [esp + 0x1c], ebx
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov ecx, dword [esi + 0xfc]
mov eax, ebx
dec ebx
cmp ebx, ecx
mov dword [esp + 0x1c], ebx
jl 0x414ca9
test ebx, ebx
jl 0x414c9a
cmp ebx, dword [esi + 0xf8]
jge 0x414c9a
cmp ebx, dword [esi + 0x11c]
jge 0x414cb4
mov ecx, dword [esi + 0x118]
cmp dword [ecx + ebx*4], 0
jg 0x414a8b
mov ecx, dword [esi + 0xfc]
dec ebx
cmp ebx, ecx
jge 0x414c76
mov dword [esp + 0x1c], ebx
mov ebx, eax
mov dword [esp + 0x1c], ebx
jmp 0x414b59
mov dword [esp + 0x1c], ebx
call sub.MFC71.DLL_AfxThrowInvalidArgException
lea edx, [esp + 0x28]
push edx
mov ecx, esi
call fcn.0040d2d0
mov eax, dword [esi + 0x20]
push 0
push 3
push 0x115
push eax
call ebp
lea ecx, [esp + 0x20]
push ecx
mov ecx, esi
call fcn.0040d2d0
mov eax, dword [esp + 0x20]
sub eax, dword [esp + 0x28]
je 0x414d08
add edi, eax
mov eax, dword [esi + 0xf0]
dec eax
cmp edi, eax
mov dword [esp + 0x18], edi
jle 0x414b59
jmp 0x414b53
mov edi, dword [esi + 0xf0]
dec edi
jmp 0x414b55
lea edx, [esp + 0x20]
push edx
mov ecx, esi
call fcn.0040d2d0
mov eax, dword [esi + 0x20]
push 0
push 2
push 0x115
push eax
call ebp
lea ecx, [esp + 0x28]
push ecx
mov ecx, esi
call fcn.0040d2d0
mov eax, dword [esp + 0x28]
sub eax, dword [esp + 0x20]
je 0x414d5e
add edi, eax
mov eax, dword [esi + 0xf4]
cmp edi, eax
mov dword [esp + 0x18], edi
jge 0x414b59
jmp 0x414b53
mov edi, dword [esi + 0xf4]
jmp 0x414b55
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, ah
push 0
push 6
jns 0x414d9f
mov edx, dword [esi + 0x20]
push 0x115
push edx
call ebp
mov eax, dword [esi + 0x20]
push 0
push 6
push 0x114
push eax
call ebp
mov edi, dword [esi + 0xf4]
mov dword [esp + 0x18], edi
jmp 0x414daa
mov ecx, dword [esi + 0x20]
push 0x114
push ecx
call ebp
mov eax, dword [esi + 0xf8]
mov ebx, dword [esi + 0xfc]
lea edx, [eax - 1]
cmp ebx, edx
mov dword [esp + 0x1c], ebx
jge 0x414ded
test ebx, ebx
jl 0x414ddd
cmp ebx, eax
jge 0x414ddd
cmp ebx, dword [esi + 0x11c]
jge 0x414e31
mov ecx, dword [esi + 0x118]
cmp dword [ecx + ebx*4], 0
jg 0x414de9
mov edx, dword [esi + 0xf8]
inc ebx
dec edx
cmp ebx, edx
jl 0x414dc1
mov dword [esp + 0x1c], ebx
mov eax, dword [esi + 0xf0]
lea ecx, [eax - 1]
cmp edi, ecx
jge 0x414b59
mov edi, edi
test edi, edi
jl 0x414e20
cmp edi, eax
jge 0x414e20
cmp edi, dword [esi + 0x108]
jge 0x414e3a
mov edx, dword [esi + 0x104]
cmp dword [edx + edi*4], 0
jg 0x414b55
mov ecx, dword [esi + 0xf0]
inc edi
dec ecx
cmp edi, ecx
jl 0x414e00
jmp 0x414b55
mov dword [esp + 0x1c], ebx
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov dword [esp + 0x18], edi
call sub.MFC71.DLL_AfxThrowInvalidArgException
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, ah
push 0
push 7
jns 0x414e7a
mov edx, dword [esi + 0x20]
push 0x115
push edx
call ebp
mov eax, dword [esi + 0x20]
push 0
push 7
push 0x114
push eax
call ebp
mov edi, dword [esi + 0xf0]
dec edi
mov dword [esp + 0x18], edi
jmp 0x414e85
mov ecx, dword [esi + 0x20]
push 0x114
push ecx
call ebp
mov eax, dword [esi + 0xf8]
mov edx, dword [esi + 0xfc]
lea ebx, [eax - 1]
inc edx
cmp ebx, edx
mov dword [esp + 0x1c], ebx
jle 0x414ecc
lea ecx, [ecx]
test ebx, ebx
jl 0x414ebc
cmp ebx, eax
jge 0x414ebc
cmp ebx, dword [esi + 0x11c]
jge 0x414f15
mov ecx, dword [esi + 0x118]
cmp dword [ecx + ebx*4], 0
jg 0x414ec8
mov edx, dword [esi + 0xfc]
dec ebx
inc edx
cmp ebx, edx
jg 0x414ea0
mov dword [esp + 0x1c], ebx
mov eax, dword [esi + 0xf4]
inc eax
cmp edi, eax
jle 0x414b59
jmp 0x414ee0
test edi, edi
jl 0x414f04
cmp edi, dword [esi + 0xf0]
jge 0x414f04
cmp edi, dword [esi + 0x108]
jge 0x414f1e
mov ecx, dword [esi + 0x104]
cmp dword [ecx + edi*4], 0
jg 0x414b55
mov edx, dword [esi + 0xf4]
dec edi
inc edx
cmp edi, edx
jg 0x414ee0
jmp 0x414b55
mov dword [esp + 0x1c], ebx
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov dword [esp + 0x18], edi
call sub.MFC71.DLL_AfxThrowInvalidArgException
mov edx, dword [esi]
push 1
or ecx, 0xffffffff
push ecx
mov ecx, dword [esi + 0x2cc]
or eax, 0xffffffff
push eax
mov eax, dword [esi + 0x2d0]
push eax
push ecx
mov ecx, esi
call dword [edx + 0x180]
jmp 0x414b59
push 0
push 1
mov eax, dword [esi + 0x20]
push 0x114
push eax
jmp 0x414fe9
mov ecx, dword [esi + 0x20]
push 0
push 0
push 0x114
push ecx
jmp 0x414fe9
push 0
push 1
push 0x115
jmp 0x414fe5
mov eax, dword [esi + 0x20]
push 0
push 0
push 0x115
push eax
jmp 0x414fe9
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
test ah, ah
mov eax, dword [esp + 0x10]
push 0
jns 0x414fc0
test eax, eax
push 0
je 0x414f52
mov ecx, dword [esi + 0x20]
push 0x115
push ecx
call ebp
mov edx, dword [esi + 0x12c]
push 1
push edx
push 0
mov ecx, esi
call fcn.0040c6a0
jmp case.0x414c01.1
test eax, eax
push 1
je 0x414fe0
mov ecx, dword [esi + 0x20]
push 0x115
push ecx
call ebp
push 1
push 0
push 0
mov ecx, esi
call fcn.0040c6a0
jmp case.0x414c01.1
push 0x114
mov edx, dword [esi + 0x20]
push edx
call ebp
push ebx
push edi
mov ecx, esi
call fcn.0040f850
mov eax, dword [esi + 0x20]
push 1
push 0
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
push ebx
push edi
mov ecx, esi
call fcn.0040f850
pop edi
pop ebp
pop ebx
pop esi
add esp, 0x20
ret 0xc
mov ecx, esi
call sub.MFC71.DLL_CWnd::Default
pop edi
pop ebp
pop ebx
pop esi
add esp, 0x20
ret 0xc