Function at 0x456350
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword [0x5a56dc]
sub esp, 0x68
push ebx
xor ebx, ebx
cmp eax, ebx
je 0x456cac
push ebp
push esi
push edi
push ebx
lea edx, [esp + 0x6c]
call fcn.005448e0
mov ebp, eax
cmp ebp, ebx
mov dword [esp + 0x44], ebp
je 0x456ca9
cmp dword [ebp + 0x6cc], ebx
je 0x456ca9
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
push 0x10
call esi
push 0x11
and eax, 0x8000
sub eax, 0x8000
neg eax
sbb eax, eax
inc eax
mov dword [esp + 0x64], eax
call esi
mov edi, dword [ebp + 0xd90]
mov ecx, dword [ebp + 0xd8c]
mov edx, dword [ebp + 0xd94]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x48], edi
and eax, 0x8000
sub eax, 0x8000
neg eax
sbb eax, eax
inc eax
mov dword [esp + 0x50], eax
mov eax, dword [ebp + 0xd98]
cmp edi, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x4c], eax
jne 0x4563f4
cmp edx, ecx
jle 0x456ca9
cmp edi, eax
jl 0x456ca9
cmp ecx, ebx
jl 0x456ca9
cmp edi, ebx
jl 0x456ca9
cmp edx, ebx
jl 0x456ca9
cmp eax, ebx
jl 0x456ca9
mov esi, dword [ebp + 0x700]
mov eax, dword [ebp + 0x6fc]
mov ecx, dword [ebp + 0x6cc]
sub eax, esi
cmp eax, ebx
mov esi, dword [ecx + 0x44]
mov dword [esp + 0x10], esi
jle 0x456450
lea esp, [esp]
cmp esi, ecx
je 0x45644c
mov esi, dword [esi + 0x44]
dec eax
cmp eax, ebx
jg 0x456440
mov dword [esp + 0x10], esi
cmp esi, ebx
je 0x456ca9
push 0x64
mov dword [esp + 0x58], 0x64
call fcn.00570098
add esp, 4
cmp eax, ebx
mov dword [esp + 0x20], eax
je 0x456509
mov eax, dword [ebp + 0x758]
cmp eax, 1
mov ecx, dword [ebp + 0x9ec]
je 0x456495
cmp eax, 2
jne 0x456499
cmp dword [0x5aca44], 1
jne 0x456499
lea ecx, [ecx + ecx - 1]
mov eax, dword [esp + 0x74]
sub eax, ecx
dec eax
cmp edi, ebx
mov dword [esp + 0x14], ebx
jle 0x4564d8
mov edx, ecx
neg edx
lea esp, [esp]
sub eax, ecx
cmp eax, edx
jl 0x4564d4
cmp esi, dword [ebp + 0x6cc]
je 0x4564d4
mov edi, dword [esp + 0x14]
mov esi, dword [esi + 0x44]
inc edi
mov dword [esp + 0x14], edi
mov edi, dword [esp + 0x48]
cmp dword [esp + 0x14], edi
jl 0x4564b0
mov dword [esp + 0x10], esi
mov edi, dword [esi + 8]
mov eax, dword [esp + 0x20]
mov byte [0x5aa640], bl
mov byte [eax], bl
mov ecx, dword [ebp + 0x864]
push ecx
call dword [sym.imp.USER32.dll_GetDC]
cmp eax, ebx
mov dword [esp + 0x5c], eax
jne 0x456518
mov edx, dword [esp + 0x20]
push edx
call fcn.005700aa
add esp, 4
xor ecx, ecx
call fcn.0041d520
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x68
ret
mov ecx, dword [ebp + 0x974]
push ecx
push eax
call dword [sym.imp.GDI32.dll_SelectObject]
mov dword [esp + 0x64], eax
cmp dword [0x5b121c], ebx
mov dword [esp + 0x58], 0xffffffff
je 0x45654d
mov edx, dword [ebp + 0x9e4]
mov ecx, dword [esp + 0x5c]
call fcn.0048d6d0
mov dword [esp + 0x58], eax
mov ecx, dword [esi + 0x1c]
mov dword [esp + 0x38], ebx
mov dword [esp + 0x34], ebx
mov dword [esp + 0x30], ebx
call fcn.004336b0
mov ecx, dword [0x5a54f8]
mov dword [esp + 0x1c], eax
call fcn.004336b0
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ebx
mov dword [esp + 0x40], ebx
mov dword [esp + 0x28], ebx
mov ebp, dword [esp + 0x14]
cmp ebp, ebx
jl 0x456c17
mov esi, dword [esp + 0x10]
cmp edi, dword [esi + 8]
je 0x4565c4
mov ecx, dword [esi + 0x1c]
mov dword [esp + 0x38], ebx
mov dword [esp + 0x34], ebx
mov dword [esp + 0x30], ebx
call fcn.004336b0
mov ecx, dword [0x5a54f8]
mov dword [esp + 0x1c], eax
call fcn.004336b0
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ebx
mov dword [esp + 0x40], ebx
cmp ebp, dword [esp + 0x48]
mov ecx, dword [esi]
mov edx, 0x5aaa28
jne 0x456846
mov dword [esp + 0x40], 1
lea ecx, [ecx]
mov al, byte [ecx]
inc ecx
mov byte [edx], al
inc edx
cmp al, bl
jne 0x4565e0
mov eax, 0x5aaa28
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4565f2
mov ebp, dword [esp + 0x2c]
sub eax, edx
mov esi, eax
cmp ebp, esi
jle 0x45660b
mov ebp, esi
mov dword [esp + 0x2c], ebp
mov edx, dword [esp + 0x14]
cmp edx, dword [esp + 0x4c]
jne 0x45664d
cmp dword [0x5b121c], ebx
mov edi, dword [esp + 0x18]
je 0x456639
push edi
push 0x5aaa28
call fcn.00572da3
add esp, 8
cmp eax, 1
jne 0x456639
inc edi
mov dword [esp + 0x18], edi
cmp edi, esi
jle 0x456643
mov edi, esi
mov dword [esp + 0x18], edi
mov byte [edi + 0x5aaa29], bl
mov dword [esp + 0x14], ebx
cmp dword [0x5b121c], ebx
je 0x45666d
push ebp
push 0x5aaa28
call fcn.00572da3
add esp, 8
cmp eax, 2
jne 0x45666d
dec ebp
mov dword [esp + 0x2c], ebp
cmp ebp, ebx
jge 0x456677
xor ebp, ebp
mov dword [esp + 0x2c], ebp
lea eax, [ebp + 0x5aaa28]
mov edx, 0x5aa640
sub edx, eax
mov cl, byte [eax]
mov byte [eax + edx], cl
inc eax
cmp cl, bl
jne 0x456684
cmp dword [esp + 0x50], ebx
je 0x456969
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x44]
mov eax, dword [eax + 0x6cc]
mov esi, ecx
cmp esi, eax
je 0x4566ba
mov esi, dword [esi + 0x44]
mov edx, dword [esi + 8]
cmp edx, dword [ecx + 8]
je 0x4566a8
mov esi, dword [esi + 0x40]
cmp esi, ebx
je 0x456969
mov ecx, dword [esi + 0x1c]
call fcn.004336b0
mov dword [esp + 0x1c], eax
mov edi, edi
mov eax, dword [esi]
xor edi, edi
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4566d7
sub eax, edx
mov ebp, eax
cmp ebp, ebx
jle 0x45682c
lea ebx, [ebx]
cmp esi, dword [esp + 0x10]
jne 0x456700
cmp edi, dword [esp + 0x2c]
jge 0x45682c
cmp dword [0x5b121c], ebx
je 0x456726
mov eax, dword [esi]
push edi
push eax
call fcn.00572da3
add esp, 8
cmp eax, 1
je case.0x45673f.4
cmp eax, 2
je case.0x45673f.4
mov ecx, dword [esi]
movzx eax, byte [ecx + edi]
add eax, 0xfffffffe
cmp eax, 0x1d
ja case.0x45673f.4
movzx edx, byte [eax + 0x456ccc]
jmp dword [edx*4 + 0x456cb4]
mov ecx, dword [esp + 0x30]
xor eax, eax
cmp ecx, ebx
sete al
mov dword [esp + 0x28], 1
mov dword [esp + 0x30], eax
jmp case.0x45673f.4
mov eax, dword [esp + 0x34]
xor ecx, ecx
cmp eax, ebx
sete cl
mov dword [esp + 0x28], 1
mov dword [esp + 0x34], ecx
jmp case.0x45673f.4
mov eax, dword [esp + 0x38]
xor edx, edx
cmp eax, ebx
sete dl
mov dword [esp + 0x28], 1
mov dword [esp + 0x38], edx
jmp case.0x45673f.4
mov ecx, dword [0x5a54f8]
call fcn.004336b0
mov ecx, dword [esi + 0x1c]
push eax
call fcn.004336b0
mov ecx, dword [esi]
push eax
lea eax, [esp + 0x44]
push eax
add ecx, edi
lea edx, [esp + 0x28]
call fcn.00500120
mov ecx, dword [esp + 0x24]
add edi, eax
cmp ecx, ebx
jne 0x4567ea
cmp eax, ebx
jne 0x4567dd
mov dword [esp + 0x24], ebx
mov dword [esp + 0x28], 1
jmp case.0x45673f.4
xor ecx, ecx
cmp eax, 2
setg cl
inc ecx
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], 1
jmp case.0x45673f.4
mov ecx, dword [esi + 0x1c]
mov dword [esp + 0x38], ebx
mov dword [esp + 0x34], ebx
mov dword [esp + 0x30], ebx
call fcn.004336b0
mov ecx, dword [0x5a54f8]
mov dword [esp + 0x1c], eax
call fcn.004336b0
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ebx
mov dword [esp + 0x28], ebx
inc edi
cmp edi, ebp
jl 0x4566f0
cmp esi, dword [esp + 0x10]
je 0x456969
mov esi, dword [esi + 0x40]
cmp esi, ebx
jne 0x4566d0
jmp 0x456969
mov al, byte [ecx]
inc ecx
mov byte [edx], al
inc edx
cmp al, bl
jne 0x456846
cmp ebp, dword [esp + 0x4c]
jne 0x4568a7
mov eax, 0x5aaa28
lea edx, [eax + 1]
mov edi, edi
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456860
mov ebp, dword [esp + 0x18]
sub eax, edx
mov esi, eax
cmp dword [0x5b121c], ebx
je 0x45688f
push ebp
push 0x5aaa28
call fcn.00572da3
add esp, 8
cmp eax, 1
jne 0x45688f
inc ebp
mov dword [esp + 0x18], ebp
cmp ebp, esi
jle 0x456899
mov ebp, esi
mov dword [esp + 0x18], ebp
mov esi, dword [esp + 0x10]
mov byte [ebp + 0x5aaa29], bl
mov dword [esp + 0x14], ebx
cmp dword [esp + 0x60], ebx
jne 0x456923
cmp edi, dword [esi + 8]
jne 0x456923
mov ecx, dword [esi + 0x10]
cmp ecx, ebx
jle 0x45690c
cmp byte [0x5aaa28], bl
mov eax, 0x5aaa28
je 0x4568da
cmp ecx, ebx
jle 0x4568f3
mov dl, byte [eax]
dec ecx
cmp dl, 0x20
jne 0x4568f3
mov dl, byte [eax + 1]
inc eax
cmp dl, bl
jne 0x4568c6
xor eax, eax
lea esp, [esp]
mov cl, byte [eax + 0x5aaa28]
mov byte [eax + 0x5aa640], cl
inc eax
cmp cl, bl
jne 0x4568e0
jmp 0x456969
cmp byte [eax], bl
je 0x4568da
mov edx, 0x5aa640
sub edx, eax
mov edi, edi
mov cl, byte [eax]
mov byte [eax + edx], cl
inc eax
cmp cl, bl
jne 0x456900
jmp 0x456969
xor eax, eax
mov edi, edi
mov cl, byte [eax + 0x5aaa28]
mov byte [eax + 0x5aa640], cl
inc eax
cmp cl, bl
jne 0x456910
jmp 0x456969
mov al, byte [0x583b72]
mov dx, word [0x583b70]
mov byte [0x5aa642], al
mov eax, 0x5aaa28
mov word [0x5aa640], dx
mov ecx, eax
mov dl, byte [eax]
inc eax
cmp dl, bl
jne 0x456942
mov edi, 0x5aa640
sub eax, ecx
mov esi, ecx
dec edi
mov cl, byte [edi + 1]
inc edi
cmp cl, bl
jne 0x456953
mov ecx, eax
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [esp + 0x44]
mov eax, dword [esp + 0x10]
cmp dword [ecx + 0x6e4], eax
jne 0x45698a
cmp dword [eax + 0x20], 2
jne 0x45698a
mov byte [0x5aa640], bl
jmp 0x456bfc
cmp byte [0x5aa640], bl
je 0x456bfc
cmp dword [esp + 0x50], ebx
je 0x456b63
cmp dword [esp + 0x40], ebx
je 0x456b72
cmp dword [esp + 0x30], ebx
mov dword [esp + 0x40], ebx
mov byte [0x5aaa28], bl
je 0x4569e2
mov eax, 0x5aaa28
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4569c2
sub eax, edx
push 2
lea edx, [eax + 0x5aaa28]
push 0x583f18
push edx
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0xc
cmp dword [esp + 0x34], ebx
je 0x456a10
mov eax, 0x5aaa28
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x4569f0
sub eax, edx
push 0x1f
lea eax, [eax + 0x5aaa28]
push 0x583f18
push eax
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0xc
cmp dword [esp + 0x38], ebx
je 0x456a40
mov eax, 0x5aaa28
lea edx, [eax + 1]
mov edi, edi
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456a20
sub eax, edx
push 0x16
lea ecx, [eax + 0x5aaa28]
push 0x583f18
push ecx
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0xc
mov eax, dword [esp + 0x24]
cmp eax, 2
jne 0x456ab0
movzx edx, byte [0x5aa640]
push edx
call fcn.00570e57
add esp, 4
test eax, eax
mov eax, 0x5aaa28
lea edx, [eax + 1]
je 0x456a94
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456a65
mov ecx, dword [esp + 0x3c]
push ecx
sub eax, edx
mov edx, dword [esp + 0x20]
push edx
push 3
push str._c_d__02d
lea eax, [eax + 0x5aaa28]
push eax
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0x14
jmp 0x456b15
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456a94
mov ecx, dword [esp + 0x3c]
push ecx
sub eax, edx
mov edx, dword [esp + 0x20]
push edx
push 3
push str._c_d__d
jmp 0x456a7f
cmp eax, 1
jne 0x456b15
movzx ecx, byte [0x5aa640]
push ecx
call fcn.00570e57
add esp, 4
test eax, eax
mov eax, 0x5aaa28
lea edx, [eax + 1]
je 0x456af0
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456ad1
sub eax, edx
mov edx, dword [esp + 0x1c]
push edx
push 3
push str._c_02d
lea eax, [eax + 0x5aaa28]
push eax
jmp 0x456b0c
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456af0
mov ecx, dword [esp + 0x1c]
push ecx
push 3
sub eax, edx
push str._c_d
lea edx, [eax + 0x5aaa28]
push edx
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0x10
mov eax, 0x5aa640
mov edx, eax
lea esp, [esp]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456b20
mov edi, 0x5aaa28
sub eax, edx
dec edi
nop
mov cl, byte [edi + 1]
inc edi
cmp cl, bl
jne 0x456b30
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
xor eax, eax
lea ebx, [ebx]
mov cl, byte [eax + 0x5aaa28]
mov byte [eax + 0x5aa640], cl
inc eax
cmp cl, bl
jne 0x456b50
jmp 0x456b72
mov edx, 0xf
mov ecx, 0x5aa640
call fcn.00524b30
mov edi, dword [esp + 0x20]
mov eax, edi
lea edx, [eax + 1]
jmp 0x456b80
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456b80
sub eax, edx
mov edx, eax
mov eax, 0x5aa640
lea esi, [eax + 1]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456b93
mov ecx, dword [esp + 0x54]
sub eax, esi
lea eax, [eax + edx + 0x14]
cmp eax, ecx
jle 0x456bc7
add eax, 0x64
push eax
push edi
mov dword [esp + 0x5c], eax
call fcn.00571c26
add esp, 8
cmp eax, ebx
je 0x456c6c
mov edi, eax
mov dword [esp + 0x20], edi
mov eax, 0x5aa640
mov edx, eax
mov edi, edi
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456bd0
sub eax, edx
dec edi
lea ebx, [ebx]
mov cl, byte [edi + 1]
inc edi
cmp cl, bl
jne 0x456be0
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
mov eax, dword [esp + 0x10]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edx, dword [esp + 0x14]
mov edi, dword [eax + 8]
mov eax, dword [eax + 0x40]
dec edx
cmp eax, ebx
mov dword [esp + 0x10], eax
mov dword [esp + 0x14], edx
jne 0x456580
mov eax, dword [esp + 0x20]
lea edx, [eax + 1]
mov edi, edi
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456c20
sub eax, edx
cmp eax, 1
jbe 0x456c73
cmp dword [esp + 0x28], ebx
mov esi, dword [esp + 0x20]
je 0x456c5c
mov eax, esi
lea edx, [eax + 1]
lea ecx, [ecx]
mov cl, byte [eax]
inc eax
cmp cl, bl
jne 0x456c40
sub eax, edx
push 0xf
add eax, esi
push 0x583f18
push eax
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0xc
mov ecx, dword [esp + 0x44]
push ebx
mov edx, esi
call fcn.0041dd00
test eax, eax
jne 0x456c73
xor ecx, ecx
call fcn.0041d520
mov eax, dword [esp + 0x20]
cmp eax, ebx
je 0x456c84
push eax
call fcn.005700aa
add esp, 4
mov eax, dword [esp + 0x58]
cmp eax, ebx
jl 0x456c95
push eax
call fcn.00572bf6
add esp, 4
mov eax, dword [esp + 0x64]
cmp eax, ebx
je 0x456ca9
push eax
mov eax, dword [esp + 0x60]
push eax
call dword [sym.imp.GDI32.dll_SelectObject]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x68
ret