Function at 0x477d60
Capabilities:
Log keystrokes
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x160
mov eax, dword [0x6398ac]
xor eax, ebp
mov dword [ebp - 4], eax
cmp byte [0x6693d0], 0
xorps xmm0, xmm0
mov eax, dword [ebp + 0x18]
push esi
mov esi, dword [ebp + 0xc]
mov dword [ebp - 0x120], eax
movups xmmword [ebp - 0x14], xmm0
je 0x478035
cmp byte [ebp + 0x10], 0
push edi
je 0x477daa
push esi
call fcn.00478180
mov edi, eax
add esp, 4
test edi, edi
jne 0x477dc3
cmp esi, 0x10
jne 0x477dbc
push 3
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_MapVirtualKeyW]
mov esi, eax
movzx edi, byte [esi + 0x5c3210]
push ebx
push 1
push edi
call fcn.00478320
add esp, 8
mov ebx, 1
cmp byte [ebp + 0x14], 0
je 0x477e0f
mov ecx, edi
and ecx, 0x8000001f
jns 0x477de9
dec ecx
or ecx, 0xffffffe0
inc ecx
mov eax, edi
cdq
and edx, 0x1f
add eax, edx
mov edx, ebx
sar eax, 5
shl edx, cl
mov dword [ebp - 0x11c], eax
test dword [eax*4 + 0x66945c], edx
je 0x477e0f
mov byte [ebp - 0x115], bl
jmp 0x477e36
mov eax, edi
mov byte [ebp - 0x115], 0
cdq
mov ecx, edi
and edx, 0x1f
add eax, edx
sar eax, 5
mov dword [ebp - 0x11c], eax
and ecx, 0x8000001f
jns 0x477e36
dec ecx
or ecx, 0xffffffe0
inc ecx
mov eax, dword [eax*4 + 0x66945c]
bts eax, ecx
mov ecx, dword [ebp - 0x11c]
push 0x6693d8
mov dword [ecx*4 + 0x66945c], eax
call fcn.0044d4e0
add esp, 4
test al, al
je 0x478033
mov dword [ebp - 0x160], 0xa
call fcn.0042c220
mov eax, dword [ebp - 0x120]
fstp qword [ebp - 0x158]
mov dword [ebp - 0x150], eax
mov dword [ebp - 0x14c], edi
mov dword [ebp - 0x148], 0
call fcn.00478430
mov eax, dword [0x66947c]
push 0x6693d8
mov dword [ebp - 0x144], eax
mov byte [ebp - 0x140], 0
call fcn.0044d4c0
add esp, 4
test edi, edi
jle 0x477ed8
cmp byte [ebp - 0x115], 0
jne 0x477ed8
lea eax, [ebp - 0x160]
push eax
push 0x6693d8
call fcn.0044d400
add esp, 8
cmp edi, 0xd7
jge 0x477fd4
lea eax, [ebp - 0x114]
push eax
call dword [sym.imp.USER32.dll_GetKeyboardState]
test eax, eax
setne cl
test eax, eax
je 0x477f1c
mov al, byte [ebp - 0x103]
test al, al
je 0x477f1c
test byte [0x66947c], 2
mov edx, 0
movzx eax, al
cmovne eax, edx
mov byte [ebp - 0x103], al
push 0
push 8
lea eax, [ebp - 0x14]
xor edx, edx
push eax
test cl, cl
lea eax, [ebp - 0x114]
cmove eax, edx
push eax
push dword [ebp + 8]
push esi
call dword [sym.imp.USER32.dll_ToUnicode]
test eax, eax
jne 0x477f76
cmp esi, 0x2e
jne 0x477f7b
mov eax, 0x7f
mov dword [ebp - 0x160], 0xb
mov word [ebp - 0x14], ax
call fcn.00478430
mov eax, dword [0x66947c]
mov dword [ebp - 0x144], eax
mov al, byte [ebp - 0x115]
mov byte [ebp - 0x140], al
jmp 0x477faa
cmp eax, 0xffffffff
je 0x477fd4
test eax, eax
mov dword [ebp - 0x160], 0xb
cmovne ebx, eax
call fcn.00478430
mov eax, dword [0x66947c]
mov dword [ebp - 0x144], eax
mov al, byte [ebp - 0x115]
mov byte [ebp - 0x140], al
test ebx, ebx
jle 0x477fd4
xor esi, esi
nop dword [eax]
movzx eax, word [ebp + esi*2 - 0x14]
mov dword [ebp - 0x148], eax
lea eax, [ebp - 0x160]
push eax
push 0x6693d8
call fcn.0044d400
inc esi
add esp, 8
cmp esi, ebx
jl 0x477fb0
push 0x6693d8
call fcn.0044d550
add esp, 4
test edi, edi
je 0x478033
cmp byte [ebp + 0x14], 0
jne 0x478033
call fcn.0042c210
mov ecx, dword [eax + 0x28]
test ecx, ecx
je 0x478033
cmp edi, ecx
jne 0x478033
mov ecx, dword [eax + 0x2c]
and ecx, dword [0x66947c]
cmp ecx, dword [eax + 0x2c]
jne 0x478033
mov ecx, dword [ebp - 0x120]
cmp dword [eax + 0x24], ecx
jne 0x47802a
call fcn.0042fb40
pop ebx
pop edi
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.0057fc8e
mov esp, ebp
pop ebp
ret
push ecx
call fcn.0042fa80
add esp, 4
pop ebx
pop edi
mov ecx, dword [ebp - 4]
xor ecx, ebp
pop esi
call fcn.0057fc8e
mov esp, ebp
pop ebp
ret