Function at 0x401000
Capabilities:
Accept command line arguments
Check if file exists
Create process on windows
Create process suspended

Disassembly:
sub esp, 0x688
push ebx
push ebp
push esi
xor esi, esi
push edi
mov dword [esp + 0x20], esi
call dword [sym.imp.KERNEL32.dll_GetTickCount]
mov ebx, dword [sym.imp.KERNEL32.dll_CreateEventA]
mov edi, eax
push str.WARCRAFT_III_LAUNCHER
push esi
add edi, 0x61a8
push esi
push esi
mov dword [esp + 0x28], edi
call ebx
mov ebp, dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [esp + 0x1c], eax
call ebp
cmp eax, 0xb7
jne 0x40105f
mov eax, dword [esp + 0x1c]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x688
ret 0x10
push str.Warcraft_III_Game_Application
push 0
push 0
push 0
call ebx
mov dword [esp + 0x10], eax
call ebp
cmp eax, 0xb7
jne 0x4010de
mov esi, dword [esp + 0x69c]
mov edi, dword [sym.imp.USER32.dll_LoadStringA]
lea ecx, [esp + 0x140]
push 0x104
push ecx
push 0xc
push esi
call edi
lea edx, [esp + 0x244]
push 0x104
push edx
push 0xd
push esi
call edi
lea eax, [esp + 0x244]
push 0
lea ecx, [esp + 0x144]
push eax
push ecx
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
mov edx, dword [esp + 0x10]
push edx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x688
ret 0x10
mov eax, dword [esp + 0x10]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
call fcn.00401b80
push str.WARCRAFT_III_OK
push 0
push 0
push 0
mov dword [0x40aacc], eax
call ebx
mov dword [esp + 0x10], eax
call ebp
cmp eax, 0xb7
je 0x4013b0
mov ebx, dword [esp + 0x69c]
mov ebp, dword [sym.imp.USER32.dll_LoadStringA]
mov ecx, 0x11
xor eax, eax
lea edi, [esp + 0x348]
lea edx, [esp + 0x594]
rep stosd dword es:[edi], eax
xor ecx, ecx
push 0x104
mov dword [esp + 0x28], ecx
push edx
mov dword [esp + 0x30], ecx
push 1
mov dword [esp + 0x38], ecx
push ebx
mov dword [esp + 0x40], ecx
call ebp
lea eax, [esp + 0x490]
push 0x104
push eax
push 7
push ebx
call ebp
lea ecx, [esp + 0x594]
push ecx
call fcn.00401d8e
lea edx, [esp + 0x494]
push edx
call fcn.00401d8e
add esp, 8
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
mov esi, eax
push 0x408034
push esi
call fcn.00401d18
add esp, 8
test eax, eax
jne 0x4011d8
mov cl, byte [eax + 0x408034]
mov byte [esp + eax + 0x140], cl
inc eax
test cl, cl
jne 0x40119b
lea edx, [esp + 0x140]
mov eax, esi
sub edx, esi
mov cl, byte [eax]
mov byte [edx + eax], cl
inc eax
test cl, cl
jne 0x4011b8
xor eax, eax
mov cl, byte [eax + 0x408034]
mov byte [esp + eax + 0x140], cl
inc eax
test cl, cl
jne 0x4011c4
jmp 0x4011ed
lea edx, [esp + 0x140]
mov eax, esi
sub edx, esi
mov cl, byte [eax]
mov byte [edx + eax], cl
inc eax
test cl, cl
jne 0x4011e3
lea eax, [esp + 0x140]
push eax
call fcn.00401d8e
add esp, 4
xor eax, eax
mov cl, byte [eax + 0x40aac8]
mov byte [esp + eax + 0x244], cl
inc eax
test cl, cl
jne 0x4011ff
lea ecx, [esp + 0x490]
lea edx, [esp + 0x140]
push ecx
push edx
call fcn.00401d18
lea ecx, [esp + 0x148]
lea edx, [esp + 0x148]
sub eax, ecx
push eax
lea eax, [esp + 0x250]
push edx
push eax
call fcn.00401c50
lea edi, [esp + 0x5a8]
or ecx, 0xffffffff
xor eax, eax
add esp, 0x14
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x244]
mov eax, ecx
mov esi, edi
mov edi, edx
mov edx, eax
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
lea edx, [esp + 0x244]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x244]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ax, word [0x408030]
mov cl, byte [0x408032]
dec edi
mov word [edi], ax
xor eax, eax
mov byte [edi + 2], cl
mov edi, dword [esp + 0x6a4]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
mov edx, eax
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
lea eax, [esp + 0x24]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x34c]
lea edx, [esp + 0x248]
push ecx
push 0
push 0
push 0
push 1
push 0
push 0
push edx
push 0
call dword [sym.imp.KERNEL32.dll_CreateProcessA]
test eax, eax
jne 0x40135f
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov esi, eax
lea eax, [esp + 0x38c]
push 0x104
push eax
push 2
push ebx
call ebp
lea ecx, [esp + 0x3c]
push 0x104
push ecx
push 9
push ebx
call ebp
push 0
call fcn.00401be0
mov ecx, dword [0x40aacc]
add esp, 4
lea edx, [esp + 0x38c]
lea eax, [esp + 0x3c]
push 0x40005
push edx
push eax
push ecx
call dword [sym.imp.USER32.dll_MessageBoxA]
cmp eax, 2
jne 0x40111e
jmp 0x4013ac
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x10]
push 0xffffffffffffffff
lea ecx, [esp + 0x38]
push 0
push ecx
push 2
mov dword [esp + 0x44], edx
mov dword [esp + 0x48], eax
call dword [sym.imp.KERNEL32.dll_WaitForMultipleObjects]
lea edx, [esp + 0x38c]
push 0x104
push edx
push 2
push ebx
mov esi, eax
call ebp
mov eax, esi
sub eax, 0
je 0x4013e1
dec eax
jne 0x40111e
push 0
call fcn.00401be0
add esp, 4
mov edi, dword [esp + 0x18]
push edi
call fcn.00401be0
add esp, 4
call fcn.00401c30
mov eax, dword [esp + 0x10]
mov edi, dword [sym.imp.KERNEL32.dll_CloseHandle]
push eax
call edi
mov ecx, dword [esp + 0x1c]
push ecx
call edi
mov eax, esi
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x688
ret 0x10
mov ecx, dword [esp + 0x24]
lea eax, [esp + 0x20]
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
mov eax, dword [esp + 0x20]
cmp eax, 0x11
ja case.0x401402.8
xor edx, edx
mov dl, byte [eax + 0x4014e4]
jmp dword [edx*4 + 0x4014c0]
lea eax, [esp + 0x3c]
push 0x104
push eax
push 4
jmp 0x401485
lea ecx, [esp + 0x3c]
push 0x104
push ecx
push 5
jmp 0x401485
lea edx, [esp + 0x3c]
push 0x104
push edx
push 6
jmp 0x401485
lea eax, [esp + 0x3c]
push 0x104
push eax
push 0xa
jmp 0x401485
lea ecx, [esp + 0x3c]
push 0x104
push ecx
push 0xe
jmp 0x401485
lea edx, [esp + 0x3c]
push 0x104
push edx
push 0xf
jmp 0x401485
lea eax, [esp + 0x3c]
push 0x104
push eax
push 0x10
jmp 0x401485
lea ecx, [esp + 0x3c]
push 0x104
push ecx
push 3
jmp 0x401485
lea edx, [esp + 0x3c]
push 0x104
push edx
push 8
push ebx
call ebp
push 0
call fcn.00401be0
mov edx, dword [0x40aacc]
add esp, 4
lea eax, [esp + 0x38c]
lea ecx, [esp + 0x3c]
push 0x40005
push eax
push ecx
push edx
call dword [sym.imp.USER32.dll_MessageBoxA]
cmp eax, 2
jne 0x40111e
jmp 0x4013ac
dec esi
cmc
imul ah
cmc
dec esi
cmc
cmc
ljmp 0x1df5
push eax
push edx
xchg esp, eax
push edx
push eax
push edx
xchg ebx, eax
push edi
push edi
push eax
dec ecx
xchg ebx, eax
sub al, 0x51
push edx
push eax
xchg ebx, eax
push edi
push edx
push eax
push eax
dec eax
dec esi
dec edi
xchg ecx, eax
push eax
push eax
dec edi
dec edi
dec edi
hlt