Function at 0x416a00
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x308
push ebx
push ebp
push esi
mov esi, dword [esp + 0x318]
mov al, byte [esi]
push edi
xor edi, edi
test al, al
mov dword [esp + 0x10], edi
je 0x416a47
movsx eax, byte [esi]
push eax
call fcn.00451f5f
add esp, 4
test eax, eax
je 0x416a32
add esi, 2
jmp 0x416a38
cmp byte [esi], 0x5c
je 0x416a3f
inc esi
cmp byte [esi], 0
jne 0x416a1d
jmp 0x416a47
mov dword [esp + 0x10], 1
mov eax, dword [esp + 0x320]
xor ebp, ebp
cmp eax, 0x80000000
jne 0x416a5c
mov ebp, 1
mov al, byte [0x491a20]
test al, al
mov ebx, dword [sym.imp.kernel32.dll_CreateFileA]
mov dword [esp + 0x14], edi
je 0x416aff
cmp dword [esp + 0x10], edi
jne 0x416aff
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x491a20
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x31c]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
shr ecx, 2
dec edi
rep movsd dword es:[edi], dword [esi]
push eax
push 0x8000127
push 3
push eax
mov eax, dword [esp + 0x330]
mov ecx, edx
and ecx, 3
push ebp
rep movsb byte es:[edi], byte [esi]
push eax
lea ecx, [esp + 0x30]
push ecx
call ebx
mov edx, eax
cmp edx, 0xffffffff
jne 0x416c1d
mov dword [esp + 0x14], 1
mov al, byte [0x49b020]
test al, al
je 0x416b8e
mov eax, dword [esp + 0x10]
test eax, eax
jne 0x416b8e
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x49b020
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x31c]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
shr ecx, 2
dec edi
rep movsd dword es:[edi], dword [esi]
push eax
push 0x8000127
push 3
push eax
mov eax, dword [esp + 0x330]
mov ecx, edx
and ecx, 3
push ebp
rep movsb byte es:[edi], byte [esi]
push eax
lea ecx, [esp + 0x30]
push ecx
call ebx
mov edx, eax
cmp edx, 0xffffffff
jne 0x416c1d
mov al, byte [0x482100]
test al, al
je 0x416c35
mov eax, dword [esp + 0x10]
test eax, eax
jne 0x416c35
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x482100
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x31c]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
shr ecx, 2
dec edi
rep movsd dword es:[edi], dword [esi]
push eax
push 0x8000127
push 3
push eax
mov eax, dword [esp + 0x330]
mov ecx, edx
and ecx, 3
push ebp
rep movsb byte es:[edi], byte [esi]
push eax
lea ecx, [esp + 0x30]
push ecx
call ebx
mov edx, eax
cmp edx, 0xffffffff
je 0x416c35
mov ebx, dword [esp + 0x328]
test ebx, ebx
je 0x416eab
lea edi, [esp + 0x18]
jmp 0x416e8e
mov ecx, dword [esp + 0x320]
mov edi, dword [esp + 0x31c]
push 0
push 0x8000127
push 3
push 0
push ebp
push ecx
push edi
call ebx
mov edx, eax
cmp edx, 0xffffffff
jne 0x416e83
mov eax, dword [esp + 0x14]
test eax, eax
je 0x416e83
mov eax, dword [esp + 0x324]
test eax, eax
je 0x416e83
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x467bf4
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
lea edx, [esp + 0x118]
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x467cf8
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
lea edx, [esp + 0x218]
mov esi, edi
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x118]
lea edx, [esp + 0x218]
push 1
mov dword [0x50872c], 0x491a20
mov dword [0x508724], 0x104
mov dword [0x508730], ecx
mov dword [0x508728], edx
call fcn.0042dc60
add esp, 4
push 1
xor edi, edi
push edi
mov dword [0x4670c0], 1
call sub.user32.dll_WINNLSEnableIME
mov eax, dword [0x468628]
mov ecx, dword [0x493e10]
push edi
push 0x40a2f0
push eax
push 0x6e
push ecx
mov dword [0x4670c0], edi
call dword [sym.imp.user32.dll_DialogBoxParamA]
push edi
push edi
call sub.user32.dll_WINNLSEnableIME
call fcn.0042dca0
mov edx, dword [0x460854]
mov esi, dword [sym.imp.user32.dll_GetAsyncKeyState]
push edx
call esi
test ax, ax
je 0x416d65
mov eax, dword [0x460854]
push eax
call esi
test ax, ax
jne 0x416d58
mov dword [0x4670c4], edi
call fcn.00420b70
push 0xd
call fcn.0042dc60
mov eax, dword [0x508734]
add esp, 4
cmp eax, edi
je 0x416e49
push 0x491a20
call fcn.0042d950
mov edx, dword [0x493e10]
add esp, 4
push 0x100
lea ecx, [esp + 0x1c]
push ecx
push 0xf
push edx
call dword [sym.imp.user32.dll_LoadStringA]
test eax, eax
je 0x416dca
cmp byte [esp + 0x18], 0x20
jl 0x416dca
lea eax, [esp + 0x18]
push 0x491a20
push eax
call fcn.00426ad0
add esp, 8
or ecx, 0xffffffff
xor eax, eax
mov edi, 0x491a20
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
shr ecx, 2
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x31c]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
lea edx, [esp + 0x18]
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
shr ecx, 2
dec edi
rep movsd dword es:[edi], dword [esi]
push eax
push 0x8000127
push 3
push eax
mov eax, dword [esp + 0x330]
mov ecx, edx
and ecx, 3
push ebp
rep movsb byte es:[edi], byte [esi]
push eax
lea ecx, [esp + 0x30]
push ecx
call ebx
mov edx, eax
cmp edx, 0xffffffff
jne 0x416c1d
jmp 0x416c79
mov edx, dword [esp + 0x328]
cmp edx, edi
je 0x416e75
or ecx, 0xffffffff
xor eax, eax
lea edi, [esp + 0x18]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
shr ecx, 2
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
pop edi
pop esi
pop ebp
or eax, 0xffffffff
pop ebx
add esp, 0x308
ret
mov ebx, dword [esp + 0x328]
test ebx, ebx
je 0x416eab
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
shr ecx, 2
mov edi, ebx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
pop edi
pop esi
pop ebp
mov eax, edx
pop ebx
add esp, 0x308
ret