Function at 0x4d5a80
Capabilities:
Log keystrokes

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x59584e
mov eax, dword fs:[0]
push eax
push ecx
push ebx
push esi
push edi
mov eax, dword [0x5f0a00]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x10], 0
mov esi, dword [ebp + 8]
mov eax, dword [0x5f0130]
mov dword [esi], eax
mov ecx, dword [ebp + 0xc]
movzx edx, cx
mov dword [ebp - 4], 0
mov dword [ebp - 0x10], 1
lea eax, [edx - 0xd]
cmp eax, 0x21
ja case.0x4d5ade.14
movzx eax, byte [eax + 0x4d5ebc]
jmp dword [eax*4 + 0x4d5e80]
push 0x5aec84
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x5aec8c
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x5aec98
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Down
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Left
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Right
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Home
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x5aecd0
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.PageUp
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.PageDown
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Insert
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Space
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Delete
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push str.Print
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp cx, 0x30
jb 0x4d5cb1
cmp cx, 0x39
jbe 0x4d5cba
lea eax, [ecx - 0x41]
cmp ax, 0x19
ja 0x4d5ce1
movzx eax, cx
mov ecx, esi
mov dword [ebp + 0xc], eax
lea eax, [ebp + 0xc]
push eax
push 1
call fcn.0040c370
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
lea eax, [ecx - 0x60]
cmp ax, 9
ja 0x4d5d46
lea eax, [edx - 0x60]
push eax
push str.Num__d
lea eax, [ebp + 0xc]
push eax
push esi
call fcn.0040c5f0
add esp, 0x10
mov ecx, dword [ebp + 0xc]
add ecx, 0xfffffff4
mov dword [ebp - 4], 1
cmp ecx, dword [0x5f012c]
je case.0x4d5e10.40
or eax, 0xffffffff
lock xadd dword [ecx], eax
dec eax
test eax, eax
jg case.0x4d5e10.40
push ecx
call fcn.00408c50
add esp, 4
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp cx, 0x6a
jne 0x4d5d6c
push 0x5aed34
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp cx, 0x6b
jne 0x4d5d92
push str.Num_
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
cmp cx, 0x6e
jne 0x4d5db8
push str.Num_Del
mov ecx, esi
call fcn.0040c0e0
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
lea eax, [ecx - 0x70]
cmp ax, 0xb
ja 0x4d5df3
lea eax, [edx - 0x6f]
push eax
push 0x5aed5c
lea eax, [ebp + 0xc]
push eax
push esi
call fcn.0040c5f0
add esp, 0x10
lea ecx, [ebp + 0xc]
call fcn.0040bf10
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 2
push edx
call dword [sym.imp.USER32.dll_MapVirtualKeyA]
mov cl, al
movsx eax, cl
add eax, 0xffffffd9
cmp eax, 0x39
ja case.0x4d5e10.40
movzx eax, byte [eax + 0x4d5ee8]
jmp dword [eax*4 + 0x4d5ee0]
movsx ax, cl
mov ecx, dword [esi]
movzx ebx, ax
cmp dword [ecx - 0xc], 1
jg 0x4d5e54
mov edx, dword [ecx - 8]
cmp edx, dword [ecx - 4]
jge 0x4d5e54
mov word [ecx + edx*2], bx
inc dword [ecx - 8]
xor edx, edx
mov eax, dword [esi]
mov ecx, dword [ecx - 8]
mov word [eax + ecx*2], dx
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov edi, dword [ecx - 8]
mov ecx, esi
lea eax, [edi + 1]
push eax
call fcn.0040c850
test al, al
je case.0x4d5e10.40
mov ecx, dword [esi]
mov word [ecx + edi*2], bx
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret