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

Disassembly:
push ebp
mov ebp, esp
push ecx
mov ecx, 0x2b
push 0
push 0
dec ecx
jne 0x528919
xchg dword [ebp - 4], ecx
push ebx
push esi
push edi
mov ebx, ecx
mov edi, edx
mov esi, eax
xor eax, eax
push ebp
push 0x528f13
push dword fs:[eax]
mov dword fs:[eax], esp
movzx eax, di
cmp eax, 0x37
jg 0x52899d
je 0x528be2
cmp eax, 0x32
jg 0x52897a
je 0x528abb
sub eax, 8
je 0x5289f0
sub eax, 0xb
je 0x528a01
sub eax, 0x1d
je 0x528c93
dec eax
je 0x528a80
jmp 0x528d7f
sub eax, 0x33
je 0x528af6
dec eax
je 0x528b31
dec eax
je 0x528b6c
dec eax
je 0x528ba7
jmp 0x528d7f
cmp eax, 0x90
jg 0x5289c9
je 0x528a34
sub eax, 0x38
je 0x528c1d
dec eax
je 0x528c58
sub eax, 0x22
je 0x528a12
sub eax, 2
je 0x528a23
jmp 0x528d7f
sub eax, 0xbb
je 0x528d09
sub eax, 2
je 0x528cce
sub eax, 3
je 0x528a45
sub eax, 0x1c
je 0x528d44
jmp 0x528d7f
mov eax, ebx
mov edx, 0x528f30
call fcn.00406a94
jmp 0x528ec3
mov eax, ebx
mov edx, 0x528f44
call fcn.00406a94
jmp 0x528ec3
mov eax, ebx
mov edx, 0x528f5c
call fcn.00406a94
jmp 0x528ec3
mov eax, ebx
mov edx, 0x528f70
call fcn.00406a94
jmp 0x528ec3
mov eax, ebx
mov edx, 0x528f8c
call fcn.00406a94
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528a5c
mov eax, ebx
mov edx, 0x528fa4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x10c]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x10c]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528a97
mov eax, ebx
mov edx, 0x528fb4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x110]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x110]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528ad2
mov eax, ebx
mov edx, 0x528fc4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x114]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x114]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528b0d
mov eax, ebx
mov edx, 0x528fd4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x118]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x118]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528b48
mov eax, ebx
mov edx, 0x528fe4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x11c]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x11c]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528b83
mov eax, ebx
mov edx, 0x528ff4
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x120]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x120]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528bbe
mov eax, ebx
mov edx, 0x529004
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x124]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x124]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528bf9
mov eax, ebx
mov edx, 0x529014
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x128]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x128]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528c34
mov eax, ebx
mov edx, 0x529024
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x12c]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x12c]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528c6f
mov eax, ebx
mov edx, 0x529034
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x130]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x130]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528caa
mov eax, ebx
mov edx, 0x529044
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x134]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x134]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528ce5
mov eax, ebx
mov edx, 0x529054
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x138]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x138]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528d20
mov eax, ebx
mov edx, 0x529064
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x13c]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x13c]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
cmp byte [esi + 0x10], 0
je 0x528d5b
mov eax, ebx
mov edx, 0x529074
call fcn.00406a94
jmp 0x528ec3
lea edx, [ebp - 0x140]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x140]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
lea eax, [ebp - 0x108]
push eax
call sub.user32.dll_GetKeyboardState
call fcn.0041dc9c
mov eax, ebx
xor ecx, ecx
mov edx, 2
call fcn.004072d4
push 0
mov eax, dword [esi + 0x14]
push eax
call sub.user32.dll_GetWindowThreadProcessId
mov dword [ebp - 4], eax
mov eax, dword [ebp - 4]
push eax
call sub.user32.dll_GetKeyboardLayout
shr eax, 0x10
mov dword [ebp - 8], eax
mov eax, dword [ebp - 8]
push eax
push 0
mov eax, ebx
call fcn.004070d8
push eax
lea eax, [ebp - 0x108]
push eax
mov eax, dword [ebp - 8]
push eax
push 2
movzx eax, di
push eax
call sub.user32.dll_MapVirtualKeyExW
push eax
movzx eax, di
push eax
call sub.user32.dll_ToAsciiEx
sub eax, 1
jb 0x528dfc
je 0x528e20
dec eax
je 0x528e9b
jmp 0x528ebc
lea edx, [ebp - 0x144]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x144]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
mov eax, ebx
xor ecx, ecx
mov edx, 1
call fcn.004072d4
movzx eax, byte [esi + 0x10]
xor al, byte [esi + 0x11]
je 0x528e69
lea eax, [ebp - 0x14c]
mov edx, dword [ebx]
call fcn.004079fc
mov eax, dword [ebp - 0x14c]
lea edx, [ebp - 0x148]
call fcn.004145fc
mov edx, dword [ebp - 0x148]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
lea eax, [ebp - 0x154]
mov edx, dword [ebx]
call fcn.004079fc
mov eax, dword [ebp - 0x154]
lea edx, [ebp - 0x150]
call fcn.0041468c
mov edx, dword [ebp - 0x150]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
lea edx, [ebp - 0x158]
mov eax, edi
call fcn.00473b2c
mov edx, dword [ebp - 0x158]
mov eax, ebx
mov ecx, 0
call fcn.00407a24
jmp 0x528ec3
mov eax, ebx
call fcn.00406a40
mov eax, dword [ebx]
mov dword [ebp - 0x15c], eax
mov eax, dword [ebp - 0x15c]
test eax, eax
je 0x528eda
sub eax, 4
mov eax, dword [eax]
dec eax
jle 0x528ef5
push 0x529084
push dword [ebx]
push 0x529094
mov eax, ebx
mov edx, 3
call fcn.00406f14
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x528f1a
lea eax, [ebp - 0x158]
mov edx, 0x14
call fcn.004077c8
ret