Function at 0x4010b0
Capabilities:
Check os version
Create process on windows
Get file attributes
Get file size
Read file on windows
Set file attributes
Write and execute a file
Write file on windows

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xb5c
mov eax, dword [0x441400]
xor eax, ebp
mov dword [ebp - 4], eax
push 0x94
push 0
lea eax, [ebp - 0x1a8]
push eax
call fcn.00424040
add esp, 0xc
mov dword [ebp - 0x1a8], 0x94
lea ecx, [ebp - 0x1a8]
push ecx
call dword [sym.imp.KERNEL32.dll_GetVersionExA]
lea edx, [ebp - 0x110]
push edx
call fcn.00405b80
add esp, 4
test eax, eax
jne 0x40111f
push 0x10
push 0x4373d0
push str.Cannot_find_Temp_Directory_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
cmp dword [ebp - 0x1a4], 6
jb 0x401136
call dword [sym.imp.SHELL32.dll_IsUserAnAdmin]
test eax, eax
je 0x40137a
push str.NGMDll.dll
lea eax, [ebp - 0x110]
push eax
push 0x437400
lea ecx, [ebp - 0x2b0]
push ecx
call fcn.00423f46
add esp, 0x10
push 0x3e6
lea edx, [ebp - 0x2b0]
push edx
mov eax, dword [ebp + 8]
push eax
call fcn.00408d40
add esp, 0xc
test eax, eax
jne 0x40118e
push 0x10
push 0x437408
push str.Cannot_Load_Dll_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
cmp dword [ebp - 0x1a4], 5
jne 0x4011d8
cmp dword [ebp - 0x1a0], 0
jne 0x4011d8
push str.gdiplus.dll
lea ecx, [ebp - 0x110]
push ecx
push 0x437430
lea edx, [ebp - 0x4d0]
push edx
call fcn.00423f46
add esp, 0x10
push 0x3e3
lea eax, [ebp - 0x4d0]
push eax
mov ecx, dword [ebp + 8]
push ecx
call fcn.00408d40
add esp, 0xc
push str.NGMResource.dll
lea edx, [ebp - 0x110]
push edx
push 0x437448
lea eax, [ebp - 0x4d0]
push eax
call fcn.00423f46
add esp, 0x10
push 0x3e5
lea ecx, [ebp - 0x4d0]
push ecx
mov edx, dword [ebp + 8]
push edx
call fcn.00408d40
add esp, 0xc
push str.unicows.dll
lea eax, [ebp - 0x110]
push eax
push 0x43745c
lea ecx, [ebp - 0x4d0]
push ecx
call fcn.00423f46
add esp, 0x10
push 0x3e4
lea edx, [ebp - 0x4d0]
push edx
mov eax, dword [ebp + 8]
push eax
call fcn.00408d40
add esp, 0xc
cmp dword [0x441130], 0
jbe 0x4012ab
mov ecx, dword [0x441130]
push ecx
lea edx, [ebp - 0x110]
push edx
push str._s_d.dat
lea eax, [ebp - 0x3c0]
push eax
call fcn.00423f46
add esp, 0x10
push 0x3e7
lea ecx, [ebp - 0x3c0]
push ecx
mov edx, dword [ebp + 8]
push edx
call fcn.00408d40
add esp, 0xc
test eax, eax
jne 0x4012ab
push 0x10
push 0x437470
push str.Cannot_Load_Game_Data_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
lea eax, [ebp - 0x2b0]
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov dword [ebp - 0x3c8], eax
cmp dword [ebp - 0x3c8], 0
jne 0x4012ef
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [ebp - 0x4d4], eax
mov ecx, dword [ebp - 0x4d4]
push ecx
push str.Load_Library_Failed_
call section..text
add esp, 8
or eax, 0xffffffff
jmp 0x40171a
push str.NGMSetupMain
mov edx, dword [ebp - 0x3c8]
push edx
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [ebp - 0x3c4], eax
cmp dword [ebp - 0x3c4], 0
jne 0x401338
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov dword [ebp - 0x4d8], eax
mov eax, dword [ebp - 0x4d8]
push eax
push str.GetProcAddress_Failed
call section..text
add esp, 8
or eax, 0xffffffff
jmp 0x40171a
push str.1234567890_mom_ABCDEFGHIJ
mov ecx, dword [ebp + 0x10]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [ebp - 0x3c4]
add esp, 0xc
mov dword [ebp - 0x2b4], eax
mov eax, dword [ebp - 0x3c8]
push eax
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov eax, dword [ebp - 0x2b4]
neg eax
sbb eax, eax
neg eax
sub eax, 1
jmp 0x40171a
cmp dword [0x441130], 0
jbe 0x4013a8
cmp dword [0x441124], 0
jne 0x4013a8
push 0x10
push 0x4374d0
push str.Invalid_offset_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
push str._sfxpath
mov ecx, dword [ebp + 0x10]
push ecx
call fcn.00402730
add esp, 8
test eax, eax
jbe 0x4013d9
push 0x10
push 0x4374f4
push str.You_need_Admin_rights_to_continue_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
mov edx, dword [0x441124]
mov dword [ebp - 0xb48], edx
push 0x104
lea eax, [ebp - 0x630]
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
push str.NGMSetup.exe
lea ecx, [ebp - 0x110]
push ecx
push 0x437530
lea edx, [ebp - 0x740]
push edx
call fcn.00423f46
add esp, 0x10
lea eax, [ebp - 0x740]
push eax
call fcn.00405d80
add esp, 4
test eax, eax
je 0x401462
lea ecx, [ebp - 0x740]
push ecx
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
and eax, 1
jne 0x401450
lea edx, [ebp - 0x740]
push edx
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
and eax, 4
je 0x401462
push 0x80
lea eax, [ebp - 0x740]
push eax
call dword [sym.imp.KERNEL32.dll_SetFileAttributesA]
push 0
push 0x80
push 3
call fcn.004018a0
mov ecx, eax
call fcn.00402ba0
push eax
push 1
push SysReAllocString
lea ecx, [ebp - 0x630]
push ecx
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [ebp - 0xb50], eax
push 0
push 0x80
push 2
call fcn.004018a0
mov ecx, eax
call fcn.00402ba0
push eax
push 1
push 0x40000000
lea edx, [ebp - 0x740]
push edx
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [ebp - 0xb4c], eax
cmp dword [ebp - 0xb50], 0xffffffff
je 0x4014d4
cmp dword [ebp - 0xb4c], 0xffffffff
jne 0x4014f0
push 0x10
push 0x437538
push str.Cannot_make_temporary_file_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
or eax, 0xffffffff
jmp 0x40171a
cmp dword [ebp - 0xb48], 0
jne 0x40150e
push 0
mov eax, dword [ebp - 0xb50]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov dword [ebp - 0xb48], eax
lea ecx, [ebp - 0xb51]
call fcn.00401a60
push eax
lea ecx, [ebp - 0x4e8]
call fcn.00401960
lea ecx, [ebp - 0xb51]
call fcn.00401a70
mov byte [ebp - 0xb52], 0
lea ecx, [ebp - 0xb52]
push ecx
mov edx, dword [ebp - 0xb48]
push edx
lea ecx, [ebp - 0x4e8]
call fcn.00401a00
mov dword [ebp - 0x634], 0
mov dword [ebp - 0xb44], 0
push 0
lea eax, [ebp - 0x634]
push eax
mov ecx, dword [ebp - 0xb48]
push ecx
push 0
lea ecx, [ebp - 0x4e8]
call fcn.00401940
push eax
mov edx, dword [ebp - 0xb50]
push edx
call dword [sym.imp.KERNEL32.dll_ReadFile]
test eax, eax
je 0x4015de
mov eax, dword [ebp - 0x634]
cmp eax, dword [ebp - 0xb48]
jb 0x4015de
push 0
lea ecx, [ebp - 0xb44]
push ecx
mov edx, dword [ebp - 0xb48]
push edx
push 0
lea ecx, [ebp - 0x4e8]
call fcn.00401940
push eax
mov eax, dword [ebp - 0xb4c]
push eax
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x4015de
mov ecx, dword [ebp - 0xb44]
cmp ecx, dword [ebp - 0xb48]
jae 0x401612
push 0x10
push str.Error
push str.Cannot_copy_temporary_file_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
mov dword [ebp - 0xb58], 0xffffffff
lea ecx, [ebp - 0x4e8]
call fcn.00401980
mov eax, dword [ebp - 0xb58]
jmp 0x40171a
mov edx, dword [ebp - 0xb50]
push edx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov eax, dword [ebp - 0xb4c]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov dword [ebp - 0x4dc], 0xffffffff
push 0x3c
push 0
lea ecx, [ebp - 0x524]
push ecx
call fcn.00424040
add esp, 0xc
mov edx, dword [ebp + 0x10]
push edx
lea eax, [ebp - 0x630]
push eax
push str._sfxpath:_s__s
push 0x400
lea ecx, [ebp - 0xb40]
push ecx
call fcn.00402770
add esp, 0x14
mov dword [ebp - 0x524], 0x3c
mov dword [ebp - 0x51c], 0
mov dword [ebp - 0x520], 0x540
mov dword [ebp - 0x518], str.runas
lea edx, [ebp - 0x740]
mov dword [ebp - 0x514], edx
lea eax, [ebp - 0xb40]
mov dword [ebp - 0x510], eax
mov dword [ebp - 0x508], 1
lea ecx, [ebp - 0x524]
push ecx
call dword [sym.imp.SHELL32.dll_ShellExecuteExA]
test eax, eax
je 0x4016f8
cmp dword [ebp - 0x4ec], 0
je 0x4016f8
push 0xffffffffffffffff
mov edx, dword [ebp - 0x4ec]
push edx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
test eax, eax
jne 0x4016f8
lea eax, [ebp - 0x4dc]
push eax
mov ecx, dword [ebp - 0x4ec]
push ecx
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
mov edx, dword [ebp - 0x4dc]
mov dword [ebp - 0xb5c], edx
lea ecx, [ebp - 0x4e8]
call fcn.00401980
mov eax, dword [ebp - 0xb5c]
jmp 0x40171a
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00423ff6
mov esp, ebp
pop ebp
ret 0x10