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
mov dword [esp + 0x14], esi
call dword [sym.imp.KERNEL32.dll_GetTickCount]
mov edi, dword [sym.imp.KERNEL32.dll_CreateEventA]
mov ebx, eax
push str.WARCRAFT_III_LAUNCHER
push esi
add ebx, 0x61a8
push esi
push esi
mov dword [esp + 0x28], ebx
call edi
mov ebp, dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [esp + 0x1c], eax
call ebp
cmp eax, 0xb7
jne 0x401063
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 edi
mov dword [esp + 0x10], eax
call ebp
cmp eax, 0xb7
jne 0x4010dc
mov esi, dword [esp + 0x69c]
mov edi, dword [sym.imp.USER32.dll_LoadStringA]
lea ecx, [esp + 0x3c]
push 0x104
push ecx
push 0xc
push esi
call edi
lea edx, [esp + 0x140]
push 0x104
push edx
push 0xd
push esi
call edi
lea eax, [esp + 0x140]
push 0
lea ecx, [esp + 0x40]
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.00401bd0
push str.WARCRAFT_III_OK
push 0
push 0
push 0
mov dword [0x40aadc], eax
call edi
mov dword [esp + 0x10], eax
call ebp
cmp eax, 0xb7
mov eax, 1
je 0x401114
mov eax, dword [esp + 0x14]
test eax, eax
jne 0x4014ec
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.00401dde
lea edx, [esp + 0x494]
push edx
call fcn.00401dde
add esp, 8
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
mov edi, eax
push 0x408040
push edi
mov dword [esp + 0x1c], edi
call fcn.00401d68
add esp, 8
lea edx, [esp + 0x3c]
test eax, eax
jne 0x4011fe
mov edi, 0x408040
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x3c]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x14]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x3c]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, 0x408040
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x3c]
push ecx
call fcn.00401dde
mov edi, 0x40aad8
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x144]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x40]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x494]
push ecx
push edx
call fcn.00401d68
lea ecx, [esp + 0x48]
lea edx, [esp + 0x48]
sub eax, ecx
push eax
lea eax, [esp + 0x150]
push edx
push eax
call fcn.00401ca0
lea edi, [esp + 0x5ac]
or ecx, 0xffffffff
xor eax, eax
add esp, 0x18
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x140]
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
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 + 0x140]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, 0x40803c
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str._classic
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x140]
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
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 + 0x140]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, dword [esp + 0x6a4]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
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 + 0x144]
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 0x4013d1
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 + 0x244]
push 0x104
push ecx
push 9
push ebx
call ebp
push 0
call fcn.00401c30
mov ecx, dword [0x40aadc]
add esp, 4
lea edx, [esp + 0x38c]
lea eax, [esp + 0x244]
push 0x40005
push edx
push eax
push ecx
call dword [sym.imp.USER32.dll_MessageBoxA]
cmp eax, 2
je 0x4014e8
jmp 0x401129
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 0x401419
dec eax
je 0x4014de
jmp 0x401129
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, 0xd
ja case.default.0x40143a
xor edx, edx
mov dl, byte [eax + 0x401534]
jmp dword [edx*4 + 0x401520]
lea eax, [esp + 0x244]
push 0x104
push eax
push 4
jmp 0x4014a5
lea ecx, [esp + 0x244]
push 0x104
push ecx
push 5
jmp 0x4014a5
lea edx, [esp + 0x244]
push 0x104
push edx
push 6
jmp 0x4014a5
lea eax, [esp + 0x244]
push 0x104
push eax
push 0xa
jmp 0x4014a5
lea ecx, [esp + 0x244]
push 0x104
push ecx
push 3
jmp 0x4014a5
lea edx, [esp + 0x244]
push 0x104
push edx
push 8
push ebx
call ebp
push 0
call fcn.00401c30
mov edx, dword [0x40aadc]
add esp, 4
lea eax, [esp + 0x38c]
lea ecx, [esp + 0x244]
push 0x40005
push eax
push ecx
push edx
call dword [sym.imp.USER32.dll_MessageBoxA]
cmp eax, 2
je 0x4014e8
jmp 0x401129
push 0
call fcn.00401c30
add esp, 4
mov ebx, dword [esp + 0x18]
push ebx
call fcn.00401c30
add esp, 4
call fcn.00401c80
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
dec esp
jno 0x401863
add dl, dh
scasb al, byte es:[edi]
not ecx
mov dword [esp + 0x28], edx
dec ecx
lea edx, [esp + 0x94]
push ecx
push edx
push esi
call ebx
push 0xc8f0
push esi
call dword [sym.imp.GDI32.dll_SetTextColor]
push 0
push esi
call dword [sym.imp.GDI32.dll_SetBkColor]
push 1
push esi
call dword [sym.imp.GDI32.dll_SetBkMode]
mov ebp, dword [esp + 0x18]
mov edi, dword [esp + 0x14]
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x20]
sub eax, ecx
push 0x11
sub eax, 8
add ecx, eax
add ebp, eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x24], ecx
mov ecx, dword [esp + 0x20]
mov dword [esp + 0x1c], ebp
sub eax, ecx
sub eax, 0x10
cdq
sub eax, edx
sar eax, 1
add eax, 8
add edi, eax
add ecx, eax
lea eax, [esp + 0x18]
mov dword [esp + 0x18], edi
mov dword [esp + 0x20], ecx
push eax
lea edi, [esp + 0x94]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [esp + 0x98]
push ecx
push esi
call ebx
lea edx, [esp + 0x4c]
mov eax, dword [esp + 0x890]
push edx
push eax
call dword [sym.imp.USER32.dll_EndPaint]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x87c
ret 0x10
ret 0xb98d