Function at 0x40b3b9
Capabilities:
Log keystrokes via polling

Disassembly:
mov edi, edi
push ebp
mov ebp, esp
sub esp, 0x3c
push ebx
push edi
push esi
call sub.KERNEL32.DLL_GetCurrentProcess
mov dword [ebp - 4], 1
cmp eax, dword [0x40d014]
jne 0x40b3da
not eax
shr eax, 1
call sub.KERNEL32.DLL_GetOEMCP
movsx cx, bl
push 0x40d05c
push dword [0x40e858]
call sub.gdi32.dll_RectVisible
mov edx, dword [ebp - 4]
mov dword [ebp - 4], ecx
mov dword [ebp - 4], eax
mov byte [ebp - 8], dl
sbb ebx, 1
mov dword [0x40d004], 0
mov edx, dword [0x40d004]
push 0x124
call sub.gdi32.dll_GetStockObject
mov dword [ebp - 4], edi
mov byte [ebp - 8], dl
xor ecx, edx
mov dword [ebp - 4], edx
lea eax, [ebp - 0x18]
push eax
push dword [0x40e85c]
call sub.gdi32.dll_RectVisible
push 0x402a68
push 0x402a7c
call sub.ole32.dll_IsEqualGUID
movsx di, dh
mov ch, byte [ebp - 8]
or byte [0x40d058], ch
mov bh, byte [0x40d058]
add eax, edx
mov word [ebp - 0x1c], bx
push 0x402a90
push 0x402aa0
call sub.ole32.dll_IsEqualGUID
xor dword [0x40d010], ecx
test eax, 0xcc7c3161
je 0x40b486
push 0x9e
call sub.USER32.dll_GetKeyState
call sub.ole32.dll_OleFlushClipboard
mov dword [0x40d000], ecx
mov ecx, dword [ebp - 4]
or esi, 0x204
push 0x402ab0
push dword [0x40e860]
call sub.USER32.dll_LoadCursorA
xor dword [ebp - 4], 1
mov word [ebp - 0x1c], ax
sbb dword [ebp - 4], 0xffffffff
mov word [0x40e864], 0x2ec
movsx ebx, ch
call sub.ole32.dll_OleFlushClipboard
movzx edx, dh
push 0
push 0x40d000
call sub.ole32.dll_CreateBindCtx
mov edx, dword [0x40d070]
mov word [0x40e866], si
adc dword [0x40e868], eax
push dword [0x40e86c]
call sub.USER32.dll_GetParent
or ecx, 0x284
mov esi, dword [0x40e870]
adc byte [0x40d058], ch
adc dword [ebp - 4], ebx
call fcn.0040bbdd
mov cl, byte [ebp - 8]
mov dl, byte [0x40d059]
push 0
lea eax, [ebp - 4]
push eax
call sub.ole32.dll_CreateBindCtx
mov edx, dword [ebp - 0x20]
call sub.KERNEL32.DLL_GetOEMCP
test dword [0x40d004], eax
je 0x40b538
mov esi, dword [0x40d004]
xor dword [0x40d070], edx
mov dword [ebp - 4], esi
sub di, dx
lea eax, [ebp - 0x30]
push eax
call sub.KERNEL32.DLL_GetSystemTime
adc si, si
mov esi, dword [0x40e868]
sbb esi, dword [ebp - 4]
call sub.ole32.dll_OleFlushClipboard
mov dword [0x40d000], 0x5d0d00
neg edx
push 0x402ac4
call sub.USER32.dll_CharNextA
and si, word [0x40e864]
push 0x37c
call sub.gdi32.dll_CreateSolidBrush
mov dl, byte [ebp - 0x34]
mov dword [0x40e874], edx
push 0x5b
call sub.USER32.dll_GetKeyState
mov edx, dword [0x40e878]
xor dword [0x40d010], 0xdaf6b0
mov word [ebp - 0x1c], 0xffff
push 0x402ad8
call sub.msvcrt.dll_strlen
pop ecx
mov edi, dword [0x40e87c]
call fcn.0040bdc0
cmp edi, esi
je 0x40b5d7
push 0x402ae8
push 0x402afc
call sub.ole32.dll_IsEqualGUID
mov word [0x40e864], cx
push 0x40d05c
call sub.KERNEL32.DLL_GetSystemTime
mov ecx, dword [ebp - 0x38]
call sub.KERNEL32.DLL_GetOEMCP
mov word [ebp - 0x1c], 0xb0d4
mov word [ebp - 0x1c], si
push 0x40e880
push dword [0x40e890]
call sub.gdi32.dll_RectVisible
push 7
call sub.USER32.dll_GetSysColor
mov byte [0x40d058], bl
or dword [ebp - 0x20], 1
rol edx, 1
mov word [ebp - 0x3c], 0
mov eax, dword [0x40e878]
mov word [ebp - 0x3c], 0xffff
not di
not edi
push 0x402b10
call fcn.0040bed8
pop ecx
mov word [ebp - 0x1c], dx
call fcn.0040bce2
call sub.msvcrt.dll_rand
test eax, 0xa3642322
jne 0x40b66e
call sub.msvcrt.dll_rand
push 0x402b24
push 0x402b34
call sub.ole32.dll_IsEqualGUID
mov word [ebp - 0x3c], bx
push 0x402b48
push 0x402b5c
call sub.ole32.dll_IsEqualGUID
and dword [ebp - 0x20], ebx
pop esi
pop edi
pop ebx
leave
ret