Function at 0x409790
Capabilities:
Log keystrokes via polling

Disassembly:
sub esp, 0x74
lea eax, [esp]
push ebx
push esi
push edi
mov esi, ecx
push eax
call dword [sym.imp.USER32.dll_GetCursorPos]
mov edx, dword [esi + 0x1c]
lea ecx, [esp + 0xc]
push ecx
push edx
call dword [sym.imp.USER32.dll_ScreenToClient]
lea eax, [esp + 0x14]
mov ecx, 0x43c460
push eax
call fcn.0040c590
mov ecx, dword [0x43a314]
lea edi, [esi + 0x3f8]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
xor ebx, ebx
cmp eax, ebx
je 0x4097f7
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x1c]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
mov edx, dword [0x43a30c]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409825
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x1c]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
mov ecx, dword [0x43a304]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409853
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x1c]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
mov edx, dword [0x43a2fc]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409881
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x1c]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
mov ecx, dword [0x43a2f4]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x4098af
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x1c]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
mov eax, 0x1e
mov edx, 5
mov dword [esp + 0x2c], eax
mov dword [esp + 0x3c], eax
mov eax, 0x1ef
mov dword [esp + 0x24], edx
mov dword [esp + 0x34], edx
mov ecx, 0x199
mov dword [esp + 0x70], edx
mov edx, dword [esp + 0x10]
mov dword [esp + 0x48], eax
mov dword [esp + 0x58], eax
mov dword [esp + 0x68], eax
mov eax, dword [esp + 0xc]
push ebp
mov dword [esp + 0x44], ecx
mov dword [esp + 0x54], ecx
mov dword [esp + 0x64], ecx
push edx
lea ecx, [esp + 0x28]
push eax
push ecx
mov dword [esp + 0x30], 0x200
mov dword [esp + 0x38], 0x219
mov dword [esp + 0x40], 0x1e2
mov dword [esp + 0x48], 0x1fb
mov dword [esp + 0x54], 0x15c
mov dword [esp + 0x5c], 0x177
mov dword [esp + 0x64], 0x185
mov dword [esp + 0x6c], 0x1a0
mov dword [esp + 0x74], 0x133
mov dword [esp + 0x7c], 0x14e
mov dword [esp + 0x84], 0x1bd
mov dword [esp + 0x88], 0xb9
mov dword [esp + 0x8c], 0x1e5
call dword [sym.imp.USER32.dll_PtInRect]
mov ebp, dword [sym.imp.WINMM.dll_sndPlaySoundA]
test eax, eax
je 0x409a22
mov edx, dword [0x43a2ec]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x4099b2
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x20]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
cmp byte [esi + 0x389], 1
jne 0x4099ca
push 1
push str.sound_a0.wav
call ebp
mov byte [esi + 0x389], bl
push 1
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jge 0x409a22
mov ecx, dword [0x43a2d4]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409a05
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x20]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
push 1
push str.sound_b0.wav
mov dword [esi + 0x64], 1
mov byte [esi + 0x38a], 1
call ebp
mov byte [esi + 0x38a], bl
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x10]
push edx
lea ecx, [esp + 0x38]
push eax
push ecx
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x409add
mov edx, dword [0x43a2bc]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409a6d
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x20]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
cmp byte [esi + 0x389], 1
jne 0x409a85
push 1
push str.sound_a0.wav
call ebp
mov byte [esi + 0x389], bl
push 1
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jge 0x409add
mov ecx, dword [0x43a2b4]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409ac0
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x20]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
push 1
push str.sound_b0.wav
mov dword [esi + 0x64], 2
mov byte [esi + 0x38a], 1
call ebp
mov byte [esi + 0x38a], bl
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x10]
push edx
lea ecx, [esp + 0x48]
push eax
push ecx
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x409b98
mov edx, dword [0x43a2ac]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409b28
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x20]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
cmp byte [esi + 0x389], 1
jne 0x409b40
push 1
push str.sound_a0.wav
call ebp
mov byte [esi + 0x389], bl
push 1
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jge 0x409b98
mov ecx, dword [0x43a2a4]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409b7b
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x20]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
push 1
push str.sound_b0.wav
mov dword [esi + 0x64], 3
mov byte [esi + 0x38a], 1
call ebp
mov byte [esi + 0x38a], bl
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x10]
push edx
lea ecx, [esp + 0x58]
push eax
push ecx
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x409c53
mov edx, dword [0x43a29c]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409be3
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x20]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
cmp byte [esi + 0x389], 1
jne 0x409bfb
push 1
push str.sound_a0.wav
call ebp
mov byte [esi + 0x389], bl
push 1
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jge 0x409c53
mov ecx, dword [0x43a294]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409c36
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x20]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
push 1
push str.sound_b0.wav
mov dword [esi + 0x64], 4
mov byte [esi + 0x38a], 1
call ebp
mov byte [esi + 0x38a], bl
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x10]
push edx
lea ecx, [esp + 0x68]
push eax
push ecx
call dword [sym.imp.USER32.dll_PtInRect]
test eax, eax
je 0x409d21
cmp byte [esi + 0x399], 1
jne 0x409d21
mov edx, dword [0x43a28c]
mov ecx, 0x43c460
push edx
push edi
call fcn.0040d7d0
cmp eax, ebx
je 0x409cab
mov ecx, dword [eax + 0x20]
mov edx, dword [eax + 0x1c]
push eax
push ecx
lea eax, [esp + 0x20]
push edx
push eax
mov ecx, 0x43c460
call fcn.0040d030
cmp byte [esi + 0x389], 1
jne 0x409cc3
push 1
push str.sound_a0.wav
call ebp
mov byte [esi + 0x389], bl
push 1
call dword [sym.imp.USER32.dll_GetAsyncKeyState]
test ax, ax
jge 0x409d21
mov ecx, dword [0x43a284]
push ecx
push edi
mov ecx, 0x43c460
call fcn.0040d7d0
cmp eax, ebx
je 0x409cfe
mov edx, dword [eax + 0x20]
push eax
mov eax, dword [eax + 0x1c]
push edx
lea ecx, [esp + 0x20]
push eax
push ecx
mov ecx, 0x43c460
call fcn.0040d030
push 1
push str.sound_b0.wav
mov dword [esi + 0x64], 5
mov byte [esi + 0x399], bl
mov byte [esi + 0x38a], 1
call ebp
mov byte [esi + 0x38a], bl
mov ebx, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push 1
call ebx
test ax, ax
pop ebp
jl 0x409d3f
mov byte [esi + 0x399], 1
mov byte [esi + 0x38a], 1
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
mov edi, dword [sym.imp.USER32.dll_PtInRect]
push edx
lea ecx, [esp + 0x74]
push eax
push ecx
call edi
test eax, eax
je 0x409d6a
push 1
call ebx
test ax, ax
jge 0x409d6a
mov dword [esi + 0x64], 6
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x24]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x34]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x44]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x54]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x64]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0xc]
push edx
lea ecx, [esp + 0x74]
push eax
push ecx
call edi
test eax, eax
jne 0x409def
mov byte [esi + 0x389], 1
pop edi
pop esi
pop ebx
add esp, 0x74
ret