Function at 0x678654
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffff40
push ebx
push esi
push edi
mov dword [ebp - 0x68], ecx
mov esi, edx
mov dword [ebp - 0x18], eax
mov byte [ebp - 0x75], 0
mov byte [ebp - 0x29], 0
mov byte [ebp - 0x1d], 0
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
mov dword [ebp - 0x24], eax
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x298]
mov dword [ebp - 0x28], eax
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x294]
mov dword [ebp - 0x6c], eax
mov eax, dword [ebp - 0x18]
cmp byte [eax + 0x2a4], 0
je 0x678702
mov eax, dword [ebp - 0x18]
mov edi, dword [eax + 0x2a8]
mov eax, dword [ebp - 0x18]
mov dword [edi + 0x29c], eax
mov byte [edi + 0x29a], 0
mov byte [edi + 0x299], 0
mov byte [edi + 0x2a1], 1
mov eax, edi
mov edx, dword [eax]
call dword [edx + 0x110]
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
movzx eax, byte [eax + 0x290]
add al, 0xfe
sub al, 2
setb al
mov byte [ebp - 0x29], al
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
movzx eax, byte [eax + 0x299]
mov byte [ebp - 0x1d], al
xor eax, eax
mov dword [ebp - 0x54], eax
xor eax, eax
mov dword [ebp - 0x14], eax
xor edx, edx
push ebp
push 0x678e3a
push dword fs:[edx]
mov dword fs:[edx], esp
mov eax, dword [ebp - 0x18]
movzx eax, byte [eax + 0x316]
mov byte [ebp - 0x5d], al
mov eax, dword [ebp - 0x18]
movzx edx, byte [ebp - 0x5d]
mov byte [eax + 0x341], dl
lea ecx, [ebp - 0x44]
mov edx, dword [ebp - 0x68]
mov eax, esi
call fcn.004a8d68
mov eax, dword [ebp - 0x18]
mov ebx, dword [eax + 0x38]
mov eax, ebx
mov edx, dword [0x671248]
call fcn.004088e0
test al, al
jne 0x6787c0
lea eax, [ebp - 0x90]
push eax
mov eax, dword [ebp - 0x18]
call fcn.0061e3c8
push eax
call sub.user32.dll_GetWindowRect
lea ecx, [ebp - 0xbc]
xor edx, edx
xor eax, eax
call fcn.004a8d68
lea edx, [ebp - 0xbc]
lea ecx, [ebp - 0xb4]
mov eax, dword [ebp - 0x18]
call fcn.00614b90
mov eax, dword [ebp - 0xb4]
mov dword [ebp - 0x88], eax
mov eax, dword [ebp - 0xb0]
mov dword [ebp - 0x84], eax
lea ecx, [ebp - 0x4c]
mov eax, dword [ebp - 0x18]
mov edx, dword [eax + 0x54]
dec edx
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x50]
dec eax
call fcn.004a8d68
jmp 0x678828
lea eax, [ebp - 0x90]
push eax
mov eax, ebx
call fcn.0061e3c8
push eax
call sub.user32.dll_GetWindowRect
lea ecx, [ebp - 0xbc]
xor edx, edx
xor eax, eax
call fcn.004a8d68
lea edx, [ebp - 0xbc]
lea ecx, [ebp - 0xb4]
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x38]
call fcn.00614b90
mov eax, dword [ebp - 0xb4]
mov dword [ebp - 0x88], eax
mov eax, dword [ebp - 0xb0]
mov dword [ebp - 0x84], eax
lea ecx, [ebp - 0x4c]
mov eax, dword [ebp - 0x18]
mov ebx, dword [eax + 0x38]
mov edx, dword [ebx + 0x54]
dec edx
mov eax, dword [ebx + 0x50]
dec eax
call fcn.004a8d68
mov eax, dword [ebp - 0x90]
sub eax, dword [ebp - 0x88]
sub dword [ebp - 0x44], eax
mov eax, dword [ebp - 0x8c]
sub eax, dword [ebp - 0x84]
sub dword [ebp - 0x40], eax
push 0x11
call sub.user32.dll_GetKeyState
test ax, ax
setl byte [ebp - 0x4e]
mov eax, dword [ebp - 0x18]
cmp byte [eax + 0x312], 0
setne byte [ebp - 0x55]
mov dl, 1
mov eax, dword [0x4923bc]
call fcn.004085e8
mov dword [ebp - 0x54], eax
mov eax, dword [ebp - 0x18]
cmp byte [eax + 0x312], 2
je 0x678886
push ebp
call fcn.006784e4
pop ecx
jmp 0x6788a3
mov eax, dword [ebp - 0x18]
cmp byte [eax + 0x2a4], 0
je 0x6788a3
mov eax, dword [ebp - 0x18]
mov edx, dword [eax + 0x2a8]
mov eax, dword [ebp - 0x54]
call fcn.004b36d4
mov eax, dword [ebp - 0x54]
mov eax, dword [eax + 8]
dec eax
test eax, eax
jl 0x6788c9
inc eax
mov dword [ebp - 0x80], eax
xor ebx, ebx
mov edx, ebx
mov eax, dword [ebp - 0x54]
call fcn.004b38b8
call fcn.006744d0
inc ebx
dec dword [ebp - 0x80]
jne 0x6788b4
mov dl, 1
mov eax, dword [0x4923bc]
call fcn.004085e8
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x54]
mov eax, dword [eax + 8]
dec eax
sub eax, 0xffffffff
jl 0x678ad1
inc eax
mov dword [ebp - 0x80], eax
mov ebx, 0xffffffff
mov eax, 0x20
call fcn.004064f4
mov dword [ebp - 0x7c], eax
mov eax, dword [ebp - 0x7c]
xor edx, edx
mov dword [eax + 0x1c], edx
xor edx, edx
push ebp
push 0x678aa5
push dword fs:[edx]
mov dword fs:[edx], esp
mov esi, dword [ebp - 0x7c]
cmp ebx, 0xffffffff
jne 0x67897d
xor eax, eax
mov dword [esi], eax
lea eax, [esi + 4]
push eax
call sub.user32.dll_SetRectEmpty
push 1
push 0
lea eax, [ebp - 0xb4]
push eax
mov eax, dword [ebp - 0x18]
movzx edx, byte [eax + 0x2b8]
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
call fcn.00672d2c
mov ecx, eax
xor edx, edx
mov eax, dword [ebp - 0x18]
mov edi, dword [eax]
call dword [edi + 0x110]
mov eax, dword [ebp - 0xb4]
mov dword [esi + 0x14], eax
mov eax, dword [ebp - 0xb0]
mov dword [esi + 0x18], eax
lea edx, [esi + 0x14]
mov eax, dword [ebp - 0x18]
call fcn.00676e80
jmp 0x678a34
mov edx, ebx
mov eax, dword [ebp - 0x54]
call fcn.004b38b8
mov edi, eax
mov dword [esi], edi
lea eax, [esi + 4]
push eax
mov eax, edi
call fcn.0061e3c8
push eax
call sub.user32.dll_GetWindowRect
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
cmp eax, dword [esi]
je 0x678a0b
push 0
mov eax, dword [esi]
push eax
lea eax, [ebp - 0xb4]
push eax
mov eax, dword [ebp - 0x18]
movzx edx, byte [eax + 0x2b8]
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x2a8]
call fcn.00672d2c
mov ecx, eax
xor edx, edx
mov eax, dword [ebp - 0x18]
mov edi, dword [eax]
call dword [edi + 0x110]
mov eax, dword [ebp - 0xb4]
mov dword [esi + 0x14], eax
mov eax, dword [ebp - 0xb0]
mov dword [esi + 0x18], eax
mov eax, dword [esi]
movzx eax, byte [eax + 0x290]
add al, 0xfe
sub al, 2
setb cl
lea edx, [esi + 0x14]
mov eax, dword [ebp - 0x18]
call fcn.00676e50
jmp 0x678a34
lea ecx, [ebp - 0xb4]
mov eax, dword [ebp - 0x18]
mov edx, dword [eax + 0x54]
mov eax, dword [ebp - 0x18]
mov eax, dword [eax + 0x50]
call fcn.004a8d68
mov eax, dword [ebp - 0xb4]
mov dword [esi + 0x14], eax
mov eax, dword [ebp - 0xb0]
mov dword [esi + 0x18], eax
mov eax, dword [ebp - 0x7c]
cmp dword [eax], 0
je 0x678a90
mov dl, 1
mov eax, dword [0x4923bc]
call fcn.004085e8
mov edx, dword [ebp - 0x7c]
mov dword [edx + 0x1c], eax
mov eax, dword [ebp - 0x7c]
mov eax, dword [eax]
mov dl, 1
call fcn.00673544
mov esi, eax
test esi, esi
jl 0x678a90
inc esi
xor edi, edi
lea ecx, [ebp - 0x76]
mov eax, dword [ebp - 0x7c]
mov eax, dword [eax]
mov edx, edi
call fcn.006733cc
movsx eax, ax
cmp byte [ebp - 0x76], 0
je 0x678a80
or eax, 0x10000
mov edx, dword [ebp - 0x7c]
mov edx, dword [edx + 0x1c]
xchg edx, eax
call fcn.004b36d4
inc edi
dec esi
jne 0x678a63
mov edx, dword [ebp - 0x7c]
mov eax, dword [ebp - 0x14]
call fcn.004b36d4
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x678ac7
inc ebx
dec dword [ebp - 0x80]
jne 0x6788f1
call fcn.0066eef0
call sub.user32.dll_GetCursor
mov dword [ebp - 0x5c], eax
cmp byte [ebp - 0x5d], 0
jne 0x678b06
call sub.user32.dll_GetDesktopWindow
push eax
call sub.user32.dll_LockWindowUpdate
push 0x403
push 0
call sub.user32.dll_GetDesktopWindow
push eax
call sub.user32.dll_GetDCEx
mov dword [ebp - 0x64], eax
jmp 0x678b0b
xor eax, eax
mov dword [ebp - 0x64], eax
xor eax, eax
push ebp
push 0x678d0c
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 0x18]
call fcn.0061e3c8
push eax
call sub.user32.dll_SetCapture
mov eax, dword [ebp - 0x18]
movzx eax, byte [eax + 0x2a4]
mov byte [ebp - 0x4d], al
xor eax, eax
mov dword [ebp - 0x1c], eax
lea eax, [ebp - 0x10]
push eax
call sub.user32.dll_SetRectEmpty
lea eax, [ebp - 0x34]
push eax
call sub.user32.dll_GetCursorPos
mov eax, dword [ebp - 0x34]
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x30]
mov dword [ebp - 0x38], eax
push ebp
call fcn.00678068
pop ecx
mov byte [ebp - 0x4d], 1
jmp 0x678c74
push 0
push 0
push 0
lea eax, [ebp - 0xac]
push eax
call sub.user32.dll_GetMessageW
sub eax, 0xffffffff
je 0x678c8b
dec eax
je 0x678b87
jmp 0x678b98
mov eax, dword [ebp - 0xa4]
push eax
call sub.user32.dll_PostQuitMessage
jmp 0x678c8b
mov ebx, dword [ebp - 0xa8]
mov eax, ebx
cmp eax, 0x202
jg 0x678bca
je 0x678c56
add eax, 0xffffff00
sub eax, 2
jb 0x678be1
sub eax, 0xfe
je 0x678c18
dec eax
je 0x678c8b
jmp 0x678c5c
sub eax, 0x203
je 0x678c8b
dec eax
sub eax, 6
jb 0x678c74
jmp 0x678c5c
mov eax, dword [ebp - 0xa4]
sub eax, 0x11
je 0x678bf7
sub eax, 0xa
je 0x678c8b
jmp 0x678c74
cmp ebx, 0x100
sete al
cmp al, byte [ebp - 0x4e]
je 0x678c74
cmp ebx, 0x100
sete byte [ebp - 0x4e]
push ebp
call fcn.00678068
pop ecx
jmp 0x678c74
call sub.user32.dll_GetMessagePos
mov dword [ebp - 0xc0], eax
mov eax, dword [ebp - 0xc0]
lea edx, [ebp - 0x74]
call fcn.00415450
mov eax, dword [ebp - 0x3c]
cmp eax, dword [ebp - 0x74]
jne 0x678c41
mov eax, dword [ebp - 0x38]
cmp eax, dword [ebp - 0x70]
je 0x678c74
push ebp
call fcn.00678068
pop ecx
mov eax, dword [ebp - 0x74]
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x70]
mov dword [ebp - 0x38], eax
jmp 0x678c74
mov byte [ebp - 0x75], 1
jmp 0x678c8b
lea eax, [ebp - 0xac]
push eax
call sub.user32.dll_TranslateMessage
lea eax, [ebp - 0xac]
push eax
call sub.user32.dll_DispatchMessageW
mov eax, dword [ebp - 0x18]
call fcn.0061e3c8
mov ebx, eax
call sub.user32.dll_GetCapture
cmp ebx, eax
je 0x678b67
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x678d13
mov eax, dword [ebp - 0x18]
call fcn.0061e3c8
mov ebx, eax
call sub.user32.dll_GetCapture
cmp ebx, eax
jne 0x678cb0
call sub.user32.dll_ReleaseCapture
cmp byte [ebp - 0x5d], 0
jne 0x678d0b
mov eax, dword [ebp - 0x64]
push eax
call sub.user32.dll_GetDesktopWindow
push eax
call sub.user32.dll_ReleaseDC
push 0x403
push 0
call sub.user32.dll_GetDesktopWindow
push eax
call sub.user32.dll_GetDCEx
mov dword [ebp - 0x64], eax
lea eax, [ebp - 0x10]
push eax
push 1
cmp dword [ebp - 0x1c], 0
setne al
push eax
xor ecx, ecx
mov edx, dword [ebp - 0x64]
mov eax, dword [ebp - 0x18]
call fcn.00677a4c
mov eax, dword [ebp - 0x64]
push eax
call sub.user32.dll_GetDesktopWindow
push eax
call sub.user32.dll_ReleaseDC
push 0
call sub.user32.dll_LockWindowUpdate
ret