Function at 0x47de70
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x24
push ebx
push esi
push edi
push ebp
mov eax, dword [ecx + 0xf8]
mov edi, ecx
test eax, eax
je 0x47e08b
mov eax, dword [edi + 0x70]
test eax, eax
je 0x47e091
mov eax, dword [edi + 0x74]
test eax, eax
je 0x47e097
mov eax, dword [edi + 0x108]
mov ebp, dword [esp + 0x3c]
test eax, eax
jne case.0x47dec5.20
lea eax, [ebp - 0xf]
cmp eax, 0xf3
ja case.0x47dec5.20
xor ecx, ecx
mov cl, byte [eax + 0x47e17c]
jmp dword [ecx*4 + 0x47e164]
mov eax, dword [esp + 0x38]
push 1
push 0
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x47dec5.20
mov eax, dword [edi + 0x10c]
mov esi, dword [esp + 0x40]
test eax, eax
je 0x47e09f
push eax
push esi
call dword [sym.imp.GDI32.dll_SelectObject]
lea eax, [esp + 0x24]
mov ecx, dword [esp + 0x38]
push eax
push ecx
call dword [sym.imp.USER32.dll_GetClientRect]
mov ecx, dword [edi + 0x10c]
lea eax, [esp + 0x24]
push ecx
push eax
push esi
call dword [sym.imp.USER32.dll_FillRect]
mov eax, 1
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
mov ecx, dword [edi + 0x78]
test ecx, ecx
je 0x47e02f
mov eax, dword [esp + 0x44]
mov esi, dword [esp + 0x40]
mov edx, dword [esp + 0x38]
push eax
push esi
mov eax, dword [ecx]
push ebp
push edx
call dword [eax + 0x4c]
test eax, eax
je 0x47df5c
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
cmp esi, 9
jne 0x47dfcb
push 0x12
mov ebp, dword [sym.imp.USER32.dll_GetKeyState]
xor ebx, ebx
call ebp
test ax, ax
push 0x11
setl bl
call ebp
mov ecx, dword [esp + 0x10]
push 0x10
mov edx, ecx
xor edx, ecx
test ax, ax
mov dword [esp + 0x14], edx
setl byte [esp + 0x14]
call ebp
mov dword [0x547b38], 1
xor ecx, ecx
mov edx, dword [esp + 0x44]
test ax, ax
mov eax, dword [esp + 0x10]
setl cl
push ecx
push eax
push ebx
mov ecx, edi
push edx
mov ebx, dword [edi]
push esi
call dword [ebx + 0x5c]
xor eax, eax
pop ebp
mov dword [0x547b38], 0
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
cmp esi, 0xd
jne 0x47dfee
mov ecx, dword [edi + 0x78]
push 0
push 0
push 0
push edi
mov eax, dword [ecx]
call dword [eax + 0xb8]
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
cmp esi, 0x1b
jne 0x47e09f
mov ecx, dword [edi + 0x78]
push 0
push 0
push 1
push edi
mov eax, dword [ecx]
call dword [eax + 0xb8]
test eax, eax
jne 0x47e023
push 0
mov eax, dword [edi + 0xf8]
push 0
push 0xc7
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
mov esi, dword [esp + 0x40]
cmp esi, 0x1b
jne 0x47e09f
push 0
mov eax, dword [edi + 0xf8]
push 0
push 0xc7
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
mov esi, dword [esp + 0x40]
cmp esi, 9
jne 0x47e09f
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
mov esi, dword [esp + 0x40]
mov ecx, edi
push esi
call fcn.0047e270
test eax, eax
jne 0x47e09f
xor eax, eax
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10
mov ebp, dword [esp + 0x3c]
jmp case.0x47dec5.20
mov ebp, dword [esp + 0x3c]
jmp case.0x47dec5.20
mov ebp, dword [esp + 0x3c]
mov esi, dword [esp + 0x40]
xor eax, eax
mov ecx, dword [edi + 0xf8]
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], eax
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], eax
test ecx, ecx
je 0x47e0c8
mov ebx, 1
cmp ebp, 0xb0
jne 0x47e0ca
xor ebx, ebx
test ebx, ebx
je 0x47e0e4
lea eax, [esp + 0x20]
lea edx, [esp + 0x14]
push eax
push edx
push 0xb0
push ecx
call dword [sym.imp.USER32.dll_SendMessageA]
mov eax, dword [esp + 0x44]
mov ecx, dword [esp + 0x38]
push eax
mov edx, dword [edi + 0x114]
push esi
push ebp
push ecx
push edx
call dword [sym.imp.USER32.dll_CallWindowProcA]
mov esi, eax
test ebx, ebx
je 0x47e155
lea eax, [esp + 0x1c]
lea ecx, [esp + 0x18]
push eax
mov edx, dword [edi + 0xf8]
push ecx
push 0xb0
push edx
call dword [sym.imp.USER32.dll_SendMessageA]
mov ecx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
cmp eax, ecx
jne 0x47e137
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x20]
cmp ecx, eax
je 0x47e155
push 1
mov eax, dword [edi + 0xf8]
push 0
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
mov eax, dword [edi + 0xf8]
push eax
call dword [sym.imp.USER32.dll_UpdateWindow]
mov eax, esi
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x24
ret 0x10