Function at 0x408460
Capabilities:
Check if file exists
Delete registry key
Get common file path
Get program files directory

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
mov eax, 0x1014
call fcn.00414550
mov eax, dword [0x41e008]
xor eax, esp
mov dword [esp + 0x1010], eax
xor ecx, ecx
cmp byte [0x420512], cl
push ebx
setne cl
push esi
push edi
add ecx, 5
call fcn.00408aa0
xor ecx, ecx
nop word [eax + eax]
mov al, byte [ecx + 0x420110]
lea ecx, [ecx + 1]
mov byte [esp + ecx + 0x17], al
test al, al
jne 0x4084a0
mov ebx, dword [sym.imp.SHLWAPI.dll_PathAppendA]
lea eax, [esp + 0x18]
push str.Installation.nod
push eax
call ebx
mov esi, dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
lea eax, [esp + 0x18]
push eax
call esi
test eax, eax
je 0x408521
lea eax, [esp + 0x18]
push 0x41a194
push eax
call dword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll_fopen]
mov esi, eax
add esp, 8
test esi, esi
je 0x40851b
mov ecx, esi
call fcn.0040c370
test eax, eax
je 0x408511
mov ecx, dword [0x420d24]
test ecx, ecx
je 0x408507
call fcn.00409420
mov dword [0x420d24], 0
push esi
call dword [sym.imp.api_ms_win_crt_stdio_l1_1_0.dll_fclose]
add esp, 4
mov esi, dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
mov ecx, 1
call fcn.00403490
mov ecx, dword [0x420d24]
test ecx, ecx
je 0x40861b
mov edx, str.VSPUpgrade
call fcn.0040a560
mov ecx, eax
call fcn.00409990
mov edx, 0x420d30
sub edx, eax
mov cl, byte [eax]
lea eax, [eax + 1]
mov byte [edx + eax - 1], cl
test cl, cl
jne 0x408551
mov ecx, dword [0x420d24]
mov edx, str.CrypKey
call fcn.0040a560
mov edi, eax
test edi, edi
je 0x40859d
mov edx, str.CrypKeyLocale
mov ecx, edi
call fcn.0040a560
mov ecx, eax
call fcn.00409990
mov edx, 0x41fd00
sub edx, eax
nop
mov cl, byte [eax]
lea eax, [eax + 1]
mov byte [edx + eax - 1], cl
test cl, cl
jne 0x408590
mov ecx, dword [0x420d24]
mov edx, str.Services
call fcn.0040a560
mov ecx, eax
call fcn.0040d550
mov ecx, dword [0x420d24]
mov edx, str.InstallLocales
mov dword [0x41e8e0], eax
call fcn.0040a560
mov ecx, eax
call fcn.0040d550
mov ecx, dword [0x420d24]
mov edx, str.CurrentCrypServ
mov dword [0x41f8f4], eax
call fcn.0040a560
mov ecx, eax
call fcn.00409730
movzx ecx, byte [0x420510]
cmp eax, 1
mov eax, 1
mov edx, str.NewInstall
cmove ecx, eax
mov byte [0x420510], cl
mov ecx, edi
call fcn.0040a560
mov ecx, eax
call fcn.00409730
mov edi, eax
jmp 0x40861f
mov edi, dword [esp + 0x10]
cmp dword [0x421530], 1
lea eax, [esp + 0x418]
jne 0x408650
push 0x400
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryA]
lea eax, [esp + 0x418]
push eax
call dword [sym.imp.SHLWAPI.dll_PathStripToRootA]
push str.DBDOCCIUMon
jmp 0x408662
push 0
push 0x26
push eax
push 0
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathA]
push str.GMCL
lea eax, [esp + 0x41c]
push eax
call ebx
cmp byte [0x420512], 0
je 0x408699
mov cl, 1
call fcn.00402980
test edi, edi
je 0x4089b9
push str.SoftwareG._Michaels_Consulting_Ltd.
push 0x80000002
call dword [sym.imp.ADVAPI32.dll_RegDeleteKeyA]
jmp 0x4089b9
xor ecx, ecx
nop dword [eax + eax]
mov al, byte [ecx + 0x41fd00]
lea ecx, [ecx + 1]
mov byte [esp + ecx + 0x17], al
test al, al
jne 0x4086a0
cmp dword [0x421530], 2
mov ecx, 0x4187d0
mov eax, str.BuildPlus.exe
cmovne eax, ecx
push eax
lea eax, [esp + 0x1c]
push eax
call ebx
lea eax, [esp + 0x18]
push eax
call esi
test eax, eax
jne 0x4086e4
mov byte [0x420d20], 1
jmp 0x4089b9
cmp byte [0x41e8ec], 0
jne 0x408934
mov ecx, 0x420d30
call fcn.00406ea0
mov ecx, 0x420d30
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x408703
sub ecx, edx
je 0x40871b
cmp byte [0x41e8ee], al
jne 0x40871b
call fcn.00406f20
cmp byte [0x420510], 0
jne 0x408890
call fcn.00403a20
test al, al
je 0x40880e
xor ecx, ecx
nop word [eax + eax]
mov al, byte [ecx + 0x41fd00]
lea ecx, [ecx + 1]
mov byte [esp + ecx + 0x17], al
test al, al
jne 0x408740
push str.setupex.exe
lea eax, [esp + 0x1c]
push eax
call ebx
lea eax, [esp + 0x18]
push eax
call esi
test eax, eax
je 0x408777
mov ecx, 0x41fd00
call fcn.00405fb0
jmp 0x40880e
mov ecx, dword [0x41f8f4]
call fcn.0040e0c0
mov ecx, eax
mov dword [esp + 0xc], eax
call fcn.004092d0
mov edi, eax
test edi, edi
je 0x408805
mov ecx, edi
call fcn.00409990
mov ecx, dword [0x41f8f4]
mov edx, eax
mov dword [esp + 0x14], eax
call fcn.0040a560
mov ebx, eax
test ebx, ebx
je 0x4087e1
mov edx, 0x418eec
mov ecx, ebx
call fcn.0040a560
mov ecx, eax
call fcn.00409730
mov edx, str.Setup
mov ecx, ebx
mov esi, eax
call fcn.0040a560
mov ecx, eax
call fcn.00409730
test esi, esi
je 0x4087e1
test eax, eax
jne 0x4087f0
mov ecx, edi
call fcn.00409310
mov edi, eax
test edi, edi
jne 0x408793
jmp 0x4087f9
mov ecx, dword [esp + 0x14]
call fcn.00405fb0
mov esi, dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
mov ebx, dword [sym.imp.SHLWAPI.dll_PathAppendA]
mov ecx, dword [esp + 0xc]
call fcn.00409420
xor ecx, ecx
mov al, byte [ecx + 0x41fd00]
lea ecx, [ecx + 1]
mov byte [esp + ecx + 0x17], al
test al, al
jne 0x408810
push str.setupex.exe
lea eax, [esp + 0x1c]
push eax
call ebx
lea eax, [esp + 0x18]
push eax
call esi
test eax, eax
je 0x408934
lea eax, [esp + 0x18]
push eax
lea eax, [esp + 0x81c]
push str._s__s
push eax
call fcn.004010e0
add esp, 0xc
lea eax, [esp + 0x10]
lea edx, [esp + 0x818]
push 1
push eax
push 0x41fd00
call fcn.004013b0
add esp, 0xc
xor ecx, ecx
mov al, byte [esp + ecx + 0x18]
lea ecx, [ecx + 1]
mov byte [ecx + 0x42091f], al
test al, al
jne 0x408873
mov byte [0x41e8ed], 1
jmp 0x408934
call fcn.00403a20
test al, al
jne 0x40892f
xor ecx, ecx
nop
mov al, byte [ecx + 0x41fd00]
lea ecx, [ecx + 1]
mov byte [esp + ecx + 0x17], al
test al, al
jne 0x4088a0
push str.setupex.exe
lea eax, [esp + 0x1c]
push eax
call ebx
lea eax, [esp + 0x18]
push eax
call esi
test eax, eax
je 0x40892f
lea eax, [esp + 0x18]
push eax
lea eax, [esp + 0x81c]
push str._s__s
push eax
call fcn.004010e0
add esp, 0xc
lea eax, [esp + 0x10]
lea edx, [esp + 0x818]
push 1
push eax
push 0x41fd00
call fcn.004013b0
add esp, 0xc
xor ecx, ecx
nop
mov al, byte [esp + ecx + 0x18]
lea ecx, [ecx + 1]
mov byte [ecx + 0x42091f], al
test al, al
jne 0x408900
movzx eax, byte [0x420510]
xor ecx, ecx
cmp byte [0x420d21], cl
mov byte [0x41e8ed], 1
cmovne eax, ecx
mov byte [0x420510], al
call fcn.004083a0
call fcn.00408b30
mov cl, 1
call fcn.00402980
call fcn.00408ad0
cmp dword [0x421530], 2
jne 0x4089b9
mov ecx, 2
call fcn.00408aa0
push 0x400
lea eax, [esp + 0xc1c]
push 0
push eax
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
lea ecx, [esp + 0xc18]
call fcn.004074c0
call fcn.00408ad0
lea ecx, [esp + 0xc18]
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x408990
sub ecx, edx
je 0x4089b9
push 0x11030
push str.Program_Mismatch_Missing
lea eax, [esp + 0xc20]
push eax
push dword [0x41f8f0]
call dword [sym.imp.USER32.dll_MessageBoxA]
call fcn.00408ad0
call fcn.00404d50
call fcn.004053b0
mov ecx, dword [esp + 0x101c]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.00412814
mov esp, ebp
pop ebp
ret