Function at 0x4bb98c
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffc4
push ebx
push esi
push edi
xor ecx, ecx
mov dword [ebp - 0x34], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 4], eax
xor eax, eax
push ebp
push 0x4bbf4d
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 4]
mov ebx, dword [eax + 0x168]
test ebx, ebx
je 0x4bbf2c
xor ecx, ecx
push ebp
push 0x4bbf13
push dword fs:[ecx]
mov dword fs:[ecx], esp
mov eax, dword [ebp - 8]
mov eax, dword [eax]
cmp eax, 0x117
jg 0x4bba00
je 0x4bba41
sub eax, 0x2b
je 0x4bbbc4
dec eax
je 0x4bbd0d
sub eax, 0x27
je 0x4bbaef
sub eax, 0xbe
je 0x4bba1e
jmp 0x4bbf09
sub eax, 0x11f
je 0x4bba63
dec eax
je 0x4bbe3a
sub eax, 0xf2
je 0x4bbe78
jmp 0x4bbf09
mov edx, dword [ebp - 8]
mov dx, word [edx + 4]
mov eax, ebx
call fcn.006277b4
test al, al
je 0x4bbf09
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf37
mov edx, dword [ebp - 8]
mov edx, dword [edx + 4]
mov eax, ebx
call fcn.006277d0
test al, al
je 0x4bbf09
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf37
xor ebx, ebx
mov eax, dword [ebp - 8]
test byte [eax + 6], 0x10
je 0x4bba70
mov bl, 1
cmp bl, 1
jne 0x4bba97
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
test eax, eax
je 0x4bba92
mov edx, dword [ebp - 8]
movzx edx, word [edx + 4]
push edx
mov edx, dword [ebp - 8]
push eax
call sub.USER32.DLL_GetSubMenu
jmp 0x4bba9e
or eax, 0xffffffff
jmp 0x4bba9e
mov eax, dword [ebp - 8]
movzx eax, word [eax + 4]
mov edx, dword [ebp - 4]
mov edx, dword [edx + 0x168]
mov ecx, ebx
xchg edx, eax
call fcn.00627714
mov ebx, eax
test ebx, ebx
je 0x4bbadc
lea edx, [ebp - 0x34]
mov eax, dword [ebx + 0x4c]
call fcn.00656bb0
mov edx, dword [ebp - 0x34]
mov eax, dword [0x7c9318]
mov eax, dword [eax]
call fcn.0064c608
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf37
mov eax, dword [0x7c9318]
mov eax, dword [eax]
xor edx, edx
call fcn.0064c608
jmp 0x4bbf09
mov esi, dword [ebp - 8]
mov esi, dword [esi + 8]
mov eax, ebx
mov edx, dword [eax]
call dword [edx + 0x34]
cmp eax, dword [esi + 0xc]
jne 0x4bbb0f
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x168]
mov ebx, dword [eax + 0x28]
jmp 0x4bbb24
mov edx, dword [esi + 0xc]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x168]
mov cl, 1
call fcn.00627714
mov ebx, eax
test ebx, ebx
je 0x4bbf09
mov edx, dword [esi + 8]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x168]
mov cl, 1
call fcn.00627744
test eax, eax
jne 0x4bbb56
mov edx, dword [esi + 0xc]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x168]
xor ecx, ecx
call fcn.00627744
mov edx, dword [0x7c931c]
mov edx, dword [edx]
mov edx, dword [edx + 0x60]
test edx, edx
jne 0x4bbb74
pop dword fs:[0]
add esp, 8
jmp 0x4bbf37
test eax, eax
jne 0x4bbb83
mov eax, dword [0x7c931c]
mov eax, dword [edx + 0x150]
mov ecx, dword [0x7c931c]
test byte [edx + 0x210], 8
je 0x4bbba9
mov edx, dword [0x7c9318]
mov edx, dword [edx]
mov ecx, eax
mov eax, 8
xchg edx, eax
call fcn.0064c328
jmp 0x4bbbb7
mov edx, dword [0x7c9318]
mov edx, dword [edx]
xchg edx, eax
call fcn.0064c31c
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf37
mov eax, dword [ebp - 8]
mov eax, dword [eax + 8]
mov dword [ebp - 0x20], eax
mov eax, dword [ebp - 0x20]
mov edx, dword [eax + 8]
mov eax, ebx
xor ecx, ecx
call fcn.00627714
mov ebx, eax
test ebx, ebx
je 0x4bbf09
mov dl, 1
mov eax, dword [0x654e34]
call fcn.00637e44
mov dword [ebp - 0x18], eax
xor eax, eax
push ebp
push 0x4bbcf9
push dword fs:[eax]
mov dword fs:[eax], esp
push 0xd
call sub.GDI32.DLL_GetStockObject
push eax
mov eax, dword [ebp - 0x20]
mov eax, dword [eax + 0x18]
push eax
call sub.GDI32.DLL_SelectObject
mov dword [ebp - 0x1c], eax
xor eax, eax
push ebp
push 0x4bbcdc
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 0x20]
mov edx, dword [eax + 0x18]
mov eax, dword [ebp - 0x18]
call fcn.00638ab8
call fcn.004bb948
mov edx, eax
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0xc]
call fcn.006376bc
mov eax, dword [ebp - 0x20]
test byte [eax + 0x10], 1
je 0x4bbc73
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x14]
mov edx, reloc.WSOCK32.DLL_listen
call fcn.00637cf4
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0xc]
mov edx, select
call fcn.00637500
jmp 0x4bbc93
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x14]
mov edx, reloc.WSOCK32.DLL_connect
call fcn.00637cf4
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0xc]
mov edx, inet_ntoa
call fcn.00637500
mov eax, dword [ebp - 0x20]
test byte [eax + 0x10], 1
setne al
push eax
mov eax, dword [ebp - 0x20]
lea ecx, [eax + 0x1c]
mov edx, dword [ebp - 0x18]
mov eax, ebx
mov ebx, dword [eax]
call dword [ebx + 0x34]
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4bbce3
xor edx, edx
mov eax, dword [ebp - 0x18]
call fcn.00638ab8
cmp dword [ebp - 0x1c], 0
je 0x4bbcdb
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 0x20]
mov eax, dword [eax + 0x18]
push eax
call sub.GDI32.DLL_SelectObject
ret
mov esi, dword [ebp - 8]
mov esi, dword [esi + 8]
mov edx, dword [esi + 8]
mov eax, ebx
xor ecx, ecx
call fcn.00627714
mov ebx, eax
test ebx, ebx
je 0x4bbf09
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x160]
push eax
call sub.USER32.DLL_GetWindowDC
mov dword [ebp - 0xc], eax
xor eax, eax
push ebp
push 0x4bbe26
push dword fs:[eax]
mov dword fs:[eax], esp
mov dl, 1
mov eax, dword [0x654e34]
call fcn.00637e44
mov dword [ebp - 0x18], eax
xor eax, eax
push ebp
push 0x4bbdfe
push dword fs:[eax]
mov dword fs:[eax], esp
push 0xd
call sub.GDI32.DLL_GetStockObject
push eax
mov eax, dword [ebp - 0xc]
push eax
call sub.GDI32.DLL_SelectObject
mov dword [ebp - 0x1c], eax
xor eax, eax
push ebp
push 0x4bbde1
push dword fs:[eax]
mov dword fs:[eax], esp
mov edx, dword [ebp - 0xc]
mov eax, dword [ebp - 0x18]
call fcn.00638ab8
call fcn.004bb948
mov edx, eax
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0xc]
call fcn.006376bc
lea eax, [esi + 0x10]
push eax
lea ecx, [esi + 0xc]
mov edx, dword [ebp - 0x18]
mov eax, ebx
call fcn.00625ff4
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4bbde8
xor edx, edx
mov eax, dword [ebp - 0x18]
call fcn.00638ab8
cmp dword [ebp - 0x1c], 0
je 0x4bbde0
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 0xc]
push eax
call sub.GDI32.DLL_SelectObject
ret
mov eax, ebx
mov edx, dword [eax]
call dword [edx + 0x34]
mov esi, dword [ebp - 8]
mov esi, dword [esi + 8]
cmp eax, esi
je 0x4bbe61
mov eax, dword [ebp - 8]
mov edx, esi
mov cl, 1
mov eax, ebx
call fcn.00627714
test eax, eax
je 0x4bbf09
mov edx, dword [ebp - 8]
mov eax, ebx
call fcn.00627f60
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf37
lea eax, [ebp - 0x14]
push eax
call sub.USER32.DLL_GetCursorPos
lea ecx, [ebp - 0x3c]
lea edx, [ebp - 0x14]
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x24]
call fcn.00659324
mov eax, dword [ebp - 0x3c]
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x38]
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 4]
mov esi, dword [eax + 0x34]
mov eax, esi
mov edx, dword [ebp - 4]
add eax, dword [edx + 0x3c]
push eax
lea eax, [ebp - 0x30]
push eax
mov eax, dword [ebp - 4]
mov ebx, dword [eax + 0x30]
mov ecx, ebx
mov eax, dword [ebp - 4]
add ecx, dword [eax + 0x38]
mov edx, esi
mov eax, ebx
call fcn.00681110
push dword [ebp - 0x10]
push dword [ebp - 0x14]
lea eax, [ebp - 0x30]
push eax
call sub.USER32.DLL_PtInRect
test eax, eax
je 0x4bbef7
push 1
call sub.USER32.DLL_GetAsyncKeyState
shr ax, 8
test ax, ax
jne 0x4bbf01
mov eax, dword [ebp - 4]
mov byte [eax + 0x128], 2
jmp 0x4bbf01
mov eax, dword [ebp - 4]
mov byte [eax + 0x128], 3
mov eax, dword [ebp - 4]
mov edx, dword [eax]
call dword [edx + 0x74]
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x4bbf2c
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call sym.MassSender.exe__Coolctrls_TCustomPopupButton_WndProc_qqrr17Messages_TMessage
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4bbf54
lea eax, [ebp - 0x34]
call fcn.0069a934
ret