Function at 0x40d2e0
Capabilities:
Check for time delay via gettickcount
Log keystrokes
Log keystrokes via polling
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x5c
push ebp
mov ebp, dword [esp + 0x64]
test ebp, ebp
je 0x40dd17
cmp byte [ebp], 0
je 0x40dd17
push ebx
push esi
push edi
push 1
call fcn.0040a080
mov bl, al
mov eax, dword [0x45d800]
add esp, 4
test eax, eax
je 0x40d332
mov dl, byte [0x45d6fc]
mov cl, byte [0x45d6fe]
mov al, dl
not al
and al, cl
mov byte [esp + 0x13], al
mov al, dl
and al, cl
mov byte [esp + 0x12], al
jmp 0x40d35e
mov byte [esp + 0x13], 0
call dword [sym.imp.KERNEL32.DLL_GetTickCount]
mov edx, dword [0x45eef0]
mov ecx, dword [0x45b050]
sub eax, edx
cmp eax, ecx
jae 0x40d358
mov al, byte [0x45eef9]
and al, bl
jmp 0x40d35a
xor al, al
mov byte [esp + 0x12], al
mov cl, byte [0x45d6ff]
not al
and al, bl
and cl, al
xor eax, eax
test cl, 0xc0
mov byte [0x45d6ff], cl
je 0x40d37c
mov eax, 8
test cl, 0xc
je 0x40d384
or eax, 1
test cl, 0x30
je 0x40d38c
or eax, 4
test cl, 3
je 0x40d394
or eax, 2
mov ebx, dword [esp + 0x78]
test ebx, ebx
mov dword [esp + 0x28], eax
mov byte [esp + 0x14], 0
je 0x40d3ec
call dword [sym.imp.KERNEL32.DLL_GetCurrentThreadId]
push 0
mov edi, eax
push ebx
mov dword [esp + 0x54], edi
call dword [sym.imp.USER32.dll_GetWindowThreadProcessId]
mov esi, eax
test esi, esi
mov dword [esp + 0x48], esi
je 0x40d3ec
cmp esi, edi
je 0x40d3ec
push ebx
call fcn.004407a0
add esp, 4
test al, al
jne 0x40d3ec
push 1
push esi
push edi
call dword [sym.imp.USER32.dll_AttachThreadInput]
test eax, eax
setne al
test al, al
mov byte [esp + 0x14], al
jne 0x40d3ff
mov al, byte [0x45f111]
test al, al
je 0x40d3ff
mov dword [esp + 0x3c], 0
jmp 0x40d443
mov al, byte [0x45d62a]
test al, al
je 0x40d43d
push 0x14
call dword [sym.imp.USER32.dll_GetKeyState]
and al, 1
neg al
sbb eax, eax
add eax, 2
mov esi, eax
cmp esi, 2
jne 0x40d422
jmp 0x40d43f
push 0xffc3d44d
push 0
push 0
push 0
push 0x14
push 2
call fcn.0040aeb0
add esp, 0x18
mov eax, esi
jmp 0x40d43f
xor eax, eax
mov dword [esp + 0x3c], eax
mov al, byte [0x45df61]
mov byte [esp + 0x17], al
mov eax, dword [0x45b0ec]
cmp eax, 8
je 0x40d45f
cmp eax, 0xa
jne 0x40d526
test ebx, ebx
jne 0x40d526
mov al, byte [0x45f113]
test al, al
je 0x40d526
push 1
mov byte [esp + 0x19], 1
call fcn.004154f0
add esp, 4
cmp byte [ebp], 0
mov dword [esp + 0x1c], 0
je 0x40d9df
mov esi, dword [sym.imp.KERNEL32.DLL_GetTickCount]
call esi
sub eax, dword [0x45ef34]
cmp eax, 5
jbe 0x40d4e0
push 0
push 0
push 0
push 0
lea ecx, [esp + 0x60]
push ecx
call dword [sym.imp.USER32.dll_PeekMessageA]
test eax, eax
je 0x40d4d9
push 0
push 0xffffffffffffffff
mov byte [0x45b056], 0
call fcn.00401650
add esp, 8
mov byte [0x45b056], 1
call esi
mov dword [0x45ef34], eax
mov al, byte [esp + 0x74]
test al, al
mov esi, dword [esp + 0x70]
jne 0x40d94f
movsx edx, byte [esi]
push edx
push str._
call fcn.00443dd0
add esp, 8
test eax, eax
je 0x40d94f
movsx eax, byte [esi]
add eax, 0xffffffdf
cmp eax, 0x5a
ja case.0x40d51f.34
movzx eax, byte [eax + 0x40dd34]
jmp dword [eax*4 + 0x40dd1c]
mov byte [esp + 0x15], 0
jmp 0x40d483
test byte [esp + 0x28], 2
jne case.0x40d51f.34
or dword [esp + 0x1c], 2
jmp case.0x40d51f.34
test byte [esp + 0x28], 4
jne case.0x40d51f.34
or dword [esp + 0x1c], 4
jmp case.0x40d51f.34
test byte [esp + 0x28], 1
jne case.0x40d51f.34
or dword [esp + 0x1c], 1
jmp case.0x40d51f.34
mov al, byte [0x45ef17]
test al, al
jne case.0x40d51f.34
test byte [esp + 0x28], 8
jne case.0x40d51f.34
or dword [esp + 0x1c], 8
jmp case.0x40d51f.34
mov ebx, dword [esp + 0x70]
inc ebx
push 0x7d
push ebx
mov dword [esp + 0x48], ebx
call fcn.00443dd0
mov edi, eax
add esp, 8
test edi, edi
mov dword [esp + 0x20], edi
je case.0x40d51f.34
sub eax, dword [esp + 0x70]
dec eax
mov dword [esp + 0x38], eax
jne 0x40d5d5
cmp byte [edi + 1], 0x7d
jne case.0x40d51f.34
inc edi
mov dword [esp + 0x20], edi
mov dword [esp + 0x38], 1
mov ebp, dword [esp + 0x38]
push 0x451538
push ebx
mov byte [edi], 0
mov dword [esp + 0x2c], 1
mov dword [esp + 0x34], 2
call fcn.00409fc0
mov esi, eax
add esp, 8
test esi, esi
je 0x40d68d
mov cl, byte [esi]
mov byte [esp + 0x16], cl
mov ecx, dword [esp + 0x70]
mov ebp, esi
lea edx, [esi + 1]
sub ebp, ecx
push edx
mov byte [esi], 0
dec ebp
call fcn.00407b30
mov edi, eax
mov eax, dword [esp + 0x24]
add esp, 4
sub eax, edi
je 0x40d689
push str.down
push edi
call fcn.0044e5aa
add esp, 8
test eax, eax
jne 0x40d644
mov dword [esp + 0x2c], eax
jmp 0x40d689
push 0x45152c
push edi
call fcn.0044e5aa
add esp, 8
test eax, eax
jne 0x40d660
mov dword [esp + 0x2c], 1
jmp 0x40d689
push edi
call fcn.00407b50
add esp, 4
test al, al
je 0x40d67c
push 0x10
push 0
push edi
call fcn.0044485e
add esp, 0xc
jmp 0x40d685
push edi
call fcn.00444633
add esp, 4
mov dword [esp + 0x24], eax
mov edi, dword [esp + 0x20]
push 1
lea ecx, [esp + 0x20]
push ecx
push ebx
call fcn.0040aa90
add esp, 0xc
test al, al
mov byte [esp + 0x34], al
je 0x40d6b2
mov dword [esp + 0x30], 0
jmp 0x40d748
push ebx
call fcn.0040aa00
add esp, 4
test eax, eax
mov dword [esp + 0x30], eax
jne 0x40d748
movsx edx, byte [ebx]
push edx
call fcn.00443ce6
add esp, 4
cmp eax, 0x56
jne 0x40d748
mov eax, dword [esp + 0x70]
movsx ecx, byte [eax + 2]
push ecx
call fcn.00443ce6
add esp, 4
cmp eax, 0x4b
jne 0x40d748
mov ebx, dword [esp + 0x70]
add ebx, 3
push 0x451528
push ebx
call fcn.00409fc0
mov edi, eax
add esp, 8
test edi, edi
je 0x40d72f
movsx edx, byte [edi + 1]
push edx
call fcn.00443ce6
add esp, 4
cmp eax, 0x43
jne 0x40d72f
push 0x10
push 0
add edi, 2
push edi
call fcn.0044485e
add esp, 0xc
mov dword [esp + 0x30], eax
push 0x10
push 0
push ebx
call fcn.0044485e
mov ebx, dword [esp + 0x4c]
mov edi, dword [esp + 0x2c]
add esp, 0xc
mov byte [esp + 0x34], al
test esi, esi
je 0x40d752
mov al, byte [esp + 0x16]
mov byte [esi], al
mov al, byte [esp + 0x34]
test al, al
mov byte [edi], 0x7d
jne 0x40d8bc
mov eax, dword [esp + 0x30]
test eax, eax
jne 0x40d8bc
cmp ebp, 1
jne 0x40d7a9
mov eax, dword [esp + 0x24]
test eax, eax
je 0x40d7a0
mov ecx, dword [esp + 0x78]
mov edx, dword [esp + 0x2c]
push ecx
push edx
mov edx, dword [esp + 0x24]
push eax
xor ecx, ecx
mov cl, byte [0x45d6ff]
xor eax, eax
mov al, byte [ebx]
push ecx
push edx
push eax
call fcn.0040c9f0
add esp, 0x18
mov dword [esp + 0x70], edi
jmp 0x40d9c3
mov esi, dword [esp + 0x38]
lea ecx, [esp + 0x28]
push ecx
push 0x45d6ff
push esi
push ebx
call fcn.0040ab70
mov ecx, eax
add esp, 0x10
test ecx, ecx
je 0x40d86c
mov eax, dword [esp + 0x24]
test eax, eax
jbe 0x40d8b3
mov ebx, dword [sym.imp.KERNEL32.DLL_GetTickCount]
mov ebp, dword [esp + 0x78]
mov eax, ecx
cdq
mov esi, eax
mov eax, dword [esp + 0x24]
xor esi, edx
sub esi, edx
xor edx, edx
test ecx, ecx
setle dl
mov dword [esp + 0x70], eax
mov edi, edx
jmp 0x40d800
push 0xffc3d44d
push 1
push ebp
push 0
push esi
push edi
call fcn.0040aeb0
add esp, 0x18
call ebx
sub eax, dword [0x45ef34]
cmp eax, 5
jbe 0x40d859
push 0
push 0
push 0
push 0
lea ecx, [esp + 0x60]
push ecx
call dword [sym.imp.USER32.dll_PeekMessageA]
test eax, eax
je 0x40d852
push 0
push 0xffffffffffffffff
mov byte [0x45b056], 0
call fcn.00401650
add esp, 8
mov byte [0x45b056], 1
call ebx
mov dword [0x45ef34], eax
dec dword [esp + 0x70]
jne 0x40d800
mov edi, dword [esp + 0x20]
mov dword [esp + 0x70], edi
jmp 0x40d9c3
cmp esi, 4
jbe 0x40d8b3
push 4
push str.ASC
push ebx
call fcn.0044e5ed
add esp, 0xc
test eax, eax
jne 0x40d8b3
mov eax, dword [esp + 0x78]
test eax, eax
jne 0x40d8b3
mov edx, dword [esp + 0x70]
add edx, 4
push 0
push edx
call fcn.00407b30
add esp, 4
push eax
call fcn.0040bb40
mov eax, dword [0x45d620]
push eax
call fcn.0040a010
add esp, 0xc
mov dword [esp + 0x70], edi
jmp 0x40d9c3
mov eax, dword [esp + 0x24]
test eax, eax
je 0x40d949
mov ecx, dword [esp + 0x30]
mov edx, dword [esp + 0x34]
push 0
push ecx
push edx
call fcn.0040a2f0
add esp, 0xc
test al, al
mov byte [esp + 0x44], al
je 0x40d91a
mov ecx, dword [esp + 0x2c]
test ecx, ecx
jne 0x40d8f6
mov cl, byte [0x45d6ff]
or cl, al
jmp 0x40d907
cmp ecx, 1
jne 0x40d91a
xor ecx, ecx
mov cl, byte [0x45d6ff]
not al
and cl, al
push ecx
mov byte [0x45d6ff], cl
call fcn.0040a490
add esp, 4
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x78]
mov ecx, dword [esp + 0x44]
push eax
mov eax, dword [esp + 0x30]
push ecx
mov ecx, dword [esp + 0x2c]
push eax
xor eax, eax
mov al, byte [0x45d6ff]
push ecx
mov ecx, dword [esp + 0x2c]
push eax
mov eax, dword [esp + 0x44]
push ecx
push eax
push edx
call fcn.0040c150
add esp, 0x20
mov dword [esp + 0x70], edi
jmp 0x40d9c3
mov cl, byte [esi]
push 1
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x20]
push eax
mov byte [esp + 0x24], cl
mov byte [esp + 0x25], 0
call fcn.0040aa90
add esp, 0xc
test al, al
mov byte [esp + 0x34], al
je 0x40d9a0
mov ecx, dword [esp + 0x78]
mov eax, dword [esp + 0x1c]
push ecx
mov ecx, dword [esp + 0x38]
push 0
xor edx, edx
mov dl, byte [0x45d6ff]
push 2
push 1
push edx
push eax
push 0
push ecx
call fcn.0040c150
add esp, 0x20
jmp 0x40d9c3
mov edx, dword [esp + 0x78]
mov ecx, dword [esp + 0x1c]
push edx
xor eax, eax
mov al, byte [0x45d6ff]
push 2
xor edx, edx
mov dl, byte [esi]
push 1
push eax
push ecx
push edx
call fcn.0040c9f0
add esp, 0x18
mov dword [esp + 0x1c], 0
mov eax, dword [esp + 0x70]
mov cl, byte [eax + 1]
inc eax
test cl, cl
mov dword [esp + 0x70], eax
jne 0x40d495
mov ecx, dword [0x45d800]
test ecx, ecx
jne 0x40da18
mov eax, dword [0x45b050]
test eax, eax
jl 0x40da38
call dword [sym.imp.KERNEL32.DLL_GetTickCount]
mov edx, dword [0x45eef0]
mov ecx, dword [0x45b050]
sub eax, edx
cmp eax, ecx
jae 0x40dcb6
mov ecx, dword [0x45d800]
test ecx, ecx
je 0x40da38
mov al, byte [esp + 0x13]
mov dl, byte [0x45d6fe]
not al
and al, dl
test ecx, ecx
mov byte [esp + 0x12], al
je 0x40da38
mov al, byte [0x45d6fc]
jmp 0x40dc72
mov al, byte [0x45f111]
xor bl, bl
test al, al
mov byte [esp + 0x70], bl
jne 0x40dade
mov al, byte [0x45f112]
test al, al
jne 0x40dade
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0xa0
call esi
test ah, ah
jns 0x40da6f
mov bl, 0x10
mov byte [esp + 0x70], bl
push 0xa1
call esi
test ah, ah
jns 0x40da81
or bl, 0x20
mov byte [esp + 0x70], bl
push 0xa2
call esi
test ah, ah
jns 0x40da93
or bl, 1
mov byte [esp + 0x70], bl
push 0xa3
call esi
test ah, ah
jns 0x40daa5
or bl, 2
mov byte [esp + 0x70], bl
push 0xa4
call esi
test ah, ah
jns 0x40dab7
or bl, 4
mov byte [esp + 0x70], bl
push 0xa5
call esi
test ah, ah
jns 0x40dac9
or bl, 8
mov byte [esp + 0x70], bl
push 0x5b
call esi
test ah, ah
jns 0x40db5c
or bl, 0x40
mov byte [esp + 0x70], bl
jmp 0x40db5c
mov edi, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push 0x10
call edi
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
movsx eax, ax
test eax, eax
js 0x40dafd
push 0x10
call esi
test ah, ah
jns 0x40db03
mov bl, 0x10
mov byte [esp + 0x70], bl
push 0x11
call edi
movsx ecx, ax
test ecx, ecx
js 0x40db16
push 0x11
call esi
test ah, ah
jns 0x40db1d
or bl, 1
mov byte [esp + 0x70], bl
push 0x12
call edi
movsx edx, ax
test edx, edx
js 0x40db30
push 0x12
call esi
test ah, ah
jns 0x40db37
or bl, 4
mov byte [esp + 0x70], bl
push 0x5b
call edi
movsx eax, ax
test eax, eax
js 0x40db4a
push 0x5b
call esi
test ah, ah
jns 0x40db51
or bl, 0x40
mov byte [esp + 0x70], bl
push 0x5c
call edi
movsx ecx, ax
test ecx, ecx
js 0x40db64
push 0x5c
call esi
test ah, ah
jns 0x40db6b
or bl, 0x80
mov byte [esp + 0x70], bl
mov eax, dword [0x45d800]
test eax, eax
je 0x40dc6c
mov al, byte [0x45d6fc]
mov cl, bl
not cl
and cl, al
je 0x40dc6c
mov bl, byte [0x45d6fd]
mov al, byte [0x45d6fe]
not cl
and bl, cl
mov byte [0x45d6fd], bl
and al, cl
mov dl, byte [0x45d6fc]
mov bl, al
shl bl, 7
mov byte [0x45d7a2], bl
mov bl, al
and bl, 0xfe
shl bl, 6
mov byte [0x45d7a3], bl
mov bl, al
and bl, 0xfc
shl bl, 5
mov byte [0x45d7a4], bl
mov bl, al
and bl, 0xf8
shl bl, 4
and dl, cl
mov byte [0x45d7a5], bl
mov bl, al
and bl, 0xc0
mov byte [0x45d6fc], dl
shl bl, 1
mov cl, al
mov dl, al
and cl, 0xf0
and dl, 0xe0
mov byte [0x45d75b], bl
shl cl, 3
mov bl, 0x80
mov byte [0x45d6fe], al
shl dl, 2
and al, bl
test cl, cl
mov byte [0x45d7a0], cl
mov byte [0x45d7a1], dl
mov byte [0x45d75c], al
jne 0x40dc28
test dl, dl
mov byte [0x45d710], cl
je 0x40dc2e
mov byte [0x45d710], bl
mov al, byte [0x45d7a2]
test al, al
jne 0x40dc47
mov al, byte [0x45d7a3]
test al, al
mov byte [0x45d711], 0
je 0x40dc4d
mov byte [0x45d711], bl
mov al, byte [0x45d7a4]
test al, al
jne 0x40dc66
mov al, byte [0x45d7a5]
test al, al
mov byte [0x45d712], 0
je 0x40dc6c
mov byte [0x45d712], bl
xor eax, eax
mov al, byte [esp + 0x70]
mov bl, byte [esp + 0x12]
mov byte [esp + 0x70], al
mov edx, dword [esp + 0x70]
not al
and al, bl
push 0xffc3d44d
push 0
push edx
push eax
call fcn.0040b6e0
mov eax, dword [0x45d800]
add esp, 0x10
test eax, eax
je 0x40dcb6
mov al, byte [0x45d6fd]
mov bl, byte [0x45d6fc]
mov cl, al
xor cl, bl
and cl, al
not cl
and al, cl
mov byte [0x45d6fd], al
cmp dword [esp + 0x3c], 1
pop edi
pop esi
pop ebx
jne 0x40dce3
push 0x14
call dword [sym.imp.USER32.dll_GetKeyState]
test al, 1
jne 0x40dce3
push 0xffc3d44d
push 0
push 0
push 0
push 0x14
push 2
call fcn.0040aeb0
add esp, 0x18
mov al, byte [esp + 8]
test al, al
je 0x40dcfd
mov edx, dword [esp + 0x3c]
mov eax, dword [esp + 0x40]
push 0
push edx
push eax
call dword [sym.imp.USER32.dll_AttachThreadInput]
mov al, byte [esp + 9]
test al, al
je 0x40dd17
mov al, byte [esp + 0xb]
test al, al
jne 0x40dd17
push 0
call fcn.004154f0
add esp, 4
pop ebp
add esp, 0x5c
ret