Function at 0x4557b4
Capabilities:
Get keyboard layout
Log keystrokes via polling

Disassembly:
sub esp, 0x138
mov eax, dword [0x4adadc]
xor eax, esp
mov dword [esp + 0x134], eax
mov ecx, dword [esp + 0x148]
push ebx
mov ebx, dword [esp + 0x144]
push ebp
push esi
push edi
push 0x48
push dword [0x4af738]
mov dword [esp + 0x30], ecx
mov esi, ecx
mov byte [esp + 0x28], 0
call fcn.0040319c
push 0x4a
push dword [0x4af738]
mov ebp, eax
call fcn.00403019
push 0x63
push dword [0x4af738]
mov byte [esp + 0x2b], al
call fcn.00403019
push 0x55
push dword [0x4af738]
mov byte [esp + 0x53], al
call fcn.00403019
add esp, 0x20
mov byte [esp + 0x1f], al
push 0
call dword [sym.imp.USER32.dll_GetKeyboardLayout]
mov dword [esp + 0x38], eax
lea eax, [esp + 0x44]
push eax
call dword [sym.imp.USER32.dll_GetKeyboardState]
push 0x2b
pop edx
mov dword [esp + 0x18], edx
test eax, eax
jne 0x455866
mov eax, 0x100
push eax
lea eax, [esp + 0x48]
push 0
push eax
call fcn.00467540
add esp, 0xc
jmp 0x4558e6
mov edi, dword [esp + 0x154]
mov ecx, 0x100
cmp ebx, 0x12
jne 0x455896
mov eax, edi
shr eax, 0x10
test cx, ax
movzx ecx, byte [esp + 0xe9]
movzx eax, byte [esp + 0x56]
cmovne ecx, eax
mov byte [esp + 0xe9], cl
xor ecx, ecx
inc ecx
cmp ebp, 3
je 0x4558b7
cmp ebp, ecx
jg 0x4558db
mov eax, dword [0x4af740]
cmp byte [eax + 0x13d], 0
je 0x4558db
cmp byte [esp + 0x13], 0
jne 0x4558db
cmp ebx, 0x90
jne 0x4558db
test byte [esp + 0x54], 0x80
jne 0x4558db
mov eax, edi
mov ebx, edx
shr eax, 0x10
test eax, 0xc000
jne 0x4558db
xor byte [esp + 0xd4], cl
lea eax, [esp + 0x44]
push eax
call dword [sym.imp.USER32.dll_SetKeyboardState]
mov eax, dword [0x4af740]
mov ecx, 0x4000
mov edi, dword [esp + 0x154]
cmp byte [eax + 0x13f], 0
je 0x455916
mov eax, edi
shr eax, 0x10
and eax, 0xc000
cmp ax, cx
jne 0x455916
xor eax, eax
jmp 0x4563af
mov eax, dword [esp + 0x20]
mov edx, 0x80
shr edi, 0x10
mov dword [esp + 0x154], edi
test edi, 0x2000
je 0x455945
test byte [esp + 0xe9], dl
push 1
movzx eax, al
pop ecx
cmove eax, ecx
mov dword [esp + 0x20], eax
mov ecx, edi
shr ecx, 0xf
not cl
and ecx, 0xffffff01
test al, al
mov al, byte [esp + 0x55]
mov dword [esp + 0x40], ecx
je 0x45597c
test dl, al
je 0x45597c
cmp byte [esp + 0x33], 0
je 0x455970
mov byte [esp + 0x56], 0
jmp 0x45597c
mov byte [esp + 0xe9], dl
mov byte [esp + 0x20], 0
mov edx, dword [0x4aebc4]
mov ecx, edi
and ecx, 0x81ff
mov dword [esp + 0x34], ecx
movzx ecx, al
movzx eax, byte [esp + 0x54]
shr ecx, 7
shr eax, 7
lea ecx, [eax + ecx*2]
mov dword [esp + 0x24], ecx
test edx, edx
jne 0x4559f1
push 0x62
push dword [0x4af738]
mov dword [0x4aebcc], 0x100
call fcn.00403019
pop ecx
pop ecx
test al, al
je 0x4559d5
cmp ebx, 0x12
jne 0x4559d5
test edi, 0x100
je 0x4559e7
push ebx
pop eax
jmp 0x4559da
mov eax, dword [0x4aebcc]
push 0x5d
pop ecx
cmp ebx, ecx
cmove eax, ecx
mov dword [0x4aebcc], eax
mov ecx, dword [esp + 0x24]
mov edx, dword [0x4aebc4]
push 2
pop edi
cmp ebx, dword [0x4aebcc]
jne 0x455a34
test edx, edx
jne 0x455a17
mov eax, dword [esp + 0x154]
test eax, 0xc000
jne 0x455a5a
inc edx
mov dword [0x4aebc4], edx
jmp 0x455a65
xor eax, eax
inc eax
cmp edx, eax
mov eax, dword [esp + 0x154]
jne 0x455a5a
test ax, ax
jns 0x455a5a
mov edx, edi
mov dword [0x4aebc4], edx
jmp 0x455a53
xor eax, eax
inc eax
cmp edx, eax
jne 0x455a4a
cmp ebx, 0x11
je 0x455a5e
xor edx, edx
mov dword [0x4aebc4], edx
cmp edx, eax
mov eax, dword [esp + 0x154]
jle 0x455a65
cmp byte [esp + 0x20], 0
je 0x455a6c
xor edx, edx
jmp 0x455a0f
mov eax, dword [esp + 0x154]
cmp byte [esp + 0x20], 0
jne 0x455a9e
mov ecx, dword [0x4af740]
cmp byte [ecx + 0x13d], 0
mov ecx, dword [esp + 0x24]
je 0x455a8a
cmp byte [esp + 0x13], 0
jne 0x455a8a
cmp ebp, edi
jne 0x455a9e
cmp ebp, 3
je 0x455a9e
cmp byte [esp + 0x1f], 0
jne 0x455a9e
test edx, edx
je 0x455b1f
test eax, 0x100
jne 0x455b1f
cmp ebx, 0x25
ja 0x455adf
je 0x455adb
mov eax, ebx
sub eax, 0xc
je 0x455ad7
sub eax, 0x15
je 0x455ad3
sub eax, 1
je 0x455acf
sub eax, 1
je 0x455acb
sub eax, 1
jne 0x455b1f
push 0x67
jmp 0x455b0c
push 0x61
jmp 0x455b0c
push 0x63
jmp 0x455b0c
push 0x69
jmp 0x455b0c
push 0x65
jmp 0x455b0c
push 0x64
jmp 0x455b0c
mov eax, ebx
sub eax, 0x26
je 0x455b0a
sub eax, 1
je 0x455b06
sub eax, 1
je 0x455b02
sub eax, 5
je 0x455afe
sub eax, 1
jne 0x455b1f
push 0x6e
jmp 0x455b0c
push 0x60
jmp 0x455b0c
push 0x62
jmp 0x455b0c
push 0x66
jmp 0x455b0c
push 0x68
xor eax, eax
inc eax
pop ebx
test byte [esp + 0xd4], al
je 0x455b1f
or ecx, eax
mov dword [esp + 0x24], ecx
cmp byte [esp + 0x40], 0
je case.default.0x455fa6
test byte [esp + 0xe9], 0x80
jne case.default.0x455fa6
test edx, edx
jne case.default.0x455fa6
mov edx, dword [esp + 0x20]
mov eax, esi
test dl, dl
je 0x455b50
mov byte [eax], 0x1b
lea esi, [eax + 1]
cmp ebx, 0x21
jne 0x455b88
cmp ecx, 1
jne 0x455b73
push 0
push edi
push 0x115
push dword [0x4adacc]
call dword [sym.imp.USER32.dll_SendMessageA]
jmp 0x45590f
cmp ecx, 3
jne 0x455b7e
push 0
push 6
jmp 0x455b5d
cmp ecx, edi
jne 0x455baf
push 0
push 0
jmp 0x455b5d
cmp ebx, 0x22
jne 0x455bcf
cmp ecx, 3
jne 0x455b98
push 0
push 7
jmp 0x455b5d
cmp ecx, 1
jne 0x455ba3
push 0
push 3
jmp 0x455b5d
cmp ecx, edi
jne 0x455baf
xor eax, eax
push 0
inc eax
push eax
jmp 0x455b5d
cmp ecx, 3
jne 0x455bcf
xor eax, eax
cmp ebx, 0x21
setne al
push eax
push dword [0x4af740]
call fcn.0044b800
pop ecx
pop ecx
jmp 0x45590f
push 0x43
pop ebp
cmp ebx, 0x2d
jne 0x455c48
cmp ecx, edi
jne 0x455c0f
push 0x9d
push dword [0x4af738]
call fcn.0040319c
pop ecx
pop ecx
sub eax, edi
jne 0x45590f
inc eax
push eax
push 0x49f20c
push dword [0x4af740]
call fcn.0044b5fe
add esp, 0xc
jmp 0x45590f
cmp ecx, 1
jne 0x455c69
push 0x9d
push dword [0x4af738]
call fcn.0040319c
pop ecx
pop ecx
sub eax, 1
je 0x455c37
sub eax, 1
jne 0x45590f
push edi
jmp 0x455c3b
xor eax, eax
inc eax
push eax
push dword [0x4af740]
call fcn.0044b66b
jmp 0x455bc8
cmp ebx, ebp
jne 0x455c58
cmp ecx, 3
jne 0x455c69
push 0x9e
jmp 0x455be0
cmp ebx, 0x56
jne 0x455c69
cmp ecx, 3
jne 0x455c69
push 0x9e
jmp 0x455c19
test dl, dl
je 0x455d46
cmp ebx, 0x73
jne 0x455cb2
push 0x58
push dword [0x4af738]
call fcn.00403019
pop ecx
pop ecx
test al, al
jne 0x4563ac
mov ecx, dword [esp + 0x24]
cmp ecx, edi
jne 0x455e58
lea eax, [ebx - 0x32]
cmp eax, 6
ja 0x455e2e
mov al, byte [ebx + 0x49f9ea]
mov byte [esi], al
jmp 0x455df0
cmp ebx, 0x20
jne 0x455cf0
push 0x59
push dword [0x4af738]
call fcn.00403019
pop ecx
pop ecx
test al, al
je 0x455ce7
push 0
push 0xf100
push 0x112
push dword [0x4adacc]
call dword [sym.imp.USER32.dll_SendMessageA]
jmp 0x4563ac
mov ecx, dword [esp + 0x24]
jmp 0x455de9
cmp ebx, 0xd
jne 0x455d46
push 0x5e
push dword [0x4af738]
call fcn.00403019
pop ecx
pop ecx
test al, al
je 0x455c8d
push 0x76
push dword [0x4af738]
call fcn.0040319c
pop ecx
pop ecx
xor ecx, ecx
inc ecx
cmp eax, ecx
je 0x455c8d
mov eax, dword [esp + 0x154]
mov ecx, 0x4000
and eax, 0xc000
cmp ax, cx
je 0x4563ac
call fcn.0045a31a
jmp 0x4563ac
cmp ebx, 0x13
jne 0x455d71
cmp ecx, edi
jne 0x455d6a
mov ecx, dword [0x4af740]
cmp byte [ecx + 0x13d], 0
sete al
mov byte [ecx + 0x13d], al
jmp 0x45590f
mov word [esi], 0x1a
jmp 0x455d97
cmp ebx, 8
jne 0x455dc1
test ecx, ecx
jne 0x455d9f
push 0x46
push dword [0x4af738]
call fcn.00403019
neg al
sbb al, al
and al, 0x77
add al, bl
pop ecx
mov byte [esi], al
pop ecx
mov byte [esi + 1], 0
push 0xfffffffffffffffe
pop eax
jmp 0x4563af
xor eax, eax
inc eax
cmp ecx, eax
jne 0x455c91
push 0x46
push dword [0x4af738]
call fcn.00403019
neg al
sbb al, al
and al, 0x89
add al, 0x7f
jmp 0x455d8f
cmp ebx, 9
jne 0x455de4
cmp ecx, 1
jne 0x455c91
mov word [esi], 0x5b1b
add esi, 2
mov byte [esi], 0x5a
sub esi, eax
lea eax, [esi + 1]
jmp 0x4563af
cmp ebx, 0x20
jne 0x455e04
cmp ecx, edi
jne 0x455df6
mov byte [esi], 0
sub esi, dword [esp + 0x28]
jmp 0x455ddc
cmp ecx, 3
jne 0x455c91
mov byte [esi], 0xa0
jmp 0x455df0
cmp ebx, 3
jne 0x455c91
cmp ecx, edi
jne 0x455e58
mov ecx, dword [0x4aec14]
test ecx, ecx
je 0x45590f
mov eax, dword [ecx]
push 0
push 0
push ecx
call dword [eax + 0x18]
jmp 0x455c07
cmp ebx, 0xbd
je 0x455e53
cmp ebx, 0xbf
je 0x455e53
cmp ebx, 0xdf
je 0x455e4e
cmp ebx, 0xdc
jne 0x455e6a
mov byte [esi], 0x1c
jmp 0x455df0
mov byte [esi], 0x1f
jmp 0x455df0
cmp ecx, 3
jne 0x455e6a
cmp ebx, 0xde
jne 0x455e6a
mov byte [esi], 0x1e
jmp 0x455df0
cmp ebx, 0x6b
ja 0x455f9e
je 0x455f99
cmp ebx, 0x2e
ja 0x455f57
je 0x455f36
cmp ebx, 0x25
ja 0x455ee6
je 0x455ee2
mov eax, ebx
sub eax, 0xc
je 0x455ede
sub eax, 1
je 0x455ec5
sub eax, 0x14
je 0x455ec1
sub eax, 1
je 0x455ebd
sub eax, 1
je 0x455eb8
sub eax, 1
jne case.default.0x455fa6
jmp 0x455f39
xor eax, eax
inc eax
jmp 0x455f39
push 5
jmp 0x455f38
push 4
jmp 0x455f38
test dword [esp + 0x154], 0x100
je 0x456092
push 0xd
pop edx
jmp 0x455fb7
push 0x47
jmp 0x455f15
push 0x44
jmp 0x455f15
mov eax, ebx
sub eax, 0x26
je 0x455f13
sub eax, 1
je 0x455f16
sub eax, 1
je 0x455f0f
sub eax, 3
je 0x455f08
sub eax, edi
jne case.default.0x455fa6
mov eax, edi
jmp 0x455f39
mov dl, 0x47
jmp 0x455fb7
push 0x42
jmp 0x455f15
push 0x41
pop ebp
xor eax, eax
shr ecx, 1
inc eax
and cl, al
movzx eax, cl
push eax
push ebp
push dword [0x4af740]
push esi
call fcn.0044437c
add esp, 0x10
jmp 0x456139
push 3
pop eax
test cl, 2
jne case.default.0x455fa6
push eax
push dword [0x4af740]
push esi
call fcn.004446d0
add esp, 0xc
jmp 0x456139
lea eax, [ebx - 0x60]
cmp eax, 0xa
ja case.default.0x455fa6
jmp dword [eax*4 + 0x4563c8]
push 0x30
jmp 0x455ed8
mov dl, 0x31
jmp 0x455fb7
mov dl, 0x32
jmp 0x455fb7
mov dl, 0x33
jmp 0x455fb7
mov dl, 0x34
jmp 0x455fb7
mov dl, 0x35
jmp 0x455fb7
mov dl, 0x36
jmp 0x455fb7
mov dl, 0x37
jmp 0x455fb7
mov dl, 0x38
jmp 0x455fb7
mov dl, 0x39
jmp 0x455fb7
mov dl, 0x2a
jmp 0x455fb7
push 0x2b
pop edx
jmp 0x455fbb
lea eax, [ebx - 0x6d]
cmp eax, 0x16
ja case.default.0x455fa6
jmp dword [eax*4 + 0x4563f4]
mov dl, 0x2e
jmp 0x455fb7
mov dl, 0x2d
jmp 0x455fb7
mov dl, 0x2f
mov dword [esp + 0x18], edx
mov byte [esp + 0x14], dl
cmp byte [esp + 0x20], 0
je 0x456059
mov al, dl
sub al, 0x30
cmp al, 9
ja 0x456050
imul ecx, dword [0x4aebb8], 0xa
movsx eax, dl
add ecx, 0xffffffd0
add eax, ecx
mov dword [0x4aebb8], eax
cmp byte [esp + 0x58], 0
mov byte [esp + 0x13], 0
je 0x456017
push 0xa6
push dword [0x4af738]
call fcn.00403019
pop ecx
pop ecx
test al, al
je 0x456017
cmp byte [esp + 0x20], 0
mov byte [esp + 0x58], 0
sete byte [esp + 0x13]
cmp dword [0x4b27bc], edi
jne 0x45613f
mov eax, dword [0x4b0ca8]
test eax, eax
je 0x45613f
push dword [esp + 0x38]
lea ecx, [esp + 0x48]
push 0
push 3
push 0x4b0cb0
push ecx
push dword [esp + 0x48]
push ebx
call eax
mov esi, eax
jmp 0x456193
and dword [0x4aebb8], 0
jmp case.default.0x455fa6
mov eax, ecx
xor edx, edx
shr eax, 1
inc edx
and al, dl
movzx eax, al
push eax
mov al, cl
and al, dl
movzx eax, al
push eax
push dword [esp + 0x1c]
push dword [0x4af740]
push esi
call fcn.004444f6
add esp, 0x14
test eax, eax
jne 0x4560bd
mov edx, dword [esp + 0x18]
cmp dl, 0xd
jne case.default.0x455fa6
cmp dword [esp + 0x24], 0
jne 0x4560b3
mov eax, dword [0x4af740]
cmp byte [eax + 0x141], 0
je 0x4560b3
mov byte [esi], 0xd
inc esi
mov byte [esi], 0xa
jmp 0x455df0
mov word [esi], 0xd
jmp 0x455d97
sub eax, dword [esp + 0x28]
add eax, esi
jmp 0x4563af
xor eax, eax
lea edi, [eax + 1]
jmp case.0x455fa6.113
push 3
jmp 0x456115
push 4
jmp 0x456115
push 5
jmp 0x456115
push 6
jmp 0x456115
push 7
jmp 0x456115
push 8
jmp 0x456115
push 9
jmp 0x456115
push 0xa
jmp 0x456115
push 0xb
jmp 0x456115
push 0xc
jmp 0x456115
push 0xd
jmp 0x456115
push 0xe
jmp 0x456115
push 0xf
jmp 0x456115
push 0x10
jmp 0x456115
push 0x11
jmp 0x456115
push 0x12
jmp 0x456115
push 0x13
jmp 0x456115
push 0x14
pop edi
mov eax, ecx
shr eax, 1
and al, 1
movzx eax, al
push eax
xor eax, eax
inc eax
and cl, al
movzx eax, cl
push eax
push edi
push dword [0x4af740]
push esi
call fcn.004443dc
add esp, 0x14
sub esi, dword [esp + 0x28]
jmp 0x4560c1
push dword [esp + 0x38]
lea eax, [esp + 0x48]
push 0
push 0x4b0cb8
push eax
push dword [esp + 0x44]
push ebx
call dword [sym.imp.USER32.dll_ToAsciiEx]
mov esi, eax
test esi, esi
jle 0x456358
xor ecx, ecx
test esi, esi
jle 0x45617c
mov al, byte [ecx*2 + 0x4b0cb8]
mov byte [ecx + 0x4b0cc0], al
inc ecx
cmp ecx, esi
jl 0x45616a
push 3
push 0x4b0cb0
push esi
push 0x4b0cc0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
test esi, esi
jle 0x456358
xor ebx, ebx
test esi, esi
jle 0x45633e
push 0x5f
pop ebp
movzx ecx, word [ebx*2 + 0x4b0cb0]
mov dword [esp + 0x34], ecx
cmp dword [0x4aebc4], edi
jne 0x4561da
lea eax, [ecx - 0x20]
cmp ax, bp
ja 0x45622c
mov eax, ecx
mov dword [0x4aebc4], 3
mov dword [0x4aebc8], eax
jmp 0x456335
cmp dword [0x4aebc4], 3
jne 0x45622c
lea eax, [ecx - 0x20]
cmp ax, bp
ja 0x45622c
and dword [0x4aebc4], 0
push ecx
push dword [0x4aebc8]
call fcn.00463678
pop ecx
pop ecx
cmp eax, 0xffffffff
je 0x45634b
movzx eax, ax
mov dword [esp + 0x24], eax
xor eax, eax
inc eax
push eax
lea eax, [esp + 0x28]
push eax
push dword [0x4af740]
call fcn.00447e7c
add esp, 0xc
jmp 0x456335
and dword [0x4aebc4], 0
cmp byte [esp + 0x40], 0
jne 0x4562a8
mov ecx, dword [0x4aebb8]
test ecx, ecx
je 0x45629e
mov edx, dword [0x4af740]
push edx
call fcn.0045a5b2
add esp, 4
test al, al
jne 0x456279
cmp byte [0x4aec1c], al
jne 0x456279
xor eax, eax
mov byte [esp + 0x1f], cl
inc eax
push eax
lea eax, [esp + 0x23]
push eax
push 0xffffffffffffffff
push edx
call fcn.00447dac
add esp, 0x10
jmp 0x456292
movzx eax, cx
mov dword [esp + 0x24], eax
xor eax, eax
inc eax
push eax
lea eax, [esp + 0x28]
push eax
push edx
call fcn.00447e7c
add esp, 0xc
and dword [0x4aebb8], 0
jmp 0x45632d
xor eax, eax
inc eax
push eax
lea eax, [esp + 0x38]
jmp 0x45631e
cmp byte [esp + 0x13], 0
je 0x4562f7
mov eax, 0x80
cmp cx, ax
jae 0x4562f7
push 0x1b
pop eax
push ecx
mov word [esp + 0x3c], ax
call fcn.004641a7
mov ecx, dword [esp + 0x24]
mov word [esp + 0x3e], ax
xor eax, eax
test cl, cl
setne al
inc eax
push eax
xor eax, eax
test cl, cl
lea ecx, [esp + 0x40]
cmove eax, edi
add eax, ecx
push eax
push dword [0x4af740]
call fcn.00447e7c
add esp, 0x10
jmp 0x45632d
push 0x1b
pop eax
mov word [esp + 0x28], ax
xor eax, eax
mov word [esp + 0x2a], cx
mov ecx, dword [esp + 0x20]
test cl, cl
setne al
inc eax
push eax
xor eax, eax
test cl, cl
lea ecx, [esp + 0x2c]
cmove eax, edi
add eax, ecx
push eax
push dword [0x4af740]
call fcn.00447e7c
add esp, 0xc
push 0
call fcn.0045b6bb
pop ecx
inc ebx
cmp ebx, esi
jl 0x4561a8
xor eax, eax
mov word [0x4b0cb0], ax
jmp 0x45590f
push 0x10
call dword [sym.imp.USER32.dll_MessageBeep]
jmp 0x45590f
cmp byte [esp + 0x20], 0
jne 0x456363
xor eax, eax
jmp 0x45638a
cmp word [0x4b0cb0], 0
je 0x456390
push dword [0x4af740]
call fcn.0045a5b2
add esp, 4
test al, al
jne 0x456387
cmp byte [0x4aec1c], al
je 0x456390
push 0xa
pop eax
mov word [0x4b0cb0], ax
cmp ebx, 0x12
jne 0x4563ac
push 0x5a
push dword [0x4af738]
call fcn.00403019
pop ecx
pop ecx
test al, al
je 0x45590f
or eax, 0xffffffff
mov ecx, dword [esp + 0x144]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.004659d6
add esp, 0x138
ret