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 0x4010d8
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.00401b60
push str.WARCRAFT_III_OK
push 0
push 0
push 0
mov dword [0x40aadc], eax
call ebx
mov dword [esp + 0x10], eax
call ebp
cmp eax, 0xb7
je 0x4013c2
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.00401d6e
lea edx, [esp + 0x494]
push edx
call fcn.00401d6e
add esp, 8
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
mov esi, eax
push 0x408040
push esi
call fcn.00401cf8
add esp, 8
test eax, eax
jne 0x4011c9
mov cl, byte [eax + 0x408040]
mov byte [esp + eax + 0x3c], cl
inc eax
test cl, cl
jne 0x401195
lea edx, [esp + 0x3c]
mov eax, esi
sub edx, esi
mov cl, byte [eax]
mov byte [edx + eax], cl
inc eax
test cl, cl
jne 0x4011ac
xor eax, eax
mov cl, byte [eax + 0x408040]
mov byte [esp + eax + 0x3c], cl
inc eax
test cl, cl
jne 0x4011b8
jmp 0x4011db
lea edx, [esp + 0x3c]
mov eax, esi
sub edx, esi
mov cl, byte [eax]
mov byte [edx + eax], cl
inc eax
test cl, cl
jne 0x4011d1
lea eax, [esp + 0x3c]
push eax
call fcn.00401d6e
add esp, 4
xor eax, eax
mov cl, byte [eax + 0x40aad8]
mov byte [esp + eax + 0x140], cl
inc eax
test cl, cl
jne 0x4011ea
lea ecx, [esp + 0x490]
lea edx, [esp + 0x3c]
push ecx
push edx
call fcn.00401cf8
lea ecx, [esp + 0x44]
lea edx, [esp + 0x44]
sub eax, ecx
push eax
lea eax, [esp + 0x14c]
push edx
push eax
call fcn.00401c30
or ecx, 0xffffffff
lea edi, [esp + 0x5a8]
xor eax, eax
add esp, 0x14
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x140]
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
mov edx, dword [str._classic]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x140]
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
lea edi, [esp + 0x140]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov eax, dword [0x408038]
mov cx, word [0x40803c]
dec edi
mov dword [edi], edx
lea edx, [esp + 0x140]
mov dword [edi + 4], eax
xor eax, eax
mov word [edi + 8], cx
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]
push ecx
push 0
push 0
push 0
push 1
push 0
lea edx, [esp + 0x15c]
push 0
push edx
push 0
call dword [sym.imp.KERNEL32.dll_CreateProcessA]
test eax, eax
jne 0x401371
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.00401bc0
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
jne 0x401118
jmp 0x4013be
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 0x4013f3
dec eax
jne 0x401118
push 0
call fcn.00401bc0
add esp, 4
mov edi, dword [esp + 0x18]
push edi
call fcn.00401bc0
add esp, 4
call fcn.00401c10
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, 0xd
ja case.default.0x401414
xor edx, edx
mov dl, byte [eax + 0x4014d0]
jmp dword [edx*4 + 0x4014bc]
lea eax, [esp + 0x244]
push 0x104
push eax
push 4
jmp 0x40147f
lea ecx, [esp + 0x244]
push 0x104
push ecx
push 5
jmp 0x40147f
lea edx, [esp + 0x244]
push 0x104
push edx
push 6
jmp 0x40147f
lea eax, [esp + 0x244]
push 0x104
push eax
push 0xa
jmp 0x40147f
lea ecx, [esp + 0x244]
push 0x104
push ecx
push 3
jmp 0x40147f
lea edx, [esp + 0x244]
push 0x104
push edx
push 8
push ebx
call ebp
push 0
call fcn.00401bc0
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
jne 0x401118
jmp 0x4013be
call ebp
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 edi, dword [esp + 0x14]
push 0x11
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0x1c]
sub eax, ecx
sub eax, 8
add ecx, eax
add edx, eax
mov dword [esp + 0x24], ecx
mov ecx, dword [esp + 0x20]
mov eax, ebx
mov dword [esp + 0x1c], edx
sub eax, ecx
sub eax, 0x10
cdq
sub eax, edx
lea edx, [esp + 0x90]
sar eax, 1
add eax, 8
add ecx, eax
add edi, eax
mov dword [esp + 0x20], ecx
lea ecx, [esp + 0x18]
mov dword [esp + 0x18], edi
push ecx
lea edi, [esp + 0x94]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push edx
push esi
call ebp
lea eax, [esp + 0x4c]
mov ecx, dword [esp + 0x890]
push eax
push ecx
call dword [sym.imp.USER32.dll_EndPaint]
pop edi
pop esi
pop ebp
pop ebx
xor eax, eax
add esp, 0x87c
ret 0x10
out dx, al
out dx, al
or bl, cl
or byte [eax], cl
out dx, al
int1
or dh, ch
out dx, al
out dx, al
out dx, al
out dx, al
out dx, al
out dx, al
out dx, al
out dx, al
fadd dword [0xf5eef505]
or bl, cl
or dh, ch
out dx, al
add eax, 0x404f3d8
pop es
add dword [edi], eax
add al, 4
add al, 1
add dword [ecx], eax
add dword [ecx], eax
add edi, ebp
invalid