Function at 0x404880
Capabilities:
Get geographical location
Get keyboard layout
Link many functions at runtime
Resolve function by parsing pe exports

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x60
mov edi, dword [esp + 0x74]
mov esi, dword [esp + 0x78]
mov eax, dword [0x50302c]
xor eax, esp
mov dword [esp + 0x5c], eax
call fcn.00438c80
mov dword [0x503bd0], edi
mov dword [0x503bcc], esi
call fcn.00431900
call fcn.0041f950
call fcn.004245d0
call fcn.0041d910
call fcn.00439f60
cmp dword [0x50510c], 4
jb 0x4048d8
jne 0x4048e8
cmp dword [0x505114], 2
je 0x4048e8
push str.MSWHEEL_ROLLMSG
call dword [sym.imp.USER32.dll_RegisterWindowMessageA]
mov dword [0x503008], eax
call fcn.0040b7f0
push str.user32.dll
call fcn.00438ec0
add esp, 4
mov esi, eax
push str.winmm.dll
call fcn.00438ec0
add esp, 4
mov ebx, eax
ret
push str.shcore.dll
call fcn.00438ec0
add esp, 4
mov edi, eax
test esi, esi
je 0x40493b
mov ebp, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.FlashWindowEx
push esi
call ebp
mov dword [0x503bfc], eax
push str.ToUnicodeEx
push esi
call ebp
jmp 0x404947
mov dword [0x503bfc], 0
xor eax, eax
mov dword [0x503c20], eax
test ebx, ebx
je 0x40496d
mov ebp, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.PlaySoundW
push ebx
call ebp
mov dword [0x503bf4], eax
push str.PlaySoundA
push ebx
call ebp
jmp 0x404979
mov dword [0x503bf4], 0
xor eax, eax
mov dword [0x503bf8], eax
test esi, esi
je 0x4049ac
mov ebx, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.GetMonitorInfoA
push esi
call ebx
mov dword [0x503c18], eax
push str.MonitorFromPoint
push esi
call ebx
mov dword [0x503c1c], eax
push str.MonitorFromWindow
push esi
call ebx
jmp 0x4049c2
mov dword [0x503c18], 0
mov dword [0x503c1c], 0
xor eax, eax
mov dword [0x503c14], eax
test edi, edi
je 0x4049d9
push str.GetDpiForMonitor
push edi
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
jmp 0x4049db
xor eax, eax
mov dword [0x503c10], eax
test esi, esi
je 0x404a01
mov edi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.GetSystemMetricsForDpi
push esi
call edi
mov dword [0x503c00], eax
push str.AdjustWindowRectExForDpi
push esi
call edi
jmp 0x404a0d
mov dword [0x503c00], 0
xor eax, eax
mov dword [0x503c04], eax
call fcn.00438ce0
push 0
push 0x11d0
push 1
call fcn.00436250
add esp, 0xc
mov esi, eax
lea edi, [eax + 8]
push 0x11c8
push 0
push edi
call fcn.004a0e50
add esp, 0xc
mov eax, dword [0x503004]
mov dword [esi + 4], eax
mov dword [esi], section..data
mov dword [eax], esi
mov eax, dword [esi]
mov dword [eax + 4], esi
mov dword [esi + 8], 0x4c7004
mov dword [esi + 0x10], 0x4ce6f8
mov dword [esi + 0xc], 0x4c7078
mov dword [esi + 0x48], 0xffffffff
mov dword [esi + 0x44], 0xffffffff
mov dword [esi + 0x1184], 0
call fcn.00433fc0
mov dword [esi + 0xb84], eax
push 0
call dword [sym.imp.ole32.dll_CoInitialize]
cmp eax, 1
jbe 0x404adf
push dword [0x4c7780]
push str._s_Fatal_Error
call fcn.00435810
add esp, 8
mov esi, eax
push 0x30
push eax
push str.Failed_to_initialize_COM_subsystem
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
push esi
call fcn.004362e0
add esp, 4
mov ecx, dword [esp + 0x5c]
xor ecx, esp
call fcn.0049e0f0
mov eax, 1
add esp, 0x60
pop esi
pop edi
pop ebx
pop ebp
ret 0x10
mov dword [esp + 0x10], edi
push dword [esp + 0x7c]
push dword [esi + 0xb84]
call fcn.0040b220
add esp, 8
lea eax, [esi + 0x5c]
push 0xb0c
push 0
mov dword [esp + 0x14], eax
push eax
call fcn.004a0e50
ret
or dword [eax], eax
add esp, 0xc
push 0x74
push dword [esi + 0xb84]
call fcn.00434340
add esp, 8
mov dword [esi + 0xb90], eax
push 0xac
push dword [esi + 0xb84]
call fcn.00434340
add esp, 8
mov dword [esi + 0xb94], eax
mov dword [esi + 0x20], 0xa
mov dword [esi + 0x24], 0x14
mov dword [esi + 0x18], 0x19
mov dword [esi + 0x1c], 0x1c
push 0x83
push dword [esi + 0xb84]
call fcn.00434340
add esp, 8
lea eax, [eax + eax*4]
add eax, eax
add eax, 0x19
mov dword [esp], eax
mov ebx, dword [esi + 0x1c]
mov ebp, dword [esi + 0x24]
push 0x84
push dword [esi + 0xb84]
call fcn.00434340
add esp, 8
mov edi, eax
imul edi, ebp
add edi, ebx
cmp dword [0x503c18], 0
je 0x404be4
mov eax, dword [0x503c14]
test eax, eax
je 0x404be4
push 2
push dword [esi + 0x14]
call eax
mov dword [esp + 0x34], 0x28
lea ecx, [esp + 0x34]
push ecx
push eax
call dword [0x503c18]
mov eax, dword [esp + 0x38]
mov ecx, dword [esp + 0x3c]
mov dword [esp + 0x24], eax
mov dword [esp + 0x28], ecx
mov eax, dword [esp + 0x40]
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x44]
mov dword [esp + 0x30], eax
jmp 0x404bf6
call dword [sym.imp.USER32.dll_GetDesktopWindow]
lea ecx, [esp + 0x24]
push ecx
push eax
call dword [sym.imp.USER32.dll_GetClientRect]
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x30]
sub eax, dword [esp + 0x24]
mov edx, dword [esp]
cmp edx, eax
cmovle eax, edx
mov dword [esp], eax
sub ecx, dword [esp + 0x28]
cmp edi, ecx
cmovle ecx, edi
mov dword [esp + 4], ecx
push dword [0x4c7784]
call fcn.0042e860
add esp, 4
test eax, eax
jne 0x404c30
xor ebx, ebx
jmp 0x404c36
mov bl, byte [eax + 0x58]
and bl, 1
mov edi, dword [0x4c7780]
push edi
push 0
call fcn.004358c0
add esp, 8
mov dword [esp + 8], eax
push edi
push 0
call fcn.004358c0
add esp, 8
mov dword [esi + 0x1188], eax
push edi
push 0
call fcn.004358c0
add esp, 8
mov dword [esi + 0x118c], eax
push 0x7d
push dword [esi + 0xb84]
call fcn.00434290
add esp, 8
movzx edi, al
shl edi, 0x15
or edi, 0xcf0000
push 0x7f
push dword [esi + 0xb84]
call fcn.00434340
add esp, 8
mov ecx, edi
and ecx, 0xea0000
test bl, bl
cmovne edi, ecx
cmp eax, 1
cmove edi, ecx
push 0x66
push dword [esi + 0xb84]
call fcn.00434290
add esp, 8
movzx ebx, al
lea ebp, [ebx*8]
push 0x8f
push dword [esi + 0xb84]
call fcn.00434290
add esp, 8
lea ebx, [ebx*8 + 0x200]
test al, al
cmove ebx, ebp
mov byte [0x503bd8], 1
invalid
outsd dx, dword [esi]