Function at 0x4ad130
Capabilities:
Log keystrokes via polling

Disassembly:
push ebx
push ebp
mov ebp, ecx
test byte [ebp + 0x464], 1
push esi
mov esi, dword [esp + 0x18]
push edi
mov dword [ebp + 0x174], esi
je 0x4ad18d
xor ebx, ebx
cmp esi, ebx
je 0x4ad6c6
mov ecx, dword [ebp + 0x14c]
mov eax, dword [ecx]
call dword [eax + 0x88]
test eax, eax
je 0x4ad1c8
mov ecx, dword [esp + 0x18]
mov dword [ecx], 1
mov ebp, dword [ebp + 0x178]
cmp ebp, ebx
je 0x4ad263
pop edi
pop esi
mov dword [ebp], 1
pop ebp
xor eax, eax
pop ebx
ret 0xc
fild dword [ebp + 0x42c]
fstp dword [esp + 0x1c]
fld dword [esp + 0x1c]
fsub dword [esp + 0x14]
call fcn.0061672c
mov dword [ebp + 0x42c], eax
mov eax, dword [ebp + 0x178]
xor ebx, ebx
cmp eax, ebx
je 0x4ad1bc
mov dword [eax], 1
cmp dword [ebp + 0x42c], ebx
jle 0x4ad7c4
cmp esi, ebx
je 0x4ad6c6
mov eax, dword [ebp + 0x464]
test al, 0x14
je 0x4ad26c
mov ecx, dword [ebp + 0x164]
cmp ecx, ebx
je 0x4ad1f4
mov edx, dword [ecx]
call dword [edx + 0x88]
test eax, eax
jne 0x4ad20a
mov ecx, dword [ebp + 0x160]
cmp ecx, ebx
je 0x4ad26c
mov edx, dword [ecx]
call dword [edx + 0x88]
test eax, eax
je 0x4ad26c
mov eax, dword [ebp + 0x178]
cmp eax, ebx
je 0x4ad220
mov dword [eax], 0x14
mov dword [ebp + 0x178], ebx
mov eax, dword [ebp + 0x3e8]
cmp eax, ebx
je 0x4ad232
mov dword [eax], ebx
mov dword [ebp + 0x3e8], ebx
mov eax, dword [ebp + 0x3ec]
cmp eax, ebx
je 0x4ad244
mov byte [eax], bl
mov dword [ebp + 0x3ec], ebx
mov eax, dword [esp + 0x18]
mov dword [eax], 1
mov al, byte [ebp + 0x464]
test al, al
jns 0x4ad263
mov ecx, dword [ebp + 0x168]
call fcn.00426f40
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
ret 0xc
mov eax, dword [ebp + 0x464]
test al, 0xa
jne 0x4ad27f
test ah, 2
je 0x4ad6c6
cmp dword [ebp + 0x158], ebx
je 0x4ad6d2
cmp dword [ebp + 0x468], ebx
je 0x4ad2a0
push 0xd
call dword [sym.imp.user32.dll_GetAsyncKeyState]
test ax, ax
jne 0x4ad2c8
mov ecx, dword [ebp + 0x158]
mov edx, dword [ecx]
call dword [edx + 0x88]
test eax, eax
je 0x4ad6c6
mov ecx, 0x940f08
call fcn.00402dc0
test eax, eax
je 0x4ad6c6
mov eax, dword [ebp + 0x178]
cmp eax, ebx
je 0x4ad2de
mov dword [eax], 0xa
mov dword [ebp + 0x178], ebx
cmp dword [ebp + 0x3e8], ebx
je 0x4ad32f
mov ecx, dword [ebp + 0x168]
mov edi, 0x64f55f
call fcn.004274c0
mov esi, eax
mov ecx, 1
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x4ad321
mov ecx, dword [ebp + 0x168]
call fcn.004274c0
push eax
call fcn.006166ed
mov ecx, dword [ebp + 0x3e8]
add esp, 4
mov dword [ecx], eax
jmp 0x4ad329
mov edx, dword [ebp + 0x3e8]
mov dword [edx], ebx
mov dword [ebp + 0x3e8], ebx
cmp dword [ebp + 0x3ec], ebx
je 0x4ad37f
mov ecx, dword [ebp + 0x16c]
mov edi, 0x64f55f
call fcn.004274c0
mov esi, eax
mov ecx, 1
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x4ad371
mov ecx, dword [ebp + 0x16c]
call fcn.004274c0
mov edx, dword [ebp + 0x3ec]
mov cl, byte [eax]
inc eax
mov byte [edx], cl
inc edx
cmp cl, bl
jne 0x4ad365
jmp 0x4ad379
mov ecx, dword [ebp + 0x3ec]
mov byte [ecx], bl
mov dword [ebp + 0x3ec], ebx
mov edx, dword [esp + 0x18]
mov dword [edx], 1
mov al, byte [ebp + 0x464]
test al, al
jns 0x4ad39e
mov ecx, dword [ebp + 0x168]
call fcn.00426f40
mov eax, dword [ebp + 0x464]
test ah, 1
je 0x4ad3b4
mov ecx, dword [ebp + 0x16c]
call fcn.00426f40
mov eax, dword [ebp + 0x44c]
cmp eax, ebx
jne 0x4ad3c2
xor ecx, ecx
jmp 0x4ad3cd
mov ecx, dword [ebp + 0x450]
sub ecx, eax
sar ecx, 2
mov eax, dword [ebp + 0x458]
inc eax
cmp ecx, eax
jbe 0x4ad7c4
mov ecx, dword [ebp + 0x44c]
mov dword [ebp + 0x458], eax
mov edx, dword [ecx + eax*4]
lea eax, [ecx + eax*4]
push edx
mov ecx, ebp
call fcn.004ace70
mov ecx, dword [ebp + 0x168]
cmp ecx, ebx
je 0x4ad42f
call fcn.0042a700
test eax, eax
je 0x4ad42f
mov eax, dword [ebp + 0x168]
push eax
call fcn.0042d3e0
mov ecx, eax
call fcn.0042d410
call fcn.0042d3e0
mov dword [eax + 0x20], ebx
mov ecx, dword [0x69ec24]
call fcn.0045d770
mov eax, dword [ebp + 0x16c]
cmp eax, ebx
je 0x4ad4d6
push eax
call fcn.0042d3e0
mov ecx, eax
call fcn.0042d410
call fcn.0042d3e0
mov dword [eax + 0x20], ebx
mov ecx, dword [0x6a09dc]
push 4
call fcn.004d0b00
mov esi, dword [eax + 0x34]
cmp esi, ebx
mov ecx, dword [eax + 0x74]
mov edi, dword [eax + 0x70]
mov dword [esp + 0x18], ecx
je 0x4ad483
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 0x60]
test eax, eax
je 0x4ad483
mov esi, dword [esi + 0x1b4]
jmp 0x4ad4b5
cmp edi, ebx
je 0x4ad49a
mov eax, dword [edi]
mov ecx, edi
call dword [eax + 0x60]
test eax, eax
je 0x4ad49a
mov esi, dword [edi + 0x15c]
jmp 0x4ad4b5
mov ecx, dword [esp + 0x18]
cmp ecx, ebx
je 0x4ad4cb
mov edx, dword [ecx]
call dword [edx + 0x60]
test eax, eax
je 0x4ad4cb
mov eax, dword [esp + 0x18]
mov esi, dword [eax + 0x158]
cmp esi, ebx
je 0x4ad4cb
mov ecx, esi
call fcn.00426f40
push 1
mov ecx, esi
call fcn.00426fa0
jmp 0x4ad4d6
mov ecx, dword [0x69ec24]
call fcn.0045d770
mov ecx, dword [ebp + 0x148]
cmp ecx, ebx
je 0x4ad510
mov edx, dword [ecx]
call dword [edx + 0x148]
mov ecx, dword [ebp + 0x148]
mov eax, dword [ebp]
push ecx
mov ecx, ebp
call dword [eax + 0xec]
mov ecx, dword [ebp + 0x148]
cmp ecx, ebx
je 0x4ad510
mov edx, dword [ecx]
push 1
call dword [edx]
mov dword [ebp + 0x148], ebx
mov eax, dword [ebp + 0x14c]
cmp eax, ebx
je 0x4ad53c
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x14c]
cmp ecx, ebx
je 0x4ad53c
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x14c], ebx
mov eax, dword [ebp + 0x150]
cmp eax, ebx
je 0x4ad568
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x150]
cmp ecx, ebx
je 0x4ad568
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x150], ebx
mov eax, dword [ebp + 0x154]
cmp eax, ebx
je 0x4ad594
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x154]
cmp ecx, ebx
je 0x4ad594
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x154], ebx
mov eax, dword [ebp + 0x158]
cmp eax, ebx
je 0x4ad5c0
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x158]
cmp ecx, ebx
je 0x4ad5c0
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x158], ebx
mov eax, dword [ebp + 0x15c]
cmp eax, ebx
je 0x4ad5ec
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x15c]
cmp ecx, ebx
je 0x4ad5ec
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x15c], ebx
mov eax, dword [ebp + 0x160]
cmp eax, ebx
je 0x4ad618
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x160]
cmp ecx, ebx
je 0x4ad618
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x160], ebx
mov eax, dword [ebp + 0x164]
cmp eax, ebx
je 0x4ad644
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x164]
cmp ecx, ebx
je 0x4ad644
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x164], ebx
mov eax, dword [ebp + 0x168]
cmp eax, ebx
je 0x4ad670
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x168]
cmp ecx, ebx
je 0x4ad670
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x168], ebx
mov eax, dword [ebp + 0x16c]
cmp eax, ebx
je 0x4ad69c
mov edx, dword [ebp]
push eax
mov ecx, ebp
call dword [edx + 0xec]
mov ecx, dword [ebp + 0x16c]
cmp ecx, ebx
je 0x4ad69c
mov eax, dword [ecx]
push 1
call dword [eax]
mov dword [ebp + 0x16c], ebx
mov ecx, ebp
call fcn.0046a750
cmp eax, ebx
je 0x4ad6af
mov edx, dword [eax]
push 1
mov ecx, eax
call dword [edx]
mov ecx, ebp
call fcn.004ab370
mov eax, dword [ebp + 0x464]
push ebx
push ebx
push eax
mov ecx, ebp
call fcn.004ab640
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
ret 0xc
cmp dword [ebp + 0x15c], ebx
je 0x4ad6c6
cmp dword [ebp + 0x468], ebx
je 0x4ad6ef
push 0xd
call dword [sym.imp.user32.dll_GetAsyncKeyState]
test ax, ax
jne 0x4ad701
mov ecx, dword [ebp + 0x15c]
mov edx, dword [ecx]
call dword [edx + 0x88]
test eax, eax
je 0x4ad6c6
mov eax, dword [ebp + 0x178]
cmp eax, ebx
je 0x4ad717
mov dword [eax], 0xa
mov dword [ebp + 0x178], ebx
cmp dword [ebp + 0x3e8], ebx
je 0x4ad768
mov ecx, dword [ebp + 0x168]
mov edi, 0x64f55f
call fcn.004274c0
mov esi, eax
mov ecx, 1
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x4ad75a
mov ecx, dword [ebp + 0x168]
call fcn.004274c0
push eax
call fcn.006166ed
mov ecx, dword [ebp + 0x3e8]
add esp, 4
mov dword [ecx], eax
jmp 0x4ad762
mov edx, dword [ebp + 0x3e8]
mov dword [edx], ebx
mov dword [ebp + 0x3e8], ebx
cmp dword [ebp + 0x3ec], ebx
je 0x4ad7ba
mov ecx, dword [ebp + 0x16c]
mov edi, 0x64f55f
call fcn.004274c0
mov esi, eax
mov ecx, 1
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
je 0x4ad7ac
mov ecx, dword [ebp + 0x16c]
call fcn.004274c0
mov edx, dword [ebp + 0x3ec]
mov edi, edi
mov cl, byte [eax]
inc eax
mov byte [edx], cl
inc edx
cmp cl, bl
jne 0x4ad7a0
jmp 0x4ad7b4
mov ecx, dword [ebp + 0x3ec]
mov byte [ecx], bl
mov dword [ebp + 0x3ec], ebx
mov edx, dword [esp + 0x18]
mov dword [edx], 1
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
ret 0xc