Function at 0x401000
Capabilities:
Accept command line arguments
Check if file exists
Create process on windows
Get common file path
Get file attributes
Read file on windows
Write and execute a file
Write file on windows

Disassembly:
push ebp
mov ebp, esp
mov eax, 0xc7e0
call fcn.004098c0
mov eax, dword [0x410004]
xor eax, ebp
mov dword [ebp - 4], eax
push esi
mov esi, dword [sym.imp.KERNEL32.dll_GetCommandLineW]
push edi
lea eax, [ebp - 0xc798]
push eax
call esi
push eax
call dword [sym.imp.SHELL32.dll_CommandLineToArgvW]
mov edi, eax
mov dword [ebp - 0xc790], edi
test edi, edi
jne 0x401065
push 0x10
push str.MSI_Proxy_Error
push str.Unable_to_parse_command_line
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
pop edi
mov eax, 0x271e
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0xc798]
cmp eax, 3
jge 0x4010b7
push eax
push str.Invalid_parameter_count___d_.
lea ecx, [ebp - 0xc76c]
push 0x2710
push ecx
call fcn.00401727
add esp, 0x10
push 0x10
push str.MSI_Proxy_Error
lea edx, [ebp - 0xc76c]
push edx
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop edi
mov eax, 0x2711
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
push ebx
call esi
mov esi, eax
push esi
push str.Original_command_line_s
lea eax, [ebp - 0xc76c]
push 0x2710
push eax
call fcn.00401727
mov eax, dword [edi]
push eax
push str.Me_s
lea ecx, [ebp - 0xc76c]
push 0x2710
push ecx
mov dword [ebp - 0xc794], eax
call fcn.00401727
mov edx, dword [edi + 4]
push edx
call fcn.00401745
mov ebx, eax
add esp, 0x24
test ebx, ebx
jg 0x40114c
push ebx
push str.Invalid_parameter_offset___d_.
lea eax, [ebp - 0xc76c]
push 0x2710
push eax
call fcn.00401727
add esp, 0x10
push 0x10
push str.MSI_Proxy_Error
lea ecx, [ebp - 0xc76c]
push ecx
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2712
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov edi, dword [edi + 8]
push edi
push str.Working_Dir_s
lea edx, [ebp - 0xc76c]
push 0x2710
push edx
mov dword [ebp - 0xc77c], edi
call fcn.00401727
add esp, 0x10
push edi
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
je 0x40117f
test al, 0x10
jne 0x401189
mov dword [ebp - 0xc77c], 0
mov eax, esi
xor edx, edx
lea edi, [eax + 2]
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x401190
sub eax, edi
sar eax, 1
je 0x4011cc
cmp word [esi + edx*2], 0x2a
je 0x4011c5
mov eax, esi
inc edx
lea edi, [eax + 2]
mov edi, edi
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x4011b0
sub eax, edi
sar eax, 1
cmp edx, eax
jb 0x4011a1
jmp 0x4011cc
lea eax, [edx + 1]
test eax, eax
jne 0x4011fe
push ebx
push str.Marker_not_found_in_command_line.
lea eax, [ebp - 0xc76c]
push 0x2710
push eax
call fcn.00401727
add esp, 0x10
pop ebx
pop edi
mov eax, 0x271c
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
lea edi, [esi + eax*2]
push edi
push str.Embedded_command_line__s_
lea ecx, [ebp - 0xc76c]
push 0x2710
push ecx
call fcn.00401727
add esp, 0x10
lea edx, [ebp - 0x41c]
push edx
push 0x105
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
test eax, eax
jne 0x40125c
push 0x10
push str.MSI_Proxy_Error
push str.Unable_to_get_temp_dir.
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2713
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
lea eax, [ebp - 0x210]
push eax
push 0
push 0x40e5f4
lea ecx, [ebp - 0x41c]
push ecx
call dword [sym.imp.KERNEL32.dll_GetTempFileNameW]
test eax, eax
jne 0x4012a6
push 0x10
push str.MSI_Proxy_Error
push str.Unable_to_get_temp_file_name.
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2714
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov edx, dword [ebp - 0xc794]
push 0x40e638
push edx
lea eax, [ebp - 0xc770]
push eax
call fcn.00401821
add esp, 0xc
test eax, eax
je 0x40130d
push eax
push str.Error_opening_input_file._Error_number__d.
lea ecx, [ebp - 0xc76c]
push 0x2710
push ecx
call fcn.00401727
add esp, 0x10
push 0x10
push str.MSI_Proxy_Error
lea edx, [ebp - 0xc76c]
push edx
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2715
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
push 0x40e698
lea eax, [ebp - 0x210]
push eax
lea ecx, [ebp - 0xc774]
push ecx
call fcn.00401821
add esp, 0xc
test eax, eax
je 0x401374
push eax
push str.Error_opening_output_file._Error_number__d.
lea edx, [ebp - 0xc76c]
push 0x2710
push edx
call fcn.00401727
add esp, 0x10
push 0x10
push str.MSI_Proxy_Error
lea eax, [ebp - 0xc76c]
push eax
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2715
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov ecx, dword [ebp - 0xc770]
push 2
neg ebx
push ebx
push ecx
call fcn.004018fe
add esp, 0xc
test eax, eax
jge 0x4013b8
push 0x10
push str.MSI_Proxy_Error
push str.Error_moving_file_pointer_to_offset.
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2717
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov edx, dword [ebp - 0xc770]
push edx
call fcn.00401983
add esp, 4
test eax, eax
jne 0x401437
jmp 0x4013d0
mov eax, dword [ebp - 0xc770]
push eax
push 0x2710
lea ecx, [ebp - 0x794c]
push 1
push ecx
call fcn.00401c8b
mov edx, dword [ebp - 0xc770]
push edx
mov esi, eax
call fcn.004019b7
add esp, 0x14
test eax, eax
jne 0x4015ae
mov eax, dword [ebp - 0xc774]
push eax
push esi
lea ecx, [ebp - 0x794c]
push 1
push ecx
call fcn.00401e0a
add esp, 0x10
cmp esi, eax
jne 0x4015da
mov edx, dword [ebp - 0xc770]
push edx
call fcn.00401983
add esp, 4
test eax, eax
je 0x4013d0
mov eax, dword [ebp - 0xc770]
push eax
call fcn.00401f03
mov ecx, dword [ebp - 0xc774]
push ecx
call fcn.00401f03
xor eax, eax
push 0x44
push eax
lea edx, [ebp - 0xc7e0]
push edx
mov dword [ebp - 0xc78c], eax
mov dword [ebp - 0xc788], eax
mov dword [ebp - 0xc784], eax
mov dword [ebp - 0xc780], eax
call fcn.00404060
add esp, 0x14
push 0
mov dword [ebp - 0xc7e0], 0x44
call dword [sym.imp.KERNEL32.dll_SetLastError]
xor eax, eax
push 0x4e1e
push eax
lea ecx, [ebp - 0x523a]
push ecx
mov word [ebp - 0x523c], ax
call fcn.00404060
push 0x40e7b4
lea edx, [ebp - 0x523c]
push 0x2710
push edx
call fcn.00401f7f
lea eax, [ebp - 0x210]
push eax
lea ecx, [ebp - 0x523c]
push 0x2710
push ecx
call fcn.00401f7f
push 0x40e7b8
lea edx, [ebp - 0x523c]
push 0x2710
push edx
call fcn.00401f7f
push edi
lea eax, [ebp - 0x523c]
push 0x2710
push eax
call fcn.00401f7f
lea ecx, [ebp - 0x523c]
push ecx
push str.Run__s.
lea edx, [ebp - 0xc76c]
push 0x2710
push edx
call fcn.00401727
mov edx, dword [ebp - 0xc77c]
add esp, 0x4c
lea eax, [ebp - 0xc78c]
push eax
lea ecx, [ebp - 0xc7e0]
push ecx
push edx
push 0
push 0
push 0
push 0
push 0
lea eax, [ebp - 0x523c]
push eax
push 0
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
test eax, eax
jne 0x401606
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
push eax
call esi
push eax
lea ecx, [ebp - 0x523c]
push ecx
push str.Error_running__s._Error__ld__0x_lx_.
lea edx, [ebp - 0xc76c]
push 0x2710
push edx
call fcn.00401727
add esp, 0x18
push 0x10
push str.MSI_Proxy_Error
lea eax, [ebp - 0xc76c]
push eax
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x271b
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
push 0x10
push str.MSI_Proxy_Error
push str.Error_reading_input_file.
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2718
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
push 0x10
push str.MSI_Proxy_Error
push str.Error_writing_output_file.
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x2719
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov ecx, dword [ebp - 0xc78c]
push 0xffffffffffffffff
push ecx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov eax, dword [ebp - 0xc78c]
lea edx, [ebp - 0xc778]
push edx
push eax
mov dword [ebp - 0xc778], 0
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
test eax, eax
jne 0x401662
push 0x10
push str.MSI_Proxy_Error
push str.Error_getting_exit_code.
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x271d
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov ecx, dword [ebp - 0xc78c]
mov esi, dword [sym.imp.KERNEL32.dll_CloseHandle]
push ecx
call esi
mov edx, dword [ebp - 0xc788]
push edx
call esi
mov ebx, dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
mov edi, dword [sym.imp.KERNEL32.dll_Sleep]
xor esi, esi
jmp 0x401690
lea eax, [ebp - 0x210]
push eax
call fcn.00401ffc
add esp, 4
lea ecx, [ebp - 0x210]
push ecx
call ebx
test eax, eax
je 0x4016b9
push 0x3e8
call edi
inc esi
cmp esi, 0x78
jl 0x401690
lea edx, [ebp - 0x210]
push edx
call ebx
test eax, eax
je 0x4016f2
push 0x10
push str.MSI_Proxy_Error
push str.Error_removing_temp_executable.
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
pop ebx
pop edi
mov eax, 0x271a
pop esi
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0xc790]
push eax
call dword [sym.imp.KERNEL32.dll_LocalFree]
mov ecx, dword [ebp - 4]
mov eax, dword [ebp - 0xc778]
pop ebx
pop edi
xor ecx, ebp
pop esi
call fcn.00401718
mov esp, ebp
pop ebp
ret 0x10