Function at 0x40c6d0
Capabilities:
Check for time delay via gettickcount
Get keyboard layout
Log keystrokes
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x8c
push ebx
push esi
push edi
mov edi, dword [ebp + 8]
cmp byte [edi], 0
je 0x40d927
mov bl, byte [ebp + 0xc]
mov esi, dword [0x49d3c8]
mov dword [ebp - 0x40], esi
test bl, bl
jne 0x40c76d
push 7
push str.Blind
push edi
call fcn.00477695
add esp, 0xc
test eax, eax
jne 0x40c76d
add edi, 7
mov byte [0x49f956], 1
mov dword [ebp + 8], edi
mov eax, dword [esi + 0x5c]
mov ecx, dword [esi + 0x64]
mov dword [ebp - 0x54], eax
mov eax, dword [ebp + 0x10]
mov dword [ebp - 0x58], ecx
cmp eax, 1
je 0x40c732
cmp eax, 3
jne 0x40c7a3
cmp dword [0x4a3304], 0
je 0x40c779
call fcn.00408480
test al, al
jne 0x40c776
test bl, bl
jne 0x40c764
call fcn.004084e0
test al, al
je 0x40c764
push str.Click
mov eax, edi
call fcn.00464370
add esp, 4
test eax, eax
jne 0x40c776
mov dword [ebp + 0x10], 1
jmp 0x40c7a3
mov byte [0x49f956], 0
jmp 0x40c719
mov eax, dword [ebp + 0x10]
cmp eax, 3
jne 0x40c787
mov dword [ebp + 0x10], 2
jmp 0x40c7a3
xor eax, eax
mov dword [ebp + 0x10], eax
cmp dword [esi + 0x5c], eax
jge 0x40c799
cmp dword [esi + 0x64], eax
jge 0x40c799
or eax, 0xffffffff
mov dword [esi + 0x64], eax
mov dword [esi + 0x5c], 0xffffffff
mov esi, dword [ebp + 0x14]
xor ebx, ebx
mov byte [ebp - 0x11], 0
test esi, esi
je 0x40c7fb
push ebx
push esi
call dword [sym.imp.USER32.dll_GetWindowThreadProcessId]
mov edi, eax
mov dword [ebp - 0x5c], edi
test edi, edi
je 0x40c8f7
cmp edi, dword [0x4a2bbc]
je 0x40c8f7
call fcn.00468640
test al, al
jne 0x40c8f7
mov edx, dword [0x4a2bbc]
push 1
push edi
push edx
call dword [sym.imp.USER32.dll_AttachThreadInput]
test eax, eax
setne byte [ebp - 0x11]
mov ebx, edi
jmp 0x40c8f7
test byte [0x4a30c9], 0xc0
je 0x40c8e2
call dword [sym.imp.KERNEL32.dll_GetTickCount]
sub eax, dword [0x4a30c0]
cmp eax, 0x32
jae 0x40c8e2
xor esi, esi
cmp dword [ebp + 0x10], esi
jne 0x40c8e2
cmp byte [0x49f956], bl
jne 0x40c8e2
cmp byte [0x4a32ee], bl
je 0x40c8e2
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
cmp eax, dword [0x4a2bbc]
jne 0x40c8e2
mov eax, dword [ebp + 8]
mov edi, 0x491a94
call fcn.00408bf0
cmp byte [ebp + 0xc], bl
je 0x40c8b3
test eax, eax
setne al
test al, al
je 0x40c8e2
lea ecx, [ecx]
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push 0x5b
call edi
mov ecx, 0x8000
test cx, ax
jne 0x40c892
push 0x5c
call edi
mov edx, 0x8000
test dx, ax
je 0x40c8e2
push 1
push 0x8000012f
mov dword [0x49d328], esi
call fcn.00401340
add esp, 8
mov dword [0x49d328], 1
jmp 0x40c870
cmp eax, esi
je 0x40c8e2
jmp 0x40c8c0
inc eax
mov edi, 0x491a98
call fcn.00408bf0
cmp eax, esi
je 0x40c870
cmp byte [eax], 0x7b
je 0x40c870
mov edi, 0x491a94
call fcn.00408bf0
cmp eax, esi
jne 0x40c8c0
call dword [sym.imp.USER32.dll_GetForegroundWindow]
test eax, eax
je 0x40c8f7
push 0
push eax
call dword [sym.imp.USER32.dll_GetWindowThreadProcessId]
mov ebx, eax
push ebx
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
mov dword [0x49f97c], eax
push eax
xor eax, eax
call fcn.00410d50
add esp, 4
push 1
mov dword [0x49f978], eax
call fcn.00410850
add esp, 4
cmp dword [0x4a0b68], 0
mov bl, al
mov byte [ebp - 4], bl
je 0x40c947
mov cl, byte [0x4a0a35]
mov dl, byte [0x4a0a37]
mov al, cl
not cl
and al, dl
and cl, dl
mov byte [ebp - 3], dl
mov byte [ebp - 9], cl
jmp 0x40c972
call dword [sym.imp.KERNEL32.dll_GetTickCount]
sub eax, dword [0x4a30c0]
cmp eax, dword [0x49d320]
jae 0x40c967
mov al, byte [0x4a30c9]
and al, bl
mov byte [ebp - 3], al
jmp 0x40c96e
mov byte [ebp - 3], 0
mov al, byte [ebp - 3]
mov byte [ebp - 9], 0
mov cl, byte [0x4a14ef]
not al
and al, bl
and cl, al
mov al, byte [0x49f956]
mov byte [0x4a14ef], cl
test al, al
je 0x40c999
not cl
and cl, bl
mov byte [ebp - 2], cl
mov byte [ebp - 8], bl
jmp 0x40c9a0
mov byte [ebp - 2], 0
mov byte [ebp - 8], cl
mov ecx, dword [ebp - 0x40]
cmp byte [ecx + 0xca], 0
je 0x40ca79
test al, al
jne 0x40ca79
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x14
call esi
and al, 1
movsx edi, al
neg edi
sbb edi, edi
add edi, 2
cmp edi, 2
jne 0x40c9db
mov dword [ebp - 0x44], edi
jmp 0x40ca80
push 0xffc3d44d
push 0
push 0
push 0
push 0x14
push 2
call fcn.0040e2a0
add esp, 0x18
push 0
call dword [sym.imp.USER32.dll_GetForegroundWindow]
push eax
call dword [sym.imp.USER32.dll_GetWindowThreadProcessId]
cmp eax, dword [0x4a2bbc]
sete bl
test bl, bl
je 0x40ca2e
push 1
push 0xffffffffffffffff
mov dword [0x49d328], 0
call fcn.00401340
add esp, 8
mov dword [0x49d328], 1
push 0x14
call esi
test al, 1
je 0x40ca71
push 0xffc3d44d
push 0
push 0
push 0
push 0x10
push 2
call fcn.0040e2a0
add esp, 0x18
test bl, bl
je 0x40ca71
push 1
push 0xffffffffffffffff
mov dword [0x49d328], 0
call fcn.00401340
add esp, 8
mov dword [0x49d328], 1
mov bl, byte [ebp - 4]
mov dword [ebp - 0x44], edi
jmp 0x40ca80
mov dword [ebp - 0x44], 0
mov esi, dword [ebp + 0x10]
mov dword [0x4a2500], esi
test esi, esi
je 0x40caf2
cmp esi, 1
jne 0x40caa3
mov eax, 0x36b0
mov dword [0x49f96c], 0x1f4
jmp 0x40cab2
mov eax, 0x2ee0
mov dword [0x49f96c], 0x5dc
call fcn.004854f0
mov eax, esp
mov dword [0x49f974], eax
mov eax, SysReAllocString
mov byte [0x49f95e], bl
mov dword [0x49f960], eax
mov dword [0x49f964], eax
mov byte [0x49f95d], 0
mov dword [0x49f970], 0
mov byte [0x49f95c], 0
mov byte [0x49f957], 1
mov eax, dword [0x49d3d8]
mov dl, byte [0x4a14b2]
mov byte [ebp - 0x29], dl
cmp eax, 8
je 0x40cb0a
cmp eax, 0xa
jne 0x40cb45
test esi, esi
jne 0x40cb45
cmp dword [ebp + 0x14], esi
jne 0x40cb45
test byte [0x4a3b94], 1
mov byte [ebp - 4], 1
jne 0x40cb4b
or dword [0x4a3b94], 1
push str.BlockInput
push str.user32
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [0x4a3b90], eax
jmp 0x40cb50
mov byte [ebp - 4], 0
jmp 0x40cb5f
mov eax, dword [0x4a3b90]
test eax, eax
je 0x40cb58
push 1
call eax
mov byte [0x4a14b2], 1
mov eax, dword [ebp + 8]
mov byte [ebp - 0xf], 0
cmp byte [eax], 0
mov byte [ebp - 1], 0
je 0x40d4a7
mov bl, byte [ebp - 8]
cmp dword [0x4a2500], 0
mov byte [ebp - 0xa], 0
jne 0x40cbdf
mov esi, dword [sym.imp.KERNEL32.dll_GetTickCount]
call esi
sub eax, dword [0x4a3104]
mov ecx, dword [0x49d3c8]
cmp eax, dword [ecx + 0xb0]
jbe 0x40cbdf
push 0
push 0
push 0
push 0
lea edx, [ebp - 0x88]
push edx
call dword [sym.imp.USER32.dll_PeekMessageA]
test eax, eax
je 0x40cbd8
push 1
push 0xffffffffffffffff
invalid
invalid
sub bl, dl