Function at 0x455e20
Capabilities:
Log keystrokes via polling
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x5c
mov edx, dword [ecx + 0x398]
mov eax, dword [esp + 0x70]
test edx, edx
je case.0x455f5a.259
mov ebx, ecx
cmp eax, 0x232
ja 0x4565e0
cmp eax, 0x1ff
jbe 0x455f30
sub eax, 0x200
cmp eax, 0x32
ja case.0x455f5a.259
jmp dword [eax*4 + 0x4f61cc]
mov dword [esp + 0x3c], 6
mov esi, dword [sym.imp.USER32.dll_GetKeyState]
mov dword [esp], 0x12
call esi
cwde
sub esp, 4
shr eax, 0x10
mov dword [esp], 0x11
setne byte [esp + 0x48]
call esi
cwde
sub esp, 4
shr eax, 0x10
mov dword [esp], 0x10
setne byte [esp + 0x49]
call esi
cwde
sub esp, 4
shr eax, 0x10
mov dword [esp], 0x5b
setne byte [esp + 0x4a]
call esi
mov edx, 1
cwde
sub esp, 4
shr eax, 0x10
je 0x456670
mov eax, dword [esp + 0x78]
mov byte [esp + 0x4b], dl
mov dword [esp + 4], eax
mov eax, dword [esp + 0x74]
mov dword [esp], eax
call method.sf::priv::WindowImplWin32.virtualKeyCodeToSF_unsigned_int__long_
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x78]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x74]
mov dword [esp], eax
call method.sf::priv::WindowImplWin32.toScancode_unsigned_int__long_
mov dword [esp + 0x44], eax
lea esi, [esi]
lea eax, [esp + 0x3c]
mov ecx, ebx
mov dword [esp], eax
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
add esp, 0x5c
pop ebx
pop esi
pop edi
pop ebp
ret 0xc
cmp eax, 0x24
ja 0x455f50
cmp eax, 1
jbe case.0x455f5a.259
cmp eax, 0x24
ja case.0x455f5a.259
jmp dword [eax*4 + 0x4f6298]
sub eax, 0x100
cmp eax, 5
ja case.0x455f5a.259
jmp dword [eax*4 + 0x4f632c]
cmp byte [ebx + 0x3ac], 0
jne 0x455f7b
test dword [esp + 0x78], 0x40000000
jne case.0x455f5a.259
mov dword [esp + 0x3c], 5
jmp 0x455e78
cmp byte [ebx + 0x3ac], 0
jne 0x455fa7
test dword [esp + 0x78], 0x40000000
jne case.0x455f5a.259
mov eax, dword [esp + 0x74]
mov dword [esp + 0x2c], eax
sub eax, 0xd800
cmp eax, 0x3ff
ja 0x4566e0
movzx eax, word [esp + 0x74]
mov word [ebx + 0x3ba], ax
jmp case.0x455f5a.259
mov dword [esp + 0x3c], 9
mov dword [esp + 0x40], 1
movsx eax, word [esp + 0x78]
mov dword [esp + 0x44], eax
mov eax, dword [esp + 0x78]
sar eax, 0x10
mov dword [esp + 0x48], eax
jmp 0x455f10
movsx eax, word [esp + 0x78]
mov dword [esp], edx
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x78]
sar eax, 0x10
mov dword [esp + 0x30], eax
lea eax, [esp + 0x2c]
mov dword [esp + 4], eax
call dword [sym.imp.USER32.dll_ScreenToClient]
mov ecx, ebx
sub esp, 8
mov eax, dword [esp + 0x74]
mov esi, dword [esp + 0x74]
lea edi, [esp + 0x3c]
mov dword [esp + 0x3c], 7
mov dword [esp], edi
sar eax, 0x10
shr esi, 0x10
imul eax, eax, 0xffff8889
mov edx, esi
sar dx, 0xf
shr eax, 0x10
add eax, esi
sar ax, 6
sub eax, edx
cwde
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x44], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x48], eax
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
mov ecx, ebx
sub esp, 4
mov word [esp + 0x1e], si
fild word [esp + 0x1e]
fdiv dword [0x4f6344]
mov eax, dword [esp + 0x2c]
mov dword [esp], edi
mov dword [esp + 0x3c], 8
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x40], 0
mov dword [esp + 0x4c], eax
fstp dword [esp + 0x44]
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
jmp case.0x455f5a.259
mov dword [esp + 0x3c], 9
mov eax, dword [esp + 0x74]
shr eax, 0x10
cmp eax, 1
setne al
movzx eax, al
add eax, 3
mov dword [esp + 0x40], eax
jmp 0x455fe0
mov dword [esp + 0x3c], 0xa
jmp 0x4560c1
movsx eax, word [esp + 0x78]
mov dword [esp], edx
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x78]
sar eax, 0x10
mov dword [esp + 0x30], eax
lea eax, [esp + 0x2c]
mov dword [esp + 4], eax
call dword [sym.imp.USER32.dll_ScreenToClient]
sub esp, 8
mov eax, dword [esp + 0x74]
mov dword [esp + 0x3c], 8
mov dword [esp + 0x40], 1
shr eax, 0x10
mov word [esp + 0x1e], ax
fild word [esp + 0x1e]
mov eax, dword [esp + 0x2c]
fchs
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0x30]
fdiv dword [0x4f6344]
mov dword [esp + 0x4c], eax
fstp dword [esp + 0x44]
jmp 0x455f10
mov eax, dword [esp + 0x74]
and eax, 0xfffffffb
cmp eax, 0x8000
jne case.0x455f5a.259
mov eax, dword [esp + 0x78]
test eax, eax
je case.0x455f5a.259
mov eax, dword [esp + 0x78]
cmp dword [eax + 4], 5
jne case.0x455f5a.259
call method.sf::priv::JoystickImpl.updateConnections__
jmp case.0x455f5a.259
mov byte [ecx + 0x3b8], 1
mov dword [esp], 0
call dword [sym.imp.USER32.dll_ClipCursor]
sub esp, 4
jmp case.0x455f5a.259
mov eax, dword [ecx]
mov byte [ecx + 0x3b8], 0
mov eax, dword [eax + 0x14]
cmp eax, method.sf::priv::WindowImplWin32.getSize___const
jne 0x456744
lea esi, [esp + 0x3c]
mov dword [esp], edx
mov dword [esp + 4], esi
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x44]
sub edx, dword [esp + 0x40]
sub eax, dword [esp + 0x3c]
cmp dword [ebx + 0x3b0], eax
je 0x456720
mov eax, dword [ebx]
mov eax, dword [eax + 0x14]
cmp eax, method.sf::priv::WindowImplWin32.getSize___const
jne 0x45674b
lea esi, [esp + 0x3c]
mov dword [esp + 4], esi
mov eax, dword [ebx + 0x398]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x44]
sub edx, dword [esp + 0x40]
sub eax, dword [esp + 0x3c]
mov dword [ebx + 0x3b0], eax
mov dword [ebx + 0x3b4], edx
mov dword [esp], esi
mov ecx, ebx
mov dword [esp + 0x3c], 1
mov dword [esp + 0x40], eax
mov dword [esp + 0x44], edx
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
cmp byte [ebx + 0x3be], 0
je 0x456197
lea esi, [esp + 0x3c]
mov dword [esp + 4], esi
mov eax, dword [ebx + 0x398]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov dword [esp + 0xc], 2
mov dword [esp + 8], esi
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x398]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_MapWindowPoints]
sub esp, 0x10
mov dword [esp], esi
call dword [sym.imp.USER32.dll_ClipCursor]
sub esp, 4
jmp case.0x455f5a.259
mov dword [esp + 0x3c], 9
mov dword [esp + 0x40], 0
jmp 0x455fe0
lea eax, [esp + 0x2c]
mov edi, dword [esp + 0x78]
movsx ebp, word [esp + 0x78]
mov dword [esp], edx
mov dword [esp + 4], eax
call dword [sym.imp.USER32.dll_GetClientRect]
sar edi, 0x10
sub esp, 8
test byte [esp + 0x74], 0x73
jne 0x4566b0
call dword [sym.imp.USER32.dll_GetCapture]
cmp dword [ebx + 0x398], eax
je 0x45683b
movzx eax, byte [ebx + 0x3bc]
cmp dword [esp + 0x2c], ebp
jg 0x456610
cmp dword [esp + 0x34], ebp
jl 0x456610
cmp dword [esp + 0x30], edi
jg 0x456610
cmp dword [esp + 0x38], edi
jl 0x456610
lea esi, [esp + 0x3c]
test al, al
je 0x456866
lea esi, [esi]
mov dword [esp], esi
mov ecx, ebx
mov dword [esp + 0x3c], 0xb
mov dword [esp + 0x40], ebp
mov dword [esp + 0x44], edi
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
jmp case.0x455f5a.259
mov dword [esp + 0x3c], 9
mov dword [esp + 0x40], 2
jmp 0x455fe0
mov dword [esp + 0x3c], 0xa
mov dword [esp + 0x40], 2
jmp 0x455fe0
mov dword [esp + 0x3c], 0xa
mov dword [esp + 0x40], 1
jmp 0x455fe0
mov dword [esp + 0x3c], 0xa
mov dword [esp + 0x40], 0
jmp 0x455fe0
mov eax, dword [esp + 0x78]
mov dword [eax + 0x20], 0xc350
mov dword [eax + 0x24], 0xc350
jmp case.0x455f5a.259
cmp dword [esp + 0x74], 1
je case.0x455f5a.259
cmp byte [ecx + 0x3b8], 0
jne case.0x455f5a.259
mov eax, dword [ecx]
mov eax, dword [eax + 0x14]
cmp eax, method.sf::priv::WindowImplWin32.getSize___const
jne 0x456846
lea esi, [esp + 0x3c]
mov dword [esp], edx
mov dword [esp + 4], esi
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x44]
sub edx, dword [esp + 0x40]
sub eax, dword [esp + 0x3c]
cmp dword [ebx + 0x3b0], eax
je 0x45682a
mov eax, dword [ebx]
mov eax, dword [eax + 0x14]
cmp eax, method.sf::priv::WindowImplWin32.getSize___const
jne 0x45684d
lea esi, [esp + 0x3c]
mov dword [esp + 4], esi
mov eax, dword [ebx + 0x398]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x44]
sub edx, dword [esp + 0x40]
sub eax, dword [esp + 0x3c]
mov dword [ebx + 0x3b0], eax
mov dword [ebx + 0x3b4], edx
mov dword [esp], esi
mov ecx, ebx
mov dword [esp + 0x3c], 1
mov dword [esp + 0x40], eax
mov dword [esp + 0x44], edx
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
cmp byte [ebx + 0x3be], 0
lea esi, [esp + 0x2c]
jne 0x456267
jmp 0x456197
cmp ecx, dword [0x534994]
je 0x456764
mov eax, dword [ebx]
mov eax, dword [eax + 0x28]
cmp eax, method.sf::priv::WindowImplWin32.setMouseCursorVisible_bool_
jne 0x456731
mov eax, dword [ebx + 0x3a4]
mov byte [ebx + 0x3a0], 1
mov dword [esp], eax
call dword [sym.imp.USER32.dll_SetCursor]
sub esp, 4
mov eax, dword [ebx + 0x398]
mov dword [esp + 0x3c], 0x10
mov dword [esp + 0x40], 0x80000000
mov dword [esp + 0x44], eax
lea eax, [esp + 0x3c]
mov dword [esp + 0x48], 0xffffffff
mov dword [esp], eax
call dword [sym.imp.USER32.dll_TrackMouseEvent]
sub esp, 4
call dword [sym.imp.USER32.dll_ReleaseCapture]
jmp case.0x455f5a.259
cmp word [esp + 0x78], 1
jne case.0x455f5a.259
xor eax, eax
cmp byte [ecx + 0x3a0], 0
je 0x456535
mov eax, dword [ecx + 0x3a4]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_SetCursor]
sub esp, 4
jmp case.0x455f5a.259
mov dword [esp + 0x3c], 0
jmp 0x455f10
mov dword [esp], 0
call dword [sym.imp.USER32.dll_ClipCursor]
sub esp, 4
mov dword [esp + 0x3c], 2
jmp 0x455f10
cmp byte [ecx + 0x3be], 0
je 0x456690
lea esi, [esp + 0x3c]
mov dword [esp], edx
mov dword [esp + 4], esi
call dword [sym.imp.USER32.dll_GetClientRect]
sub esp, 8
mov dword [esp + 0xc], 2
mov dword [esp + 8], esi
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x398]
mov dword [esp], eax
call dword [sym.imp.USER32.dll_MapWindowPoints]
sub esp, 0x10
mov dword [esp], esi
call dword [sym.imp.USER32.dll_ClipCursor]
sub esp, 4
mov dword [esp], esi
mov ecx, ebx
mov dword [esp + 0x3c], 3
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
jmp case.0x455f5a.259
cmp eax, 0x2a3
jne case.0x455f5a.259
cmp byte [ecx + 0x3bc], 0
je case.0x455f5a.259
mov byte [ecx + 0x3bc], 0
mov dword [esp + 0x3c], 0xd
jmp 0x455f10
lea esi, [esp + 0x3c]
test al, al
je 0x456348
mov eax, dword [ebx + 0x398]
mov byte [ebx + 0x3bc], 0
mov dword [esp + 0x3c], 0x10
mov dword [esp + 0x40], 0x80000000
mov dword [esp + 0x44], eax
mov dword [esp + 0x48], 0xffffffff
mov dword [esp], esi
call dword [sym.imp.USER32.dll_TrackMouseEvent]
mov ecx, ebx
sub esp, 4
mov dword [esp], esi
mov dword [esp + 0x3c], 0xd
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
jmp 0x456348
mov dword [esp], 0x5c
call esi
cwde
sub esp, 4
shr eax, 0x10
setne dl
jmp 0x455ed8
mov dword [esp], 0
call dword [sym.imp.USER32.dll_ClipCursor]
sub esp, 4
lea esi, [esp + 0x3c]
jmp 0x4565c3
call dword [sym.imp.USER32.dll_GetCapture]
mov edx, eax
mov eax, dword [ebx + 0x398]
cmp eax, edx
je 0x456306
mov dword [esp], eax
call dword [sym.imp.USER32.dll_SetCapture]
sub esp, 4
jmp 0x456306
mov eax, dword [esp + 0x74]
lea esi, [esp + 0x3c]
sub eax, 0xdc00
cmp eax, 0x3ff
jbe 0x45678b
mov dword [esp], esi
mov eax, dword [esp + 0x74]
mov ecx, ebx
mov dword [esp + 0x3c], 4
mov dword [esp + 0x40], eax
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
sub esp, 4
jmp case.0x455f5a.259
cmp dword [ebx + 0x3b4], edx
jne 0x4561f3
jmp 0x456256
mov dword [esp], 1
mov ecx, ebx
call eax
sub esp, 4
jmp 0x4564db
call eax
jmp 0x4561e7
mov ecx, ebx
lea esi, [esp + 0x3c]
call eax
mov dword [ebx + 0x3b0], eax
mov dword [ebx + 0x3b4], edx
jmp 0x456239
mov dword [esp + 4], 0
mov dword [esp], 0
call dword [sym.imp.USER32.dll_ChangeDisplaySettingsW]
mov dword [0x534994], 0
sub esp, 8
jmp 0x4564b2
mov ecx, dword [esp + 0x74]
movzx edx, word [ebx + 0x3ba]
shl ecx, 0x10
mov eax, edx
or edx, ecx
lea ecx, [esp + 0x2c]
mov dword [esp + 0x3c], edx
mov edx, esi
lea esi, [esi]
nop
lea edi, [eax + 0x2800]
lea ebp, [edx + 2]
cmp di, 0x3ff
ja 0x4567e8
lea edi, [esp + 0x40]
cmp ebp, edi
jb 0x4567fc
mov dword [ecx], 0
mov eax, dword [esp + 0x2c]
xor edi, edi
mov word [ebx + 0x3ba], di
mov dword [esp + 0x74], eax
jmp 0x4566f8
mov edx, ebp
mov dword [ecx], eax
lea eax, [esp + 0x40]
add ecx, 4
cmp edx, eax
jae 0x4567ce
movzx eax, word [edx]
jmp 0x4567b0
lea edi, [edx + 4]
movzx edx, word [edx + 2]
lea ebp, [edx - 0xdc00]
cmp ebp, 0x3ff
ja 0x456824
sub eax, 0xd800
shl eax, 0xa
lea eax, [edx + eax + 0x2400]
mov edx, edi
jmp 0x4567ea
mov edx, edi
xor eax, eax
jmp 0x4567ea
cmp dword [ebx + 0x3b4], edx
jne 0x45642d
jmp case.0x455f5a.259
call dword [sym.imp.USER32.dll_ReleaseCapture]
jmp 0x456306
call eax
jmp 0x456421
mov ecx, ebx
lea esi, [esp + 0x3c]
call eax
mov dword [ebx + 0x3b0], eax
mov dword [ebx + 0x3b4], edx
jmp 0x456473
mov eax, dword [ebx + 0x398]
mov byte [ebx + 0x3bc], 1
mov dword [esp + 0x3c], 0x10
mov dword [esp + 0x40], 2
mov dword [esp + 0x44], eax
mov dword [esp + 0x48], 0xffffffff
mov dword [esp], esi
call dword [sym.imp.USER32.dll_TrackMouseEvent]
mov ecx, ebx
push edx
mov dword [esp], esi
mov dword [esp + 0x3c], 0xc
call method.sf::priv::WindowImpl.pushEvent_sf::Event_const_
push ecx
jmp 0x456348