Function at 0x414c10
Capabilities:
Accept command line arguments
Check if file exists
Create process on windows
Get common file path
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x9cc
mov eax, dword [0x477b14]
push ebx
push esi
push edi
mov dword [esp + 0x9d4], eax
call dword [sym.imp.KERNEL32.dll_GetCommandLineW]
push eax
call dword [sym.imp.SHLWAPI.dll_PathGetArgsW]
mov esi, eax
cmp word [esi], 0x20
jne 0x414c49
add esi, 2
cmp word [esi], 0x20
je 0x414c40
call fcn.004094a0
test eax, eax
je 0x415186
xor eax, eax
mov word [esp + 0x2b8], 0
mov ecx, 0x81
lea edi, [esp + 0x2ba]
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
mov edi, dword [sym.imp.KERNEL32.dll_lstrcpyW]
push esi
lea eax, [esp + 0x2bc]
push eax
call edi
mov ebx, dword [sym.imp.KERNEL32.dll_lstrlenW]
lea ecx, [esp + 0x2b8]
push ecx
call ebx
test eax, eax
je 0x414d3c
cmp word [esp + 0x2b8], 0x22
lea eax, [esp + 0x2b8]
jne 0x414cb4
lea eax, [esp + 0x2ba]
mov cx, word [eax]
cmp cx, 0x22
mov edx, eax
je 0x414cd2
nop
test cx, cx
je 0x414cd2
mov cx, word [eax + 2]
add eax, 2
cmp cx, 0x22
jne 0x414cc0
sub eax, edx
mov esi, eax
sar esi, 1
push esi
push edx
push 0x47ba50
call fcn.00446267
add esp, 0xc
push 0x47ba50
push 0x4912d0
mov word [esi*2 + 0x47ba50], 0
call edi
push 0x47ba50
call ebx
cmp word [eax*2 + 0x47ba4e], 0x5c
lea eax, [eax*2 + 0x47ba4e]
je 0x414d2c
cmp eax, 0x47ba50
jbe 0x414d26
sub eax, 2
cmp word [eax], 0x5c
jne 0x414d16
cmp word [eax], 0x5c
jne 0x414d31
mov word [eax], 0
push 0x4912d0
call ebx
test eax, eax
jne 0x414d4e
push 0x104
push 0x4912d0
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push 0
call dword [sym.imp.ole32.dll_OleInitialize]
mov esi, dword [ebp + 8]
push esi
call fcn.004096d0
add esp, 4
call fcn.00423130
mov eax, dword [0x4912c8]
test eax, eax
mov edi, dword [sym.imp.USER32.dll_wsprintfW]
je 0x414dfd
push 0x104
lea edx, [esp + 0xb4]
push edx
call dword [sym.imp.KERNEL32.dll_GetSystemDirectoryW]
lea eax, [esp + 0xb0]
push eax
lea ecx, [esp + 0x4c4]
push str._smsxml2.dll
push ecx
call edi
add esp, 0xc
lea edx, [esp + 0x4c0]
push edx
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x414dfd
lea eax, [esp + 0xb0]
push eax
lea ecx, [esp + 0x4c4]
push str._smsxml3.dll
push ecx
call edi
add esp, 0xc
lea edx, [esp + 0x4c0]
push edx
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
jne 0x414dfd
push eax
push 0x414b80
push eax
push 0x182
push esi
call dword [sym.imp.USER32.dll_DialogBoxParamW]
jmp 0x41521c
push 0x477498
call ebx
test eax, eax
je 0x414e1c
push 0x46718c
push 0x477498
call dword [sym.imp.KERNEL32.dll_lstrcmpW]
test eax, eax
jne 0x414e46
lea eax, [esp + 0xa0]
push eax
call dword [sym.imp.ole32.dll_CoCreateGuid]
test eax, eax
jne 0x414e46
push pe_nt_image_headers32
push 0x477498
lea ecx, [esp + 0xa8]
push ecx
call dword [sym.imp.ole32.dll_StringFromGUID2]
push 0x477498
push str._s_Ctrl
push 0x477598
call edi
mov ebx, dword [sym.imp.USER32.dll_FindWindowW]
add esp, 0xc
push 0
push 0x477598
call ebx
test eax, eax
je 0x414ed2
mov eax, dword [0x4912bc]
test eax, eax
je 0x415216
mov esi, 1
nop
inc esi
push esi
push 0x477498
lea edx, [esp + 0x6d0]
push str._s_u_Ctrl
push edx
call edi
add esp, 0x10
push 0
lea eax, [esp + 0x6cc]
push eax
call ebx
test eax, eax
jne 0x414e80
push esi
push 0x477498
push str._s_u
push 0x477498
call edi
push 0x477498
push str._s_Ctrl
push 0x477598
call edi
mov esi, dword [ebp + 8]
add esp, 0x1c
push str.DesktopX_Application
push str.DXMain
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
call dword [sym.imp.COMCTL32.dll_InitCommonControls]
xor ecx, ecx
mov dword [esp + 0x5c], ecx
mov dword [esp + 0x60], ecx
mov dword [esp + 0x64], ecx
mov dword [esp + 0x68], ecx
mov dword [esp + 0x6c], ecx
mov dword [esp + 0x70], ecx
mov dword [esp + 0x74], ecx
mov dword [esp + 0x78], ecx
mov dword [esp + 0x7c], ecx
xor ebx, ebx
push 0x7f00
mov dword [esp + 0x84], ecx
push ebx
mov dword [esp + 0x68], 0x413cf0
mov dword [esp + 0x74], esi
mov dword [esp + 0x88], 0x477598
mov dword [esp + 0x64], ebx
call dword [sym.imp.USER32.dll_LoadCursorW]
mov dword [esp + 0x74], eax
cmp dword [0x4912b8], ebx
je 0x414f57
push 0x65
push esi
call dword [sym.imp.USER32.dll_LoadIconW]
mov dword [esp + 0x70], eax
lea edx, [esp + 0x5c]
push edx
call dword [sym.imp.USER32.dll_RegisterClassW]
mov ecx, dword [0x4912b8]
push ebx
push esi
push ebx
push ebx
push ebx
xor eax, eax
push ebx
cmp ecx, ebx
push ebx
setne al
push ebx
push 0x900a0000
push str.DXMain
push 0x477598
mov dword [0x47ac04], esi
dec eax
and eax, 0x80
push eax
call dword [sym.imp.USER32.dll_CreateWindowExW]
push 1
push ebx
push ebx
push ebx
push ebx
mov dword [0x47cbe4], eax
call dword [sym.imp.GDI32.dll_CreateRectRgn]
mov ecx, dword [0x47cbe4]
push eax
push ecx
call dword [sym.imp.USER32.dll_SetWindowRgn]
cmp dword [0x4912b8], ebx
je 0x415128
mov edx, dword [0x47cbe4]
push ebx
push edx
call dword [sym.imp.USER32.dll_GetSystemMenu]
mov esi, dword [sym.imp.USER32.dll_SetMenuItemInfoW]
lea ecx, [esp + 0x10]
push ecx
push ebx
push 0xf020
push eax
mov dword [0x4914d8], eax
mov dword [esp + 0x20], 0x30
mov dword [esp + 0x24], 2
mov dword [esp + 0x30], 4
call esi
mov ecx, dword [esp + 0x14]
mov eax, dword [0x4914d8]
lea edx, [esp + 0x10]
push edx
push ebx
push 0xf120
or ecx, 1
push eax
mov dword [esp + 0x24], ecx
mov dword [esp + 0x30], 5
mov dword [esp + 0x2c], 3
call esi
mov ecx, dword [0x4914d8]
mov esi, dword [sym.imp.USER32.dll_RemoveMenu]
push ebx
push 0xf030
push ecx
call esi
mov edx, dword [0x4914d8]
push ebx
push 0xf010
push edx
call esi
mov eax, dword [0x4914d8]
push ebx
push 0xf000
push eax
call esi
mov edx, dword [0x4914d8]
mov esi, dword [sym.imp.USER32.dll_InsertMenuItemW]
xor eax, eax
mov ecx, 0xc
lea edi, [esp + 0x10]
rep stosd dword es:[edi], eax
lea ecx, [esp + 0x10]
push ecx
push ebx
push 1
push edx
mov dword [esp + 0x24], 0x102
mov dword [esp + 0x20], 0x30
mov dword [esp + 0x28], 0x800
mov dword [esp + 0x30], ebx
call esi
mov edi, dword [sym.imp.KERNEL32.dll_lstrlenW]
push str.About
mov dword [esp + 0x18], 0x143
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x20], ebx
mov dword [esp + 0x38], str.About
call edi
mov ecx, dword [0x4914d8]
mov dword [esp + 0x38], eax
lea eax, [esp + 0x10]
push eax
push ebx
push 1
push ecx
mov dword [esp + 0x30], 3
call esi
push ebx
mov dword [esp + 0x38], str.Autorun
call fcn.00424b60
add esp, 4
neg eax
sbb eax, eax
mov edx, dword [esp + 0x34]
and eax, 8
push edx
mov dword [esp + 0x20], eax
call edi
mov ecx, dword [0x4914d8]
mov dword [esp + 0x38], eax
lea eax, [esp + 0x10]
push eax
push ebx
push 1
push ecx
mov dword [esp + 0x30], 6
call esi
mov esi, dword [ebp + 8]
mov edx, dword [0x47cbe4]
push 0x84
push str.DXHDL
push edx
call dword [sym.imp.USER32.dll_SetPropW]
push 0x11
call dword [sym.imp.GDI32.dll_GetStockObject]
mov dword [esp + 0x58], eax
mov eax, dword [0x47cbe4]
push eax
call dword [sym.imp.USER32.dll_GetDC]
mov ecx, dword [esp + 0x58]
mov edi, eax
push ecx
push edi
call dword [sym.imp.GDI32.dll_SelectObject]
mov edx, dword [0x47cbe4]
push edi
push edx
call dword [sym.imp.USER32.dll_ReleaseDC]
mov eax, dword [0x47cbe4]
push eax
push esi
call fcn.0040c0e0
add esp, 8
test eax, eax
jne 0x41519d
xor eax, eax
mov ecx, dword [esp + 0x9d4]
call fcn.00444c27
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
cmp dword [0x4912c0], ebx
je 0x4151b6
mov ecx, dword [0x47cbe4]
push ecx
push 1
call fcn.004010f0
add esp, 8
mov esi, dword [sym.imp.USER32.dll_GetMessageW]
push ebx
push ebx
push ebx
lea edx, [esp + 0x90]
push edx
call esi
test eax, eax
je 0x415210
mov edi, dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [esp + 0x84]
push eax
call fcn.00420680
add esp, 4
test eax, eax
jne 0x4151ff
lea ecx, [esp + 0x84]
push ecx
call edi
lea edx, [esp + 0x84]
push edx
call dword [sym.imp.USER32.dll_DispatchMessageW]
push ebx
push ebx
push ebx
lea eax, [esp + 0x90]
push eax
call esi
test eax, eax
jne 0x4151d3
call dword [sym.imp.ole32.dll_OleUninitialize]
mov ebx, dword [sym.imp.KERNEL32.dll_lstrlenW]
lea ecx, [esp + 0x2b8]
push ecx
call ebx
test eax, eax
je 0x41531f
mov esi, dword [sym.imp.KERNEL32.dll_lstrcpyW]
lea edx, [esp + 0x2b8]
push edx
lea eax, [esp + 0x4c4]
push eax
call esi
lea ecx, [esp + 0x4c0]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathRemoveArgsW]
lea edx, [esp + 0x4c0]
push edx
call ebx
lea eax, [esp + eax*2 + 0x2b8]
push eax
lea ecx, [esp + 0x7cc]
push ecx
call esi
lea edx, [esp + 0x4c0]
push edx
lea eax, [esp + 0xb4]
push eax
call esi
lea ecx, [esp + 0xb2]
mov esi, 0x22
push ecx
mov word [esp + 0xb4], si
call ebx
cmp word [esp + eax*2 + 0xb0], si
jne 0x4152b7
lea edx, [esp + 0xb2]
push edx
call ebx
mov word [esp + eax*2 + 0xb0], 0
lea eax, [esp + 0xb2]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x41531f
xor eax, eax
mov ecx, 0xf
lea edi, [esp + 0x10]
rep stosd dword es:[edi], eax
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], eax
lea eax, [esp + 0x10]
lea ecx, [esp + 0x4c0]
lea edx, [esp + 0x7c8]
push eax
mov dword [esp + 0x14], 0x3c
mov dword [esp + 0x2c], 0x47ba50
mov dword [esp + 0x30], 1
mov dword [esp + 0x18], 0x200
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], edx
call dword [sym.imp.SHELL32.dll_ShellExecuteExW]
mov eax, dword [0x4914e8]
test eax, eax
je 0x415381
xor eax, eax
mov ecx, 0x11
lea edi, [esp + 0x10]
rep stosd dword es:[edi], eax
lea ecx, [esp + 0xa0]
push ecx
lea edx, [esp + 0x14]
push edx
push eax
push eax
push 0x20
push eax
push eax
push eax
push 0x4912d0
push 0x4912d0
mov dword [esp + 0x38], 0x44
mov dword [esp + 0x3c], eax
mov dword [esp + 0x40], eax
mov dword [esp + 0x64], 1
mov word [esp + 0x68], 0xa
mov word [esp + 0x6a], ax
mov dword [esp + 0x6c], eax
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
mov ecx, dword [esp + 0x9d4]
mov eax, 1
call fcn.00444c27
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10