Function at 0x405010
Capabilities:
Get common file path
Get file system object information
Query or enumerate registry value
Read file on windows
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x448
mov eax, dword [0x41f060]
xor eax, esp
mov dword [esp + 0x444], eax
mov eax, dword [esp + 0x454]
push ebx
push eax
call fcn.00401670
add esp, 4
push 0x104
lea eax, [esp + 0x348]
push eax
xor ebx, ebx
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea ecx, [esp + 0x344]
push 0x419584
push ecx
call fcn.0040a1a2
add esp, 8
mov dword [0x426498], eax
cmp eax, ebx
je 0x4050de
call fcn.00404f70
test eax, eax
je 0x40509e
push ebx
push str.MInst
push str.Setup_File_is_Corrupted
push ebx
call dword [sym.imp.USER32.dll_MessageBoxA]
xor eax, eax
pop ebx
mov ecx, dword [esp + 0x444]
xor ecx, esp
call fcn.0040a476
add esp, 0x448
ret 0x10
mov edx, dword [0x426498]
push 2
push 0xffffffffffffffec
push edx
call fcn.00409d82
mov eax, dword [0x426498]
push eax
push 4
lea ecx, [esp + 0x38]
push 1
push ecx
call fcn.0040a459
add esp, 0x1c
cmp dword [esp + 0x24], 0x4d494e53
je 0x4050fb
mov edx, dword [0x426498]
push edx
call fcn.00409e7e
add esp, 4
mov eax, 1
pop ebx
mov ecx, dword [esp + 0x444]
xor ecx, esp
call fcn.0040a476
add esp, 0x448
ret 0x10
mov eax, dword [0x426498]
push eax
push 4
lea ecx, [esp + 0x28]
push 1
push ecx
call fcn.0040a459
add esp, 0x10
cmp dword [esp + 0x20], 4
jne 0x4050cf
mov eax, dword [0x426498]
push esi
push eax
push 4
lea ecx, [esp + 0x38]
push 1
push ecx
call fcn.0040a459
mov eax, dword [0x426498]
mov edx, 0xffffffec
sub edx, dword [esp + 0x40]
push 2
push edx
push eax
call fcn.00409d82
mov ecx, dword [0x426498]
push ecx
call fcn.0040a658
add esp, 0x20
cmp dword [0x426490], 1
mov dword [0x42676c], eax
jle 0x4053e9
mov edx, dword [0x4273c4]
push str._extract
push edx
call fcn.0041863a
add esp, 8
test eax, eax
jne 0x4053e9
push 0x41524348
call fcn.004018d0
add esp, 4
test eax, eax
jne 0x40527f
mov eax, dword [0x426498]
push eax
push 4
lea ecx, [esp + 0x18]
push 1
push ecx
call fcn.0040a459
add esp, 0x10
xor esi, esi
cmp dword [esp + 0x10], ebx
jle 0x40527f
lea ebx, [ebx]
mov edx, dword [0x426498]
push edx
push 4
lea eax, [esp + 0x10]
push 1
push eax
call fcn.0040a459
mov ecx, dword [0x426498]
mov edx, dword [esp + 0x18]
push ecx
push edx
lea eax, [esp + 0x70]
push 1
push eax
call fcn.0040a459
mov edx, dword [0x426498]
mov ecx, dword [esp + 0x28]
push edx
push 4
lea eax, [esp + 0x30]
push 1
push eax
mov byte [esp + ecx + 0x88], bl
call fcn.0040a459
mov ecx, dword [0x426498]
mov edx, dword [esp + 0x38]
push ecx
push edx
lea eax, [esp + 0x1f0]
push 1
push eax
call fcn.0040a459
mov edx, dword [0x426498]
mov ecx, dword [esp + 0x48]
add esp, 0x40
push edx
push 4
lea eax, [esp + 0x28]
push 1
push eax
mov byte [esp + ecx + 0x1c8], bl
call fcn.0040a459
mov ecx, dword [0x426498]
push ecx
push 4
lea edx, [esp + 0x34]
push 1
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
lea eax, [esp + 0x78]
push eax
push ecx
call section..text
inc esi
add esp, 0x28
cmp esi, dword [esp + 0x10]
jl 0x4051c0
push 0x50524f47
call fcn.004018d0
add esp, 4
test eax, eax
jne 0x4053df
mov edx, dword [0x426498]
push edx
push 4
lea eax, [esp + 0x18]
push 1
push eax
call fcn.0040a459
add esp, 0x10
xor esi, esi
cmp dword [esp + 0x10], ebx
jle 0x4053df
jmp 0x4052c0
mov ecx, dword [0x426498]
push ecx
push 4
lea edx, [esp + 0x10]
push 1
push edx
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x18]
push eax
push ecx
lea edx, [esp + 0x298]
push 1
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x28]
push ecx
push 4
lea edx, [esp + 0x30]
push 1
push edx
mov byte [esp + eax + 0x2b0], bl
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x38]
push eax
push ecx
lea edx, [esp + 0x254]
push 1
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x48]
add esp, 0x40
push ecx
push 4
lea edx, [esp + 0x10]
push 1
push edx
mov byte [esp + eax + 0x22c], bl
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x18]
push eax
push ecx
lea edx, [esp + 0x70]
push 1
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x28]
push ecx
push 4
lea edx, [esp + 0x30]
push 1
push edx
mov byte [esp + eax + 0x88], bl
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x38]
push eax
push ecx
lea edx, [esp + 0x31c]
push 1
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x48]
add esp, 0x40
push ecx
push 4
lea edx, [esp + 0x1c]
push 1
push edx
mov byte [esp + eax + 0x2f4], bl
call fcn.0040a459
mov ecx, dword [0x426498]
lea eax, [esp + 0x68]
push eax
push ecx
call section..text
inc esi
add esp, 0x18
cmp esi, dword [esp + 0x10]
jl 0x4052c0
mov eax, 1
jmp 0x405915
push 0x474e524c
call fcn.004018d0
add esp, 4
test eax, eax
jne 0x4053df
mov edx, dword [0x426498]
push edx
push 4
lea eax, [esp + 0x14]
push 1
push eax
call fcn.0040a459
mov ecx, dword [0x426498]
mov edx, dword [esp + 0x1c]
push ecx
push edx
push 1
push 0x426780
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x2c]
push ecx
push 4
lea edx, [esp + 0x34]
push 1
push edx
mov byte [eax + 0x426780], bl
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x3c]
push eax
push ecx
push 1
push 0x4267e4
call fcn.0040a459
mov eax, dword [0x426498]
mov edx, dword [esp + 0x4c]
add esp, 0x40
push eax
push 4
push 1
push 0x42694c
mov byte [edx + 0x4267e4], bl
call fcn.0040a459
add esp, 0x10
push 0x426a78
push 0x104
call dword [sym.imp.KERNEL32.dll_GetTempPathA]
push ebx
push 0x160
lea ecx, [esp + 0x60]
push ecx
push ebx
push 0x4192b9
call dword [sym.imp.SHELL32.dll_SHGetFileInfoA]
mov eax, 1
mov dword [esp + 0x14], 0x104
test byte [0x42694c], al
je 0x4054c2
mov eax, 0x101
lea edx, [esp + 0x10]
push edx
push eax
push ebx
push str.SOFTWAREMicrosoftWindowsCurrentVersion
push 0x80000002
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
test eax, eax
jne 0x40551f
lea eax, [esp + 0x14]
push eax
mov eax, dword [esp + 0x14]
lea ecx, [esp + 0x5c]
push ecx
lea edx, [esp + 0x3c]
push edx
push ebx
push str.ProgramFilesDir
push eax
call dword [sym.imp.ADVAPI32.dll_RegQueryValueExA]
mov ecx, dword [esp + 0x10]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
xor eax, eax
lea ebx, [ebx]
mov cl, byte [esp + eax + 0x58]
mov byte [eax + 0x426b7c], cl
inc eax
cmp cl, bl
jne 0x405510
mov esi, dword [sym.imp.SHELL32.dll_SHGetSpecialFolderLocation]
push ebp
push edi
lea edx, [esp + 0x10]
push edx
push 0x10
push ebx
call esi
mov edi, dword [sym.imp.SHELL32.dll_SHGetPathFromIDListA]
mov ebp, dword [sym.imp.ole32.dll_CoTaskMemFree]
test eax, eax
jne 0x405554
mov eax, dword [esp + 0x10]
push 0x426c80
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
lea edx, [esp + 0x10]
push edx
push 0x19
push ebx
call esi
test eax, eax
jne 0x405575
mov eax, dword [esp + 0x10]
push 0x426d84
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
lea edx, [esp + 0x10]
push edx
push 0xb
push ebx
call esi
test eax, eax
jne 0x405596
mov eax, dword [esp + 0x10]
push 0x426e88
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
lea edx, [esp + 0x10]
push edx
push 0x16
push ebx
call esi
test eax, eax
jne 0x4055b7
mov eax, dword [esp + 0x10]
push 0x426f8c
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
lea edx, [esp + 0x10]
push edx
push 2
push ebx
call esi
test eax, eax
jne 0x4055d8
mov eax, dword [esp + 0x10]
push 0x427090
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
lea edx, [esp + 0x10]
push edx
push 0x17
push ebx
call esi
test eax, eax
jne 0x4055f9
mov eax, dword [esp + 0x10]
push 0x427194
push eax
call edi
mov ecx, dword [esp + 0x10]
push ecx
call ebp
push 0x4267e4
push 0x426b7c
push str._s_s
push 0x426958
call fcn.0040a6c6
mov edi, 1
push 0x41524348
mov dword [0x426a5c], edi
mov dword [0x426a60], edi
mov dword [0x426a64], ebx
mov dword [0x4275d0], ebx
call fcn.004018d0
add esp, 0x14
test eax, eax
jne 0x40573b
mov edx, dword [0x426498]
push edx
push 4
lea eax, [esp + 0x28]
push edi
push eax
call fcn.0040a459
add esp, 0x10
xor esi, esi
cmp dword [esp + 0x20], ebx
jle 0x40573b
mov ecx, dword [0x426498]
push ecx
push 4
lea edx, [esp + 0x1c]
push edi
push edx
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x24]
push eax
push ecx
lea edx, [esp + 0x368]
push edi
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x34]
push ecx
push 4
lea edx, [esp + 0x3c]
push edi
push edx
mov byte [esp + eax + 0x380], bl
call fcn.0040a459
mov eax, dword [0x426498]
mov ecx, dword [esp + 0x44]
push eax
push ecx
lea edx, [esp + 0x1f8]
push edi
push edx
call fcn.0040a459
mov ecx, dword [0x426498]
mov eax, dword [esp + 0x54]
add esp, 0x40
push ecx
push 4
lea edx, [esp + 0x30]
push edi
push edx
mov byte [esp + eax + 0x1d0], bl
call fcn.0040a459
mov eax, dword [0x426498]
push eax
push 4
lea ecx, [esp + 0x3c]
push edi
push ecx
call fcn.0040a459
mov edx, dword [0x426498]
push edx
push 4
lea eax, [esp + 0x5c]
push edi
push eax
call fcn.0040a459
mov ecx, dword [esp + 0x64]
mov edx, dword [0x426498]
push ecx
push edx
call fcn.004011c0
add dword [0x4275d0], eax
add esi, edi
add esp, 0x38
cmp esi, dword [esp + 0x20]
jl 0x405667
push 0x50524f47
mov dword [0x426950], ebx
call fcn.004018d0
add esp, 4
test eax, eax
jne 0x405768
mov eax, dword [0x426498]
push eax
push 4
push edi
push 0x426950
call fcn.0040a459
add esp, 0x10
push 0x55524c53
mov dword [0x426a68], ebx
mov dword [0x426954], ebx
call fcn.004018d0
add esp, 4
test eax, eax
jne 0x40579c
mov ecx, dword [0x426498]
push ecx
push 4
push edi
push 0x426954
call fcn.0040a459
add esp, 0x10
mov dword [0x426a70], ebx
call dword [sym.imp.COMCTL32.dll_InitCommonControls]
push ebx
call dword [sym.imp.ole32.dll_CoInitialize]
mov edx, dword [esp + 0x45c]
mov eax, dword [esp + 0x460]
mov ecx, dword [esp + 0x468]
mov dword [0x4275c0], edx
mov dword [0x4264a0], eax
mov dword [0x4275c8], ecx
mov dword [0x426760], ebx
call fcn.00404a30
cmp dword [0x426760], ebx
jne 0x4058e8
mov edi, dword [sym.imp.USER32.dll_PeekMessageA]
mov ebp, dword [sym.imp.USER32.dll_TranslateMessage]
mov esi, dword [sym.imp.USER32.dll_GetDlgItem]
mov edi, edi
push 1
push ebx
push ebx
push ebx
lea edx, [esp + 0x54]
push edx
call edi
test eax, eax
je 0x40583d
cmp dword [esp + 0x48], 0x12
je 0x4058de
lea eax, [esp + 0x44]
push eax
call ebp
lea ecx, [esp + 0x44]
push ecx
call dword [sym.imp.USER32.dll_DispatchMessageA]
push 1
push ebx
push ebx
push ebx
lea edx, [esp + 0x54]
push edx
call edi
test eax, eax
jne 0x405810
cmp dword [0x426760], ebx
jne 0x4058e8
cmp dword [0x4275c4], ebx
je 0x405800
call fcn.00401f60
cmp eax, 1
jne 0x40586d
push eax
mov eax, dword [0x4275cc]
push 0xd
push eax
call esi
push eax
call dword [sym.imp.USER32.dll_EnableWindow]
mov ecx, dword [0x4275cc]
push 0x4272a0
push 0x66
push ecx
call esi
push eax
call dword [sym.imp.USER32.dll_SetWindowTextA]
fild dword [0x4273a4]
fnstcw word [esp + 0x10]
movzx eax, word [esp + 0x10]
fidiv dword [0x4275d0]
or eax, 0xc00
mov dword [esp + 0x1c], eax
mov eax, dword [0x4275cc]
push ebx
fmul qword [0x4192e0]
fldcw word [esp + 0x20]
fistp qword [esp + 0x40]
mov edx, dword [esp + 0x40]
push edx
push 0x402
push 0x65
fldcw word [esp + 0x20]
push eax
call esi
push eax
call dword [sym.imp.USER32.dll_SendMessageA]
cmp dword [0x426760], ebx
je 0x405800
jmp 0x4058e8
mov dword [0x426760], 1
call fcn.00402290
call dword [sym.imp.ole32.dll_CoUninitialize]
mov ecx, dword [0x426498]
push ecx
call fcn.00409e7e
mov edx, dword [0x4275cc]
add esp, 4
push edx
call dword [sym.imp.USER32.dll_DestroyWindow]
mov eax, dword [esp + 0x4c]
pop edi
pop ebp
mov ecx, dword [esp + 0x44c]
pop esi
pop ebx
xor ecx, esp
call fcn.0040a476
add esp, 0x448
ret 0x10