Function at 0x45f520
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4dc578
push 0x4d37f4
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x74
push ebx
push esi
push edi
mov dword [ebp - 0x18], esp
mov ebx, ecx
mov eax, dword [ebp + 0xc]
cmp eax, 0x202
ja 0x45f7a1
je case.0x45f7af.520
cmp eax, 0x104
ja 0x45f5a9
je 0x45f592
cmp eax, 0x20
je 0x45f576
cmp eax, 0x100
je 0x45f592
jmp case.0x45f7af.518
xor eax, eax
cmp dword [ebx + 8], 0xffffffff
setne al
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebx + 0x40]
test eax, eax
je case.0x45f7af.518
mov ecx, ebx
call fcn.0045ff80
jmp case.0x45f7af.518
sub eax, 0x200
je 0x45f634
dec eax
jne case.0x45f7af.518
mov eax, dword [ebx + 0x40]
test eax, eax
je case.0x45f7af.518
push 1
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
call esi
shr eax, 8
test al, al
je case.0x45f7af.518
push 2
call esi
shr eax, 8
test al, al
je case.0x45f7af.518
lea edx, [ebx + 0x29]
mov edi, 0x4f2404
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
push 0
push edx
mov ecx, ebx
call fcn.0045fd60
mov eax, 1
mov dword [ebx + 0x50], eax
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
xor esi, esi
cmp dword [ebx + 0x50], esi
je 0x45f64c
push esi
lea ecx, [ebx + 0x29]
push ecx
mov ecx, ebx
call fcn.0045fd60
jmp case.0x45f7af.518
cmp dword [ebx + 0x40], esi
je case.0x45f7af.518
push 2
call dword [sym.imp.USER32.dll_GetKeyState]
shr eax, 8
test al, al
jne 0x45f66c
mov dword [ebx + 0x40], esi
jmp case.0x45f7af.518
call dword [sym.imp.USER32.dll_GetMessagePos]
movsx ecx, ax
mov dword [ebp - 0x20], ecx
shr eax, 0x10
movsx eax, ax
mov dword [ebp - 0x1c], eax
cmp dword [0x6c3ec8], esi
je 0x45f6a3
cmp dword [ebx + 0x3c], esi
jne 0x45f6a3
push eax
push ecx
mov edx, dword [ebx + 0x20]
push edx
mov eax, dword [ebx + 0x1c]
push eax
mov ecx, dword [ebp + 8]
push ecx
mov ecx, ebx
call fcn.0045f460
lea edx, [ebp - 0x24]
push edx
lea eax, [ebp - 0x20]
push eax
mov ecx, ebx
call fcn.0045fcb0
test eax, eax
je case.0x45f7af.518
mov ecx, dword [ebp - 0x24]
push ecx
mov ecx, ebx
call fcn.0045fc60
cmp dword [ebx + 0x3c], esi
jne 0x45f6fe
lea edi, [ebx + 0x29]
mov byte [edi], 0
mov edx, dword [ebx + 0x34]
cmp dword [ebx + 0x38], edx
je 0x45f6f0
mov al, byte [ebx + edx + 0x24]
mov byte [edi + esi], al
inc esi
mov byte [edi + esi], 0
lea eax, [edx + 1]
cdq
idiv dword [ebx + 0x30]
cmp dword [ebx + 0x38], edx
jne 0x45f6d8
test esi, esi
jle 0x45f6fe
push 0
push edi
mov ecx, ebx
call fcn.0045fd60
mov ecx, dword [ebp - 0x20]
mov dword [ebx + 0x1c], ecx
mov edx, dword [ebp - 0x1c]
mov dword [ebx + 0x20], edx
mov eax, dword [ebx + 0x3c]
test eax, eax
je case.0x45f7af.518
mov al, byte [ebp - 0x24]
cmp al, 0x55
jne 0x45f725
push 0
push 0x7950
jmp 0x45f762
cmp al, 0x44
jne 0x45f73e
push 0
push 0x7951
push 0x111
mov ecx, dword [0x68f38c]
push ecx
jmp 0x45f76d
cmp al, 0x4c
jne 0x45f757
push 0
push 0x7952
push 0x111
mov edx, dword [0x68f38c]
push edx
jmp 0x45f76d
cmp al, 0x52
jne 0x45f773
push 0
push 0x7953
push 0x111
mov eax, dword [0x68f38c]
push eax
call dword [sym.imp.USER32.dll_PostMessageW]
lea ecx, [ebp - 0x20]
push ecx
mov edx, dword [ebp + 8]
push edx
mov ecx, ebx
call fcn.004605b0
mov ecx, ebx
call fcn.004602e0
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
add eax, 0xfffffdfc
cmp eax, 6
ja case.0x45f7af.518
jmp dword [eax*4 + 0x45fc3c]
mov eax, dword [ebx + 0x40]
test eax, eax
je case.0x45f7af.518
push 2
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
call esi
movsx eax, ax
shr eax, 0x10
je case.0x45f7af.518
push 4
call esi
movsx ecx, ax
shr ecx, 0x10
jne case.0x45f7af.518
mov dword [ebx + 0x44], 1
mov eax, dword [ebp + 0x10]
shr eax, 0x10
test ax, ax
lea edx, [ebx + 0x29]
mov edi, 0x4f2400
jg 0x45f806
mov edi, 0x4f23fc
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
push 0
lea esi, [ebx + 0x29]
push esi
mov ecx, ebx
call fcn.0045fd60
test eax, eax
je 0x45f83a
call dword [sym.imp.USER32.dll_ReleaseCapture]
push 1
push esi
mov ecx, ebx
call fcn.0045fd60
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
xor edi, edi
cmp dword [ebx + 0x4c], edi
je 0x45f89f
mov dword [ebx + 0x4c], edi
mov dword [ebx + 0x40], edi
mov dword [ebx + 0x50], edi
call dword [sym.imp.USER32.dll_ReleaseCapture]
cmp dword [0x6c3ec8], edi
je 0x45f887
push 1
push edi
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.USER32.dll_InvalidateRect]
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
cmp dword [ebx + 0x40], edi
je case.0x45f7af.518
mov dword [ebp - 4], edi
mov dword [ebx + 0x40], edi
mov dword [ebx + 8], 0xffffffff
mov ecx, ebx
call fcn.00460040
call dword [sym.imp.USER32.dll_ReleaseCapture]
cmp dword [0x6c3ec8], edi
mov esi, dword [ebp + 0x14]
je 0x45f8fb
movsx eax, si
mov dword [ebp - 0x4c], eax
mov edx, esi
shr edx, 0x10
movsx ecx, dx
mov dword [ebp - 0x48], ecx
cmp dword [ebx + 0x25c], eax
jne 0x45f8ee
cmp dword [ebx + 0x260], ecx
je 0x45f8fb
push 1
push edi
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.USER32.dll_InvalidateRect]
cmp dword [ebx + 0x44], edi
je 0x45f922
mov dword [ebx + 0x44], edi
mov dword [ebp - 4], 0xffffffff
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
cmp dword [ebx + 0x3c], edi
je 0x45f981
mov dword [ebx + 0x3c], edi
cmp dword [ebx + 0x48], edi
je 0x45f951
mov dword [ebx + 0x48], edi
mov dword [ebp - 4], 0xffffffff
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
push esi
mov ecx, dword [ebp + 0x10]
push ecx
push 0x204
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.USER32.dll_SendMessageW]
mov dword [ebp - 4], 0xffffffff
xor eax, eax
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
xor ecx, ecx
mov dword [ebp - 0x44], ecx
lea esi, [ebx + 0x29]
mov byte [esi], cl
mov edi, dword [ebx + 0x34]
cmp dword [ebx + 0x38], edi
je 0x45f9af
mov al, byte [edi + ebx + 0x24]
mov byte [esi + ecx], al
inc ecx
mov dword [ebp - 0x44], ecx
mov byte [esi + ecx], 0
mov eax, dword [ebx + 0x34]
inc eax
cdq
idiv dword [ebx + 0x30]
mov dword [ebx + 0x34], edx
jmp 0x45f98b
test ecx, ecx
jle 0x45f9dc
push 1
push esi
mov ecx, ebx
call fcn.0045fd60
mov dword [ebp - 4], 0xffffffff
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov esi, dword [0x6b3e54]
mov dword [ebp - 0x3c], esi
mov ecx, esi
call fcn.0049f8b0
mov edi, eax
mov dword [ebp - 0x40], edi
test edi, edi
je 0x45f965
call dword [sym.imp.USER32.dll_GetMessagePos]
mov dword [ebp - 0x58], eax
movsx ecx, ax
mov dword [ebp - 0x54], ecx
shr eax, 0x10
movsx edx, ax
mov dword [ebp - 0x50], edx
lea eax, [ebp - 0x54]
push eax
mov ecx, dword [esi + 0x40]
push ecx
call dword [sym.imp.USER32.dll_ScreenToClient]
lea edx, [ebp - 0x54]
push edx
push edi
call fcn.0045f250
add esp, 8
test eax, eax
jne 0x45fa3d
mov eax, dword [0x6d9214]
test eax, eax
je 0x45f965
mov eax, dword [ebp + 0x14]
push eax
jmp 0x45f952
mov eax, dword [ebx + 0x40]
test eax, eax
je case.0x45f7af.518
push 4
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
call esi
shr eax, 8
test al, al
je case.0x45f7af.518
push 2
call esi
shr eax, 8
test al, al
je case.0x45f7af.518
lea edx, [ebx + 0x29]
mov edi, 0x4f23f8
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov dword [ebx + 0x50], 1
push 0
push edx
mov ecx, ebx
call fcn.0045fd60
test eax, eax
je case.0x45f7af.518
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebx + 0x50]
test eax, eax
je case.0x45f7af.518
lea eax, [ebx + 0x29]
push 1
push eax
mov ecx, ebx
call fcn.0045fd60
mov dword [ebx + 0x50], 0
mov ecx, ebx
call fcn.00460040
mov edi, 0x4ffed8
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov edx, ecx
mov esi, edi
lea edi, [ebx + 0x29]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, 1
mov dword [ebx + 0x4c], eax
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp + 0x14]
movsx ecx, ax
mov dword [ebx + 0x25c], ecx
shr eax, 0x10
movsx edx, ax
mov dword [ebx + 0x260], edx
mov edi, dword [0x6b3e54]
test edi, edi
je case.0x45f7af.518
mov esi, dword [ebp + 8]
push esi
mov eax, dword [edi + 4]
push eax
call fcn.004d2790
add esp, 8
test eax, eax
jne 0x45fb88
cmp dword [edi + 0x40], esi
je 0x45fb88
mov dword [ebx + 4], 0
jmp case.0x45f7af.518
mov dword [ebx + 4], esi
push esi
call dword [sym.imp.USER32.dll_SetCapture]
mov dword [ebx + 0x40], 1
xor esi, esi
mov dword [ebx + 0x3c], esi
call dword [sym.imp.USER32.dll_GetMessagePos]
movsx ecx, ax
mov dword [ebx + 0x1c], ecx
shr eax, 0x10
movsx edx, ax
mov dword [ebx + 0x20], edx
mov dword [ebx + 0x34], esi
mov dword [ebx + 0x38], esi
cmp dword [0x6d9214], esi
je 0x45fbd9
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov ecx, edi
call fcn.0049f8b0
mov ebx, eax
cmp ebx, esi
je case.0x45f7af.518
call dword [sym.imp.USER32.dll_GetMessagePos]
movsx ecx, ax
mov dword [ebp - 0x6c], ecx
shr eax, 0x10
movsx edx, ax
mov dword [ebp - 0x68], edx
lea eax, [ebp - 0x6c]
push eax
mov ecx, dword [edi + 0x40]
push ecx
call dword [sym.imp.USER32.dll_ScreenToClient]
lea edx, [ebp - 0x6c]
push edx
push ebx
call fcn.0045f250
add esp, 8
test eax, eax
je case.0x45f7af.518
mov eax, 1
mov ecx, dword [ebp - 0x10]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10