Function at 0x452b20
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x12c
push ebx
mov ebx, dword [esp + 0x134]
push esi
cmp ebx, 0x25
push edi
mov esi, ecx
je 0x452e47
cmp ebx, 0x27
je 0x452e47
cmp ebx, 0x26
je 0x452dc3
cmp ebx, 0x28
je 0x452dc3
cmp ebx, 0x24
jne 0x452b89
lea eax, [esp + 0xc]
push eax
call dword [sym.imp.USER32.dll_GetCaretPos]
mov ecx, dword [esp + 0xc]
mov eax, dword [esp + 0x10]
mov dword [esp + 0x18], ecx
xor ecx, ecx
push eax
push ecx
mov ecx, esi
call fcn.00452ee0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
cmp ebx, 0x23
jne 0x452bd9
mov eax, dword [esi + 0x20]
lea edx, [esp + 0x28]
push edx
push eax
call dword [sym.imp.USER32.dll_GetClientRect]
lea ecx, [esp + 0xc]
push ecx
call dword [sym.imp.USER32.dll_GetCaretPos]
mov edx, dword [esp + 0xc]
mov eax, dword [esp + 0x30]
mov ecx, dword [esi + 0x8c4]
mov dword [esp + 0x18], edx
cdq
idiv ecx
mov edi, dword [esp + 0x10]
push edi
imul eax, ecx
push eax
mov ecx, esi
call fcn.00452ee0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
cmp ebx, 0x22
je 0x452ecc
cmp ebx, 0x21
je 0x452ecc
call sub.MFC42.DLL_AfxGetModuleState
mov eax, dword [eax + 4]
lea ecx, [eax + 0x85c]
call fcn.004273b0
test eax, eax
je 0x452c16
push 0
call dword [sym.imp.USER32.dll_MessageBeep]
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov ecx, 0x3f
xor eax, eax
lea edi, [esp + 0x39]
mov byte [esp + 0x38], 0
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
lea eax, [esp + 0x38]
mov dword [esp + 0x14], 0
push eax
call dword [sym.imp.USER32.dll_GetKeyboardState]
mov ecx, dword [esi + 0x8d0]
lea edx, [esp + 0x14]
push ecx
mov ecx, dword [esp + 0x144]
shr ecx, 0x10
push 0
lea eax, [esp + 0x40]
push edx
and ecx, 0xff
push eax
push ecx
push ebx
call dword [sym.imp.USER32.dll_ToAsciiEx]
mov eax, dword [esp + 0x14]
cmp ax, 0x2b
je 0x452d9d
cmp ax, 0x2d
je 0x452db0
cmp bl, 0x30
jl 0x452c8b
cmp bl, 0x39
jle 0x452ca7
cmp bl, 0x61
jl 0x452c95
cmp bl, 0x66
jle 0x452ca7
cmp bl, 0x41
jl 0x452d80
cmp bl, 0x46
jg 0x452d80
lea edx, [esp + 0xc]
push edx
call dword [sym.imp.USER32.dll_GetCaretPos]
mov eax, dword [esp + 0xc]
mov ecx, dword [esi + 0x8e4]
cdq
idiv dword [esi + 0x8c4]
mov edi, eax
mov eax, dword [esp + 0x10]
cdq
idiv dword [esi + 0x8c8]
cmp eax, ecx
mov dword [esp + 0xc], eax
jge 0x452d37
mov ecx, dword [esi + 0x8d4]
lea edx, [edi + 1]
lea eax, [ecx + ecx*2]
lea eax, [eax + eax*4]
cmp edx, eax
jg 0x452ecc
mov eax, edi
push ebp
cdq
mov ebp, 0xf
idiv ebp
pop ebp
cmp edx, 7
jl 0x452ecc
add edx, 0xfffffff9
push ebx
imul ecx, dword [esp + 0x10]
mov eax, 0x88888889
push edx
imul edi
add edx, edi
sar edx, 3
mov eax, edx
add edx, ecx
shr eax, 0x1f
add eax, edx
mov ecx, esi
push eax
call fcn.00452130
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov edx, dword [esi + 0x8e8]
lea edi, [edx + ecx]
cmp eax, edi
jl 0x452ecc
mov edi, dword [esi + 0x8ec]
add edi, edx
add edi, ecx
cmp eax, edi
jge 0x452ecc
test esi, esi
je 0x452d61
mov esi, dword [esi + 0x20]
push 0x40
push 0x4aca5c
push 0x4aca30
push esi
call dword [sym.imp.USER32.dll_MessageBoxA]
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
cmp ebx, 0x11
je 0x452ecc
push 0
call dword [sym.imp.USER32.dll_MessageBeep]
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov ecx, esi
call fcn.004527b0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov ecx, esi
call fcn.004527e0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov edx, dword [esi + 0x20]
lea ecx, [esp + 0x28]
push ecx
push edx
call dword [sym.imp.USER32.dll_GetClientRect]
lea eax, [esp + 0xc]
push eax
call dword [sym.imp.USER32.dll_GetCaretPos]
mov eax, dword [esp + 0x10]
mov edx, dword [esp + 0xc]
cmp ebx, 0x26
mov dword [esp + 0x1c], eax
jne 0x452e13
mov ecx, dword [esi + 0x8c8]
cmp eax, ecx
jl 0x452ecc
sub eax, ecx
mov ecx, esi
push eax
push edx
call fcn.00452ee0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
cmp ebx, 0x28
jne 0x452ecc
mov ecx, dword [esi + 0x8c8]
mov edi, dword [esp + 0x34]
sub edi, ecx
cmp eax, edi
jge 0x452ecc
add eax, ecx
mov ecx, esi
push eax
push edx
call fcn.00452ee0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8
mov edx, dword [esi + 0x20]
lea ecx, [esp + 0x18]
push ecx
push edx
call dword [sym.imp.USER32.dll_GetClientRect]
lea eax, [esp + 0xc]
push eax
call dword [sym.imp.USER32.dll_GetCaretPos]
mov eax, dword [esp + 0xc]
mov ecx, dword [esp + 0x10]
cmp ebx, 0x25
jne 0x452e96
mov edi, dword [esi + 0x8c4]
cmp eax, edi
jl 0x452e7c
sub eax, edi
jmp 0x452ec3
mov eax, dword [esp + 0x20]
cdq
idiv edi
mov edx, dword [esi + 0x8c8]
imul eax, edi
sub ecx, edx
jns 0x452ec3
xor ecx, ecx
xor eax, eax
jmp 0x452ec3
cmp ebx, 0x27
jne 0x452ecc
mov edx, dword [esi + 0x8c4]
mov edi, dword [esp + 0x20]
sub edi, edx
cmp eax, edi
jg 0x452eaf
add eax, edx
jmp 0x452ec3
mov edx, dword [esi + 0x8c8]
mov edi, dword [esp + 0x24]
sub edi, edx
cmp ecx, edi
jge 0x452ec3
xor eax, eax
add ecx, edx
push ecx
push eax
mov ecx, esi
call fcn.00452ee0
pop edi
pop esi
pop ebx
add esp, 0x12c
ret 8