Function at 0x4028b2
Capabilities:
Check if file exists
Get common file path
Query or enumerate registry value
Read .ini file

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xe4c
mov eax, dword [0x43d06c]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
push esi
push edi
mov esi, 0x208
mov dword [ebp - 0xe44], ecx
push esi
xor ebx, ebx
lea eax, [ebp - 0x418]
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0xa30]
push esi
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0x828]
push esi
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0x210]
push esi
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0x620]
push esi
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0xe40]
push esi
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea eax, [ebp - 0x418]
push ebx
push 0x2b
push eax
push ebx
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
lea edi, [ebp - 0x418]
push 2
sub edi, 2
pop edx
mov ax, word [edi + 2]
add edi, edx
cmp ax, bx
jne 0x402958
mov eax, dword [0x436a34]
mov dword [edi], eax
lea edi, [ebp - 0x418]
sub edi, 2
mov cx, word [edi + 2]
add edi, edx
cmp cx, bx
jne 0x402973
mov esi, 0x4368c8
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
lea edi, [ebp - 0x418]
sub edi, 2
mov cx, word [edi + 2]
add edi, edx
cmp cx, bx
jne 0x402992
mov dword [edi], eax
lea edi, [ebp - 0x418]
sub edi, 2
mov ax, word [edi + 2]
add edi, edx
cmp ax, bx
jne 0x4029a8
mov esi, 0x4368c8
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
lea edi, [ebp - 0x418]
sub edi, 2
mov ax, word [edi + 2]
add edi, edx
cmp ax, bx
jne 0x4029c7
mov esi, str..ini
lea eax, [ebp - 0x418]
push eax
push 0x104
lea eax, [ebp - 0xa30]
movsd dword es:[edi], dword [esi]
push eax
push 0x4368c0
push str.InstallPath
movsd dword es:[edi], dword [esi]
push str.AppConfig
movsw word es:[edi], word [esi]
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
mov ecx, ebx
movzx eax, word [ebp + ecx - 0xa30]
lea ecx, [ecx + 2]
mov word [ebp + ecx - 0x212], ax
test ax, ax
jne 0x402a05
mov ecx, ebx
movzx eax, word [ebp + ecx - 0x210]
lea ecx, [ecx + 2]
mov word [ebp + ecx - 0x622], ax
test ax, ax
jne 0x402a1f
mov ecx, dword [ebp - 0xe44]
lea eax, [ebp - 0x210]
push eax
call fcn.00402cd6
test eax, eax
jne 0x402ca3
push 0x1f4
lea eax, [ebp - 0xc24]
push ebx
push eax
call fcn.00412480
add esp, 0xc
lea edi, [ebp - 0xc38]
mov esi, str.SOFTWARE_
push 5
pop ecx
rep movsd dword es:[edi], dword [esi]
lea edi, [ebp - 0xc38]
sub edi, 2
mov ax, word [edi + 2]
add edi, 2
cmp ax, bx
jne 0x402a7f
mov esi, 0x4368c8
lea eax, [ebp - 0xe48]
push eax
push 0x20019
push ebx
movsd dword es:[edi], dword [esi]
lea eax, [ebp - 0xc38]
push eax
push 0x80000002
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExW]
test eax, eax
jne 0x402b5b
lea eax, [ebp - 0xe4c]
mov dword [ebp - 0xe4c], 0x208
push eax
lea eax, [ebp - 0xe40]
push eax
push ebx
push ebx
push str.InstallPath
push dword [ebp - 0xe48]
call dword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
test eax, eax
jne 0x402b5b
mov ecx, ebx
movzx eax, word [ebp + ecx - 0xe40]
lea ecx, [ecx + 2]
mov word [ebp + ecx - 0x212], ax
test ax, ax
jne 0x402aee
mov ecx, ebx
movzx eax, word [ebp + ecx - 0x210]
lea ecx, [ecx + 2]
mov word [ebp + ecx - 0x622], ax
test ax, ax
jne 0x402b08
mov esi, dword [ebp - 0xe44]
lea eax, [ebp - 0x210]
push eax
mov ecx, esi
call fcn.00402cd6
test eax, eax
je 0x402b5b
push dword [ebp - 0xe48]
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
lea eax, [ebp - 0x210]
push eax
lea ecx, [esi + 0x40]
call fcn.004025b1
lea ecx, [esi + 0x70]
jmp 0x402cbb
push dword [ebp - 0xe48]
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
push ecx
push ecx
lea edx, [ebp - 0x828]
call fcn.004060c0
pop ecx
lea edi, [ebp - 0x828]
pop ecx
sub edi, 2
mov ax, word [edi + 2]
lea edi, [edi + 2]
cmp ax, bx
jne 0x402b7f
mov eax, dword [0x436a34]
mov dword [edi], eax
lea edi, [ebp - 0x828]
sub edi, 2
mov cx, word [edi + 2]
add edi, 2
cmp cx, bx
jne 0x402b9b
mov esi, str.ConhZip
push 2
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
lea edi, [ebp - 0x828]
sub edi, 2
pop esi
mov cx, word [edi + 2]
add edi, esi
cmp cx, bx
jne 0x402bbc
mov dword [edi], eax
mov ecx, ebx
movzx eax, word [ebp + ecx - 0x828]
mov word [ebp + ecx - 0x210], ax
add ecx, esi
test ax, ax
jne 0x402bcb
mov ecx, ebx
movzx eax, word [ebp + ecx - 0x210]
mov word [ebp + ecx - 0x620], ax
add ecx, esi
test ax, ax
jne 0x402be4
mov ecx, dword [ebp - 0xe44]
lea eax, [ebp - 0x210]
push eax
call fcn.00402cd6
test eax, eax
jne 0x402ca3
lea ecx, [ebp - 0xa30]
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, esi
cmp ax, bx
jne 0x402c1e
sub ecx, edx
sar ecx, 1
test ecx, ecx
jle 0x402c73
lea eax, [ebp - 0xa30]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x402c73
mov ecx, ebx
movzx eax, word [ebp + ecx - 0xa30]
mov word [ebp + ecx - 0x210], ax
add ecx, esi
test ax, ax
jne 0x402c43
movzx eax, word [ebp + ebx - 0x210]
mov word [ebp + ebx - 0x620], ax
add ebx, esi
test ax, ax
jne 0x402c5a
jmp 0x402ca3
mov ecx, ebx
movzx eax, word [ebp + ecx - 0x828]
mov word [ebp + ecx - 0x210], ax
add ecx, esi
test ax, ax
jne 0x402c75
movzx eax, word [ebp + ebx - 0x210]
mov word [ebp + ebx - 0x620], ax
add ebx, esi
test ax, ax
jne 0x402c8c
mov ebx, dword [ebp - 0xe44]
lea eax, [ebp - 0x210]
push eax
lea ecx, [ebx + 0x40]
call fcn.004025b1
lea ecx, [ebx + 0x70]
lea eax, [ebp - 0x620]
push eax
call fcn.004025b1
mov ecx, dword [ebp - 4]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.004108e9
leave
ret