Function at 0x5a2f98
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffef0
push ebx
push esi
push edi
mov dword [ebp - 4], eax
lea esi, [ebp - 4]
mov eax, dword [esi]
call fcn.005a2760
mov ebx, eax
mov eax, dword [esi]
cmp bl, byte [eax + 0x884]
je 0x5a2fc9
mov edx, 0xfa
mov eax, dword [esi]
call fcn.005a3ae0
mov eax, dword [esi]
mov byte [eax + 0x884], bl
call sub.winmm.dll_timeGetTime
mov edi, eax
and edi, 0xfffffff
mov eax, dword [esi]
mov dword [eax + 0x880], edi
mov eax, dword [esi]
cmp edi, dword [eax + 0x874]
jge 0x5a2ff8
mov eax, dword [esi]
mov dword [eax + 0x874], edi
mov eax, dword [esi]
mov eax, dword [eax + 0x880]
mov edx, dword [esi]
sub eax, dword [edx + 0x874]
mov dword [ebp - 8], eax
xor eax, eax
mov edx, dword [esi]
movzx edx, byte [edx + eax + 0xf0]
mov ecx, dword [esi]
mov byte [ecx + eax + 0x230], dl
mov edx, dword [esi]
mov byte [edx + eax + 0xf0], 0
inc eax
cmp eax, 0x140
jne 0x5a300d
mov eax, dword [esi]
mov eax, dword [eax + 0x880]
mov edx, dword [esi]
sub eax, dword [edx + 0x874]
mov edx, dword [esi]
add dword [edx + 0x88c], eax
mov eax, dword [esi]
mov eax, dword [eax + 0x888]
mov edx, dword [esi]
cmp eax, dword [edx + 0x88c]
jg 0x5a3064
mov edx, dword [esi]
mov dword [edx + 0x88c], eax
mov eax, dword [esi]
call fcn.005a4c10
mov eax, dword [esi]
mov eax, dword [eax + 0x880]
mov edx, dword [esi]
sub eax, dword [edx + 0x874]
test eax, eax
jle 0x5a309c
mov edx, dword [esi]
sub dword [edx + 0x87c], eax
mov eax, dword [esi]
cmp dword [eax + 0x87c], 0
jge 0x5a309c
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x87c], edx
mov eax, dword [esi]
cmp dword [eax + 0x87c], 0
jle 0x5a30e2
test bl, bl
je 0x5a30b2
mov eax, dword [esi]
call fcn.005a28ac
mov eax, dword [esi]
mov eax, dword [eax + 0x880]
mov edx, dword [esi]
mov dword [edx + 0x874], eax
mov eax, dword [esi]
mov byte [eax + 0x75], 1
mov eax, dword [esi]
mov byte [eax + 0x77], 1
mov eax, dword [esi]
mov byte [eax + 0x79], 1
mov eax, dword [esi]
mov byte [eax + 0x95], 1
jmp 0x5a3aa5
test bl, bl
je 0x5a30ed
mov eax, dword [esi]
call fcn.005a28ac
mov eax, dword [esi]
cmp byte [eax + 0xa5d], 0
je 0x5a316f
test bl, bl
je 0x5a316f
mov eax, dword [esi]
cmp byte [eax + 0x878], 0
jne 0x5a3154
lea eax, [ebp - 0x108]
push eax
call sub.user32.dll_GetKeyboardState
xor eax, eax
lea edx, [ebp - 0x108]
test byte [edx], 0x80
setne cl
mov edi, dword [esi]
mov byte [edi + eax + 0xf0], cl
inc eax
inc edx
cmp eax, 0x14
jne 0x5a311b
mov eax, 0x1b
lea edx, [ebp - 0xed]
test byte [edx], 0x80
setne cl
mov edi, dword [esi]
mov byte [edi + eax + 0xf0], cl
inc eax
inc edx
cmp eax, 0xe5
jne 0x5a313c
mov eax, dword [esi]
mov byte [eax + 0xf1], 0
mov eax, dword [esi]
mov byte [eax + 0xf2], 0
mov eax, dword [esi]
mov byte [eax + 0xf4], 0
mov eax, dword [esi]
cmp byte [eax + 0xa5c], 0
je 0x5a31e4
test bl, bl
je 0x5a31e4
mov eax, dword [esi]
cmp byte [eax + 0x74], 0
je 0x5a318f
mov eax, dword [esi]
mov byte [eax + 0xf1], 1
mov eax, dword [esi]
cmp byte [eax + 0x76], 0
je 0x5a31a0
mov eax, dword [esi]
mov byte [eax + 0xf2], 1
mov eax, dword [esi]
cmp byte [eax + 0x78], 0
je 0x5a31b1
mov eax, dword [esi]
mov byte [eax + 0xf4], 1
mov eax, dword [esi]
cmp dword [eax + 0x60], 0
jle 0x5a31c2
mov eax, dword [esi]
mov byte [eax + 0x1e0], 1
mov eax, dword [esi]
cmp dword [eax + 0x60], 0
jge 0x5a31d3
mov eax, dword [esi]
mov byte [eax + 0x1e1], 1
mov eax, dword [esi]
mov eax, dword [eax + 0x60]
mov edx, dword [esi]
mov dword [edx + 0x64], eax
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x60], edx
test bl, bl
je 0x5a31fc
mov eax, dword [esi]
cmp byte [eax + 0x94], 0
je 0x5a31fc
mov eax, dword [esi]
mov byte [eax + 0x1e4], 1
xor eax, eax
mov edx, dword [esi]
cmp byte [edx + eax + 0x230], 1
jne 0x5a3216
mov edx, dword [esi]
cmp byte [edx + eax + 0xf0], 1
je 0x5a3227
mov edx, dword [esi]
mov edx, dword [edx + 0x880]
mov ecx, dword [esi]
mov dword [ecx + eax*4 + 0x370], edx
inc eax
cmp eax, 0x140
jne 0x5a31fe
mov eax, dword [esi]
movzx edx, word [0x5a3aac]
mov word [eax + 0x870], dx
push 0x10
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
test ah, 0x80
je 0x5a3267
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3ab0]
mov edx, dword [esi]
mov word [edx + 0x870], ax
push 0x11
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
test ah, 0x80
je 0x5a328f
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3ab4]
mov edx, dword [esi]
mov word [edx + 0x870], ax
push 0x12
call sub.user32.dll_GetAsyncKeyState
movsx eax, ax
test ah, 0x80
je 0x5a32b7
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3ab8]
mov edx, dword [esi]
mov word [edx + 0x870], ax
mov eax, dword [esi]
cmp byte [eax + 0xf1], 0
je 0x5a32db
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3abc]
mov edx, dword [esi]
mov word [edx + 0x870], ax
mov eax, dword [esi]
cmp byte [eax + 0xf2], 0
je 0x5a32ff
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3ac0]
mov edx, dword [esi]
mov word [edx + 0x870], ax
mov eax, dword [esi]
cmp byte [eax + 0xf4], 0
je 0x5a3323
mov eax, dword [esi]
movzx eax, word [eax + 0x870]
or ax, word [0x5a3ac4]
mov edx, dword [esi]
mov word [edx + 0x870], ax
mov edx, 1
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
jne 0x5a3377
mov edx, 2
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
jne 0x5a3377
mov edx, 4
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
jne 0x5a3377
mov eax, dword [esi]
mov byte [eax + 0xa54], 0
mov eax, dword [esi]
mov byte [eax + 0xa55], 0
mov eax, dword [esi]
mov byte [eax + 0x8a8], 0
mov eax, dword [esi]
mov byte [eax + 0x8a9], 0
mov edx, 1
mov eax, dword [esi]
call fcn.005a3ba4
test al, al
jne 0x5a33ab
mov edx, 2
mov eax, dword [esi]
call fcn.005a3ba4
test al, al
jne 0x5a33ab
mov edx, 4
mov eax, dword [esi]
call fcn.005a3ba4
test al, al
je 0x5a3504
xor ebx, ebx
mov edx, 1
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
je 0x5a33be
inc ebx
mov edx, 2
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
je 0x5a33cf
inc ebx
mov edx, 4
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
je 0x5a33e0
inc ebx
cmp ebx, 2
jge 0x5a34fc
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
mov edx, dword [esi]
mov dword [edx + 0x894], eax
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
mov edx, dword [esi]
mov dword [edx + 0x898], eax
mov eax, dword [esi]
mov byte [eax + 0x8a8], 0
mov eax, dword [esi]
mov byte [eax + 0x8aa], 0
mov eax, dword [esi]
mov byte [eax + 0x8a9], 0
mov eax, dword [esi]
mov dword [eax + 0x8ac], 0xffff0001
mov eax, dword [esi]
mov dword [eax + 0x8b0], 0xffff0001
mov edx, 1
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a3466
mov edx, 2
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a3466
mov edx, 4
mov eax, dword [esi]
call fcn.005a4244
test al, al
je 0x5a34e1
mov eax, dword [esi]
fld dword [eax + 0x8c4]
mov eax, dword [esi]
fmul dword [eax + 0x8c4]
mov eax, dword [esi]
fld dword [eax + 0x8c8]
mov eax, dword [esi]
fmul dword [eax + 0x8c8]
faddp st(1)
fcomp dword [0x5a3ac8]
wait
fnstsw ax
sahf
jbe 0x5a34e1
mov eax, dword [esi]
mov byte [eax + 0x8aa], 1
mov eax, dword [esi]
mov byte [eax + 0x8a0], 1
mov eax, dword [esi]
mov byte [eax + 0x8a9], 1
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
mov edx, dword [esi]
mov dword [edx + 0x8ac], eax
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
mov edx, dword [esi]
mov dword [edx + 0x8b0], eax
mov eax, dword [esi]
call fcn.005a480c
mov edx, dword [esi]
mov dword [edx + 0x48], eax
mov eax, dword [esi]
call fcn.005a4810
mov edx, dword [esi]
mov dword [edx + 0x4c], eax
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c4], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c8], edx
mov eax, dword [esi]
call fcn.005a42a0
mov eax, dword [esi]
inc dword [eax + 0x89c]
mov edx, 1
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
jne 0x5a3534
mov edx, 2
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
jne 0x5a3534
mov edx, 4
mov eax, dword [esi]
call fcn.005a3ca8
test al, al
je 0x5a356c
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
push eax
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
push eax
mov eax, dword [esi]
mov ecx, dword [eax + 0x898]
mov eax, dword [esi]
mov edx, dword [eax + 0x894]
mov eax, dword [esi]
call fcn.005a40d0
mov edx, dword [esi]
cmp eax, dword [edx + 0x8a4]
jle 0x5a35a5
mov eax, dword [esi]
mov byte [eax + 0x8a0], 1
jmp 0x5a35a5
mov edx, 1
mov eax, dword [esi]
call fcn.005a3be0
test al, al
jne 0x5a35a5
mov edx, 2
mov eax, dword [esi]
call fcn.005a3be0
test al, al
jne 0x5a35a5
mov edx, 4
mov eax, dword [esi]
call fcn.005a3be0
test al, al
jne 0x5a35a5
mov eax, dword [esi]
mov byte [eax + 0x8a0], 0
mov eax, dword [esi]
cmp byte [eax + 0xa55], 0
jne 0x5a35bb
mov eax, dword [esi]
cmp byte [eax + 0xa54], 0
je 0x5a35c4
mov eax, dword [esi]
mov byte [eax + 0x8a0], 0
mov eax, dword [esi]
cmp dword [eax + 0xa60], 0
je 0x5a35da
mov eax, dword [esi]
cmp byte [eax + 0xa55], 0
je 0x5a35e8
mov eax, dword [esi]
mov byte [eax + 0x8a8], 0
jmp 0x5a36e2
mov edx, 1
mov eax, dword [esi]
call fcn.005a435c
test al, al
jne 0x5a361c
mov edx, 2
mov eax, dword [esi]
call fcn.005a435c
test al, al
jne 0x5a361c
mov edx, 4
mov eax, dword [esi]
call fcn.005a435c
test al, al
je 0x5a36c5
mov eax, dword [esi]
cmp byte [eax + 0x8a0], 0
je 0x5a36ce
mov eax, dword [esi]
mov byte [eax + 0x8a8], 1
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
push eax
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
push eax
mov eax, dword [esi]
movzx eax, byte [eax + 0xa64]
push eax
mov eax, dword [esi]
mov ecx, dword [eax + 0x898]
mov eax, dword [esi]
mov edx, dword [eax + 0x894]
mov eax, dword [esi]
call fcn.005a3f78
mov ebx, eax
mov edx, 1
mov eax, dword [esi]
call fcn.005a435c
test al, al
je 0x5a3683
lea eax, [ebx + 0x100]
mov edx, dword [esi]
mov byte [edx + eax + 0xf0], 1
mov edx, 2
mov eax, dword [esi]
call fcn.005a435c
test al, al
je 0x5a36a3
lea eax, [ebx + 0x108]
mov edx, dword [esi]
mov byte [edx + eax + 0xf0], 1
mov edx, 4
mov eax, dword [esi]
call fcn.005a435c
test al, al
je 0x5a36ce
add ebx, 0x110
mov eax, dword [esi]
mov byte [eax + ebx + 0xf0], 1
jmp 0x5a36ce
mov eax, dword [esi]
mov byte [eax + 0x8a8], 0
mov eax, dword [esi]
cmp byte [eax + 0x8a8], 0
je 0x5a36e2
mov eax, dword [esi]
mov byte [eax + 0x210], 1
mov eax, dword [esi]
cmp dword [eax + 0xa68], 0
je 0x5a36f8
mov eax, dword [esi]
cmp byte [eax + 0xa54], 0
je 0x5a373b
mov eax, dword [esi]
mov byte [eax + 0x8a9], 0
mov eax, dword [esi]
mov byte [eax + 0x8aa], 0
mov eax, dword [esi]
mov dword [eax + 0x8ac], 0xffff0001
mov eax, dword [esi]
mov dword [eax + 0x8b0], 0xffff0001
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c4], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c8], edx
jmp 0x5a39da
mov edx, 1
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a376b
mov edx, 2
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a376b
mov edx, 4
mov eax, dword [esi]
call fcn.005a4244
test al, al
je 0x5a37b2
mov eax, dword [esi]
cmp byte [eax + 0x8a0], 0
je 0x5a377f
mov eax, dword [esi]
mov byte [eax + 0x8a9], 1
mov eax, dword [esi]
cmp byte [eax + 0x8a9], 0
je 0x5a37b2
mov eax, dword [esi]
cmp dword [eax + 0x8ac], 0xffff0001
jne 0x5a37b2
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
mov edx, dword [esi]
mov dword [edx + 0x8ac], eax
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
mov edx, dword [esi]
mov dword [edx + 0x8b0], eax
mov eax, dword [esi]
cmp byte [eax + 0x8a9], 0
je 0x5a37c6
mov eax, dword [esi]
mov byte [eax + 0x211], 1
mov edx, 1
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a37fa
mov edx, 2
mov eax, dword [esi]
call fcn.005a4244
test al, al
jne 0x5a37fa
mov edx, 4
mov eax, dword [esi]
call fcn.005a4244
test al, al
je 0x5a38c6
mov eax, dword [esi]
cmp byte [eax + 0x8a0], 0
je 0x5a3908
mov eax, dword [esi]
cmp byte [eax + 0xa6c], 0
je 0x5a3857
push ebp
mov eax, dword [esi]
mov eax, dword [eax + 0x40]
mov edx, dword [esi]
sub eax, dword [edx + 0x48]
mov dword [ebp - 0x10c], eax
fild dword [ebp - 0x10c]
add esp, 0xfffffffc
fstp dword [esp]
wait
mov eax, dword [esi]
mov eax, dword [eax + 0x44]
mov edx, dword [esi]
sub eax, dword [edx + 0x4c]
mov dword [ebp - 0x110], eax
fild dword [ebp - 0x110]
add esp, 0xfffffffc
fstp dword [esp]
wait
call fcn.005a2cb8
pop ecx
jmp 0x5a386b
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c4], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c8], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8b4], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8b8], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8bc], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8c0], edx
mov eax, dword [esi]
lea edx, [eax + 0x8c8]
mov eax, dword [esi]
add eax, 0x8c4
mov ecx, dword [ebp - 8]
call fcn.005a2f24
mov eax, dword [esi]
push dword [eax + 0x8c4]
mov eax, dword [esi]
push dword [eax + 0x8c8]
mov edx, dword [ebp - 8]
mov eax, dword [esi]
call fcn.005a430c
jmp 0x5a3908
mov eax, dword [esi]
cmp byte [eax + 0xa6c], 0
je 0x5a3908
mov edx, 1
mov eax, dword [esi]
call fcn.005a3be0
test al, al
jne 0x5a3901
mov edx, 2
mov eax, dword [esi]
call fcn.005a3be0
test al, al
jne 0x5a3901
mov edx, 4
mov eax, dword [esi]
call fcn.005a3be0
test al, al
je 0x5a3908
push ebp
call fcn.005a2e40
pop ecx
mov eax, dword [esi]
cmp byte [eax + 0x8a9], 0
je 0x5a391c
mov eax, dword [esi]
mov byte [eax + 0x211], 1
mov eax, dword [esi]
mov eax, dword [eax + 0x8b4]
mov edx, dword [esi]
mov dword [edx + 0x8bc], eax
mov eax, dword [esi]
mov eax, dword [eax + 0x8b8]
mov edx, dword [esi]
mov dword [edx + 0x8c0], eax
mov eax, dword [esi]
mov edx, dword [ebp - 8]
add dword [eax + 0x8cc], edx
mov eax, dword [esi]
cmp dword [eax + 0x8cc], 0x3e8
jle 0x5a39cf
mov eax, dword [esi]
mov dword [eax + 0x8cc], 0x64
jmp 0x5a39cf
mov eax, dword [esi]
fld dword [eax + 0x8b4]
mov eax, dword [esi]
fadd dword [eax + 0x8c4]
mov eax, dword [esi]
fstp dword [eax + 0x8b4]
wait
mov eax, dword [esi]
fld dword [eax + 0x8b8]
mov eax, dword [esi]
fadd dword [eax + 0x8c8]
mov eax, dword [esi]
fstp dword [eax + 0x8b8]
wait
push ebp
mov eax, dword [esi]
lea edx, [eax + 0x8c8]
mov eax, dword [esi]
add eax, 0x8c4
call fcn.005a2d70
pop ecx
mov eax, dword [esi]
mov ebx, dword [eax + 0x8cc]
sub ebx, 0x10
sub ebx, 4
mov eax, dword [esi]
mov dword [eax + 0x8cc], ebx
test ebx, ebx
jge 0x5a39cf
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0x8cc], edx
mov eax, dword [esi]
cmp dword [eax + 0x8cc], 0xc
jge 0x5a3963
mov eax, dword [esi]
cmp dword [eax + 0xa0], 0
je 0x5a3a2d
mov eax, dword [esi]
mov eax, dword [eax + 0xa0]
mov edx, 0x5a3ad8
call fcn.00407b38
jne 0x5a3a2d
mov eax, dword [esi]
mov eax, dword [eax + 0xb0]
mov edx, dword [esi]
mov dword [edx + 0xe8], eax
mov eax, dword [esi]
mov eax, dword [eax + 0xb4]
mov edx, dword [esi]
mov dword [edx + 0xec], eax
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0xb0], edx
mov eax, dword [esi]
xor edx, edx
mov dword [eax + 0xb4], edx
mov eax, dword [esi]
cmp byte [eax + 0x75], 0
je 0x5a3a3b
mov eax, dword [esi]
mov byte [eax + 0x74], 0
mov eax, dword [esi]
cmp byte [eax + 0x77], 0
je 0x5a3a49
mov eax, dword [esi]
mov byte [eax + 0x76], 0
mov eax, dword [esi]
cmp byte [eax + 0x79], 0
je 0x5a3a57
mov eax, dword [esi]
mov byte [eax + 0x78], 0
mov eax, dword [esi]
cmp byte [eax + 0x95], 0
je 0x5a3a6b
mov eax, dword [esi]
mov byte [eax + 0x94], 0
mov eax, dword [esi]
mov byte [eax + 0x75], 0
mov eax, dword [esi]
mov byte [eax + 0x77], 0
mov eax, dword [esi]
mov byte [eax + 0x79], 0
mov eax, dword [esi]
mov byte [eax + 0x95], 0
mov eax, dword [esi]
mov byte [eax + 0x9c], 0
mov eax, dword [esi]
mov byte [eax + 0x68], 0
mov eax, dword [esi]
mov eax, dword [eax + 0x880]
mov edx, dword [esi]
mov dword [edx + 0x874], eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret