Function at 0x478ce7
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x24
push ebx
push esi
mov esi, ecx
push edi
lea ebx, [esi + 0x2c8]
push ebx
call fcn.00476eb0
test eax, eax
je 0x478d1e
mov edi, dword [ebx]
mov ebx, dword [ebx + 4]
push 0x11
mov dword [ebp - 0x24], edi
mov dword [ebp - 0x20], ebx
mov dword [ebp - 0xc], 0
mov dword [ebp - 4], 0
mov dword [ebp - 8], 0
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
jae case.0x478cb0.46
mov eax, dword [ebp + 8]
add eax, 0xffffffd3
cmp eax, 0x3e
ja case.0x478cb0.46
movzx eax, byte [eax + 0x479420]
jmp dword [eax*4 + 0x479408]
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x198]
jmp case.0x478cb0.46
push 0
mov ecx, esi
call fcn.00472df0
push 1
push 0
push dword [esi + 0x20]
call dword [sym.imp.USER32.dll_InvalidateRect]
jmp case.0x478cb0.46
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x18c]
jmp case.0x478cb0.46
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x190]
jmp case.0x478cb0.46
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x194]
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
mov ecx, dword [ebp + 8]
jae 0x478d2e
cmp ecx, 0x2d
jne 0x478d2e
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x194]
mov ecx, esi
call sub.mfc140.dll_Ordinal_3825
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0xc
cmp ecx, 0x2e
jne 0x478d42
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 0x16c]
jmp 0x479225
cmp ecx, 0x28
jne 0x478d89
mov eax, edi
mov dword [ebp - 0x10], eax
lea edi, [eax + 1]
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x118]
jge 0x478dc0
nop word [eax + eax]
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x479225
inc edi
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x118]
jl 0x478d60
mov eax, dword [ebp - 0x10]
mov edi, eax
mov dword [ebp - 0x24], edi
jmp 0x479225
cmp ecx, 0x26
jne 0x478dca
mov eax, edi
mov dword [ebp - 0x10], eax
lea edi, [eax - 1]
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x11c]
jl 0x478dc0
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x479225
dec edi
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x11c]
jge 0x478da1
mov eax, dword [ebp - 0x10]
mov edi, eax
mov dword [ebp - 0x24], edi
jmp 0x479225
cmp ecx, 0x27
je 0x479188
cmp ecx, 9
jne 0x478ea2
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
jae 0x478e66
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
jae 0x478d1e
mov ecx, dword [ebp + 8]
mov dword [ebp - 0x10], 0
mov eax, ebx
mov dword [ebp - 0x18], eax
lea ebx, [eax - 1]
mov dword [ebp - 0x20], ebx
cmp ecx, 9
jne 0x47914f
mov eax, dword [esi + 0x124]
dec eax
cmp ebx, eax
jne 0x479148
mov eax, dword [esi + 0x11c]
cmp edi, eax
jle 0x479148
dec edi
mov dword [ebp - 0x24], edi
cmp edi, eax
jle 0x479135
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x47912e
dec edi
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x11c]
jg 0x478e45
jmp 0x479135
cmp byte [esi + 0x4a6], 0
je 0x479185
push dword [esi + 0x20]
call dword [sym.imp.USER32.dll_GetParent]
push eax
call sub.mfc140.dll_Ordinal_4870
test eax, eax
je 0x478d25
push 0
push 0
push 0x28
push dword [eax + 0x20]
call dword [sym.imp.USER32.dll_SendMessageA]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0xc
cmp ecx, 0x25
je 0x478e01
cmp ecx, 0x22
jne 0x478f0e
push 0
lea eax, [ebp - 0x14]
mov ecx, esi
push eax
call fcn.00475df0
mov eax, dword [sym.imp.USER32.dll_SendMessageA]
push 0
push 3
push 0x115
push dword [esi + 0x20]
call eax
push 0
lea eax, [ebp - 0x1c]
mov dword [ebp - 8], 1
push eax
mov ecx, esi
call fcn.00475df0
mov eax, dword [esi + 0x118]
mov ecx, dword [ebp - 0x1c]
dec eax
sub ecx, dword [ebp - 0x14]
je 0x478dc0
add edi, ecx
mov dword [ebp - 0x24], edi
cmp edi, eax
jle 0x479225
mov edi, eax
mov dword [ebp - 0x24], edi
jmp 0x479225
cmp ecx, 0x21
jne 0x478f70
push 0
lea eax, [ebp - 0x14]
mov ecx, esi
push eax
call fcn.00475df0
mov eax, dword [sym.imp.USER32.dll_SendMessageA]
push 0
push 2
push 0x115
push dword [esi + 0x20]
call eax
push 0
lea eax, [ebp - 0x1c]
mov dword [ebp - 8], 1
push eax
mov ecx, esi
call fcn.00475df0
mov ecx, dword [ebp - 0x1c]
mov eax, dword [esi + 0x11c]
sub ecx, dword [ebp - 0x14]
je 0x478dc0
add edi, ecx
mov dword [ebp - 0x24], edi
cmp edi, eax
jge 0x479225
mov edi, eax
mov dword [ebp - 0x24], edi
jmp 0x479225
cmp ecx, 0x24
jne 0x479034
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
push 0
bt ax, 0xf
mov eax, dword [esi + 0x20]
push 6
jae 0x478fbd
mov ebx, dword [sym.imp.USER32.dll_SendMessageA]
push 0x115
push eax
call ebx
push 0
push 6
push 0x114
push dword [esi + 0x20]
call ebx
mov edi, dword [esi + 0x11c]
mov dword [ebp - 8], 1
mov dword [ebp - 0x24], edi
jmp 0x478fca
push 0x114
push eax
mov eax, dword [sym.imp.USER32.dll_SendMessageA]
call eax
mov eax, dword [esi + 0x120]
mov ebx, dword [esi + 0x124]
dec eax
mov dword [ebp - 0x20], ebx
mov dword [ebp - 4], 1
cmp ebx, eax
jge 0x479000
push ebx
mov ecx, esi
call fcn.004750e0
test eax, eax
jg 0x479000
mov eax, dword [esi + 0x120]
inc ebx
dec eax
mov dword [ebp - 0x20], ebx
cmp ebx, eax
jl 0x478fe5
mov eax, dword [esi + 0x118]
dec eax
cmp edi, eax
jge 0x479225
nop
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x479225
mov eax, dword [esi + 0x118]
inc edi
dec eax
mov dword [ebp - 0x24], edi
cmp edi, eax
jl 0x479010
jmp 0x479225
cmp ecx, 0x23
jne 0x479104
push 0x11
call dword [sym.imp.USER32.dll_GetKeyState]
push 0
bt ax, 0xf
mov eax, dword [esi + 0x20]
push 7
jae 0x479082
mov ebx, dword [sym.imp.USER32.dll_SendMessageA]
push 0x115
push eax
call ebx
push 0
push 7
push 0x114
push dword [esi + 0x20]
call ebx
mov edi, dword [esi + 0x118]
dec edi
mov dword [ebp - 8], 1
mov dword [ebp - 0x24], edi
jmp 0x47908f
push 0x114
push eax
mov eax, dword [sym.imp.USER32.dll_SendMessageA]
call eax
mov ebx, dword [esi + 0x120]
mov eax, dword [esi + 0x124]
dec ebx
inc eax
mov dword [ebp - 0x20], ebx
mov dword [ebp - 4], 1
cmp ebx, eax
jle 0x4790cb
nop dword [eax + eax]
push ebx
mov ecx, esi
call fcn.004750e0
test eax, eax
jg 0x4790cb
mov eax, dword [esi + 0x124]
dec ebx
inc eax
mov dword [ebp - 0x20], ebx
cmp ebx, eax
jg 0x4790b0
mov eax, dword [esi + 0x11c]
inc eax
cmp edi, eax
jle 0x479225
nop word [eax + eax]
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x479225
mov eax, dword [esi + 0x11c]
dec edi
inc eax
mov dword [ebp - 0x24], edi
cmp edi, eax
jg 0x4790e0
jmp 0x479225
cmp ecx, 0x71
jne 0x478d1e
mov eax, dword [esi]
mov ecx, esi
push 1
push 0xffffffffffffffff
push 0xffffffffffffffff
push dword [esi + 0x2cc]
push dword [esi + 0x2c8]
call dword [eax + 0x1c8]
jmp 0x479225
mov dword [ebp - 0x10], 1
mov ebx, dword [esi + 0x120]
dec ebx
mov dword [ebp - 0xc], 1
mov dword [ebp - 0x20], ebx
jmp 0x47914f
mov ecx, esi
call sub.mfc140.dll_Ordinal_3825
cmp ebx, dword [esi + 0x124]
jl 0x479173
push ebx
mov ecx, esi
call fcn.004750e0
test eax, eax
jg 0x479225
dec ebx
mov dword [ebp - 0x20], ebx
cmp ebx, dword [esi + 0x124]
jge 0x479157
cmp dword [ebp - 0x10], 0
jne 0x479225
mov ebx, dword [ebp - 0x18]
jmp 0x479222
mov ecx, dword [ebp + 8]
mov dword [ebp - 0x10], 0
mov eax, ebx
mov dword [ebp - 0x18], eax
lea ebx, [eax + 1]
mov dword [ebp - 0x20], ebx
cmp ecx, 9
jne 0x4791fa
cmp ebx, dword [esi + 0x120]
jne 0x4791f3
mov ecx, dword [esi + 0x118]
lea eax, [ecx - 1]
cmp edi, eax
jge 0x4791f3
inc edi
mov dword [ebp - 0x24], edi
cmp edi, ecx
jge 0x4791e1
nop dword [eax]
push edi
mov ecx, esi
call fcn.00475b90
test eax, eax
jg 0x4791da
inc edi
mov dword [ebp - 0x24], edi
cmp edi, dword [esi + 0x118]
jl 0x4791c0
jmp 0x4791e1
mov dword [ebp - 0x10], 1
mov ebx, dword [esi + 0x124]
mov dword [ebp - 0x20], ebx
mov dword [ebp - 0xc], 1
jmp 0x4791fa
mov ecx, esi
call sub.mfc140.dll_Ordinal_3825
cmp ebx, dword [esi + 0x120]
jge 0x47921a
push ebx
mov ecx, esi
call fcn.004750e0
test eax, eax
jg 0x479225
inc ebx
mov dword [ebp - 0x20], ebx
cmp ebx, dword [esi + 0x120]
jl 0x479202
cmp dword [ebp - 0x10], 0
cmove ebx, dword [ebp - 0x18]
mov dword [ebp - 0x20], ebx
cmp edi, dword [esi + 0x2c8]
jne 0x479239
cmp ebx, dword [esi + 0x2cc]
je 0x478d25
cmp dword [esi + 0x29c], 0
jne 0x4792ac
lea ecx, [esi + 0x30c]
call fcn.0047cfa0
mov eax, dword [esi + 0xc4]
neg eax
push 0x10
sbb eax, eax
add eax, 4
mov dword [esi + 0x29c], eax
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
jae 0x479275
cmp dword [ebp + 8], 9
jne 0x479281
mov dword [esi + 0x2c0], edi
mov dword [esi + 0x2c4], ebx
push 0xffffffffffffff9c
push ebx
push edi
mov ecx, esi
call fcn.0047d890
lea eax, [ebp - 0x24]
mov ecx, esi
push eax
call fcn.0047b070
push 0xffffffffffffff9b
push ebx
push edi
mov ecx, esi
call fcn.0047d890
mov dword [esi + 0x29c], 0
push ebx
push edi
lea eax, [ebp - 0x24]
mov ecx, esi
push eax
call fcn.0047e2f0
push ebx
push edi
mov ecx, esi
call fcn.00476e60
test eax, eax
jne 0x4793c2
mov eax, dword [ebp + 8]
add eax, 0xfffffff7
cmp eax, 0x1f
ja case.0x4792e0.10
movzx eax, byte [eax + 0x479478]
jmp dword [eax*4 + 0x479460]
push 0
push 1
push 0x114
push dword [esi + 0x20]
jmp 0x47939f
push 0
push 0
push 0x114
push dword [esi + 0x20]
jmp 0x47939f
push 0
push 1
push 0x115
push dword [esi + 0x20]
call dword [sym.imp.USER32.dll_SendMessageA]
mov dword [ebp - 8], 1
jmp case.0x4792e0.10
push 0
push 0
jmp 0x47930d
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
bt ax, 0xf
mov eax, dword [esi + 0x20]
push 0
jae 0x47936f
cmp dword [ebp - 0xc], 0
push 0
je 0x479399
push 0x115
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
push 1
push dword [esi + 0x154]
mov ecx, esi
mov dword [ebp - 8], 1
push 0
call fcn.0047efe0
jmp case.0x4792e0.10
cmp dword [ebp - 0xc], 0
push 1
je 0x479399
push 0x115
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
push 1
push 0
push 0
mov ecx, esi
mov dword [ebp - 8], 1
call fcn.0047efe0
jmp case.0x4792e0.10
push 0x114
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
mov dword [ebp - 4], 1
push ebx
push edi
mov ecx, esi
call fcn.00473cc0
push 1
push 0
push dword [esi + 0x20]
call dword [sym.imp.USER32.dll_InvalidateRect]
push ebx
push edi
mov ecx, esi
call fcn.00473cc0
cmp dword [ebp - 4], 0
mov ebx, dword [sym.imp.USER32.dll_SendMessageA]
je 0x4793e5
push 0
push 8
push 0x114
push dword [esi + 0x20]
call ebx
cmp dword [ebp - 8], 0
je 0x478d25
push 0
push 8
push 0x115
push dword [esi + 0x20]
call ebx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0xc